αα½ααααΈ α αΆα! ααααααααααααα»αααΊ Maxim Vasiliev αααα»αααααΎααΆαααΆα’ααααα·ααΆα αα·αα’αααααααααααααααααααα
FINCH α ααααααααααα»αα
ααααααΆααα’αααααΈαααα αααααααΎ ElasticSearch ααΎαα’αΆα
ααααΎαααΆααααα½αα
ααα½α 15 ααΆααααα»ααααααα 6 ααΆααΈ αα·ααααααΎαααααα·αααααΆαααΆααααα»ααααα
αΆααααααα
ααΎααα αααααααααα’αα·αα·ααααααααΎαα ααΆα’αα»ααααΎαααΉαααααΌαααααΎαααααααΆααααααα
αΆααααΆααααΈααΎαααΆα NDA ααΎααααααΉαααΆααααΉαααΆαααα’αααααααΉααα·αααα½αααααΈααΏααααααα αααβαα
α
αααααααααααααααααΎαααΆα
αα ααΎαααααααΆααααααααααααΎα ααΎααααααΎαααααΆαααααααααΆααΆααΌααα»αααΆαααααα ααααα αα·ααααααα·ααΈααΌααααααααααα’αα·αα·ααααααααΎαα αα ααΆααααααααααΌαα α’αΆα ααΎαααΎααα αααα»αααααΆααααΆαα
αα
αααα»αααααΎαααΆαααΆαααΆα ααΎαααααΎαααΆαααααα·ααααα·ααΆααα½αα
ααα½αααα ααΆααα·α ααΆαααΌααΆαα ααααα·ααααα·ααΆαααΆαα½ααααα»αααα’αααααααΎααααΆαα αααααΎααααααΆαα»ααααααα ααα»ααΆα
αααΎα α αΎαααααΆαα
αΌα αα·αααΆαα
αααα·ααααααααααα
ααΆααααααααααααΆααααα
αααααα
ααΆααααΆαααααΎαααΆααααα αααΆααα ααααααααΎαααα½ααα·ααααααααΈα’αα·αα·αα α αΎααααααΌαααΆαα α’αααααααΎααααΆααα ααΎαααΈαααααα ααΆααααΆαααααΎαααΆααααααΆααααααΎααΆαααΆαα½αααΆαααΌααΆαα αα·ααααααα·ααΈααααΆαααααααΆαααααααα
αααααααα·αααααα
ααααΌαα‘αΎα ααΎαααααΎ PostgreSQL ααΆαααααααααα»ααα·αααααααααα½ααααααααααΎαα αα»ααααααααα·ααααααΆααΊαααααααΆααααααΆαα DBMSα ααααααΆαααααααα·ααααα·ααΆα ααΆααΆααΆααααα·αααααααααααΆαα’αα·αααα αα½αααααααΌααΆαααα§ααααααααααΆααααΆααα½ααααα αΌαα αα½αααααααΉαααααΎαααΆαααα’ αα½αααααααααααααΌαααΆαααααααΎααααα»αααααααααΌααα½αααα
ααΎαααΆααααααΆαα»ααα·ααααααααΆααα’αααα αααα»α Postgresα ααΈααααα·ααααα·ααΆααα ααααααΆαα ααα»ααααα ααα½αα’αααααααΎααααΆααααΆαααΎαα‘αΎα α αΎαααΆαα½αααΉαααΆα ααα½αααααΎα
ααΎααααΈααα α ααα½ααααααααα αΆαααααΆααα ααααΆα 2017 αα ααΎααα ααααααααα½αααΊ 131 ααΆαα αα ααααΆα 2018 - 125 ααΆαα αα ααααΆα 2019 ααααααα 130 ααΆαα αααααα 100-200 ααΆαααΈααααα αααααααααα ααααα αα·ααααααα·ααΈααΌαααααα α αΎαα’ααα ααΉαααα½αααΆαααααΎαααΆαα αααΎαα
αα ααααααααααααααΈαα ααααΎα Postgres αα·αα’αΆα ααααααααΉαααααα»αααΆαααααα ααΎααα·αα’αΆα ααααααΆααα - αααα½αααααααααααΆααΆα αααΎαααΆαααα α αααα αααααΎααα·αα’αΆα αααααΎαα ααα½αααααααααααααααααααΆααααΆαααα
ααΎαααΆαααΉαααΆααΆααααααΌαααΆααααααΆαααααααααααα»ααα·αααααααααααααααααααΉαααααααααααΌαααΆαααααααΎα αα·αααααααα»αα ααααΈ PostgreSQL α Elasticsearch αα·α MongoDB ααααΌαααΆαα αΆαααα»αααΆααΆαααααΎααααα’αΆα ααααΎααΆαα α α»ααααααα αΆααααΎα ααα»α ααΌα ααΆααααααα
- ααααΏαααααΎαα·αα·ααααααΊα αααααΆαααα·ααΆααα·αααααααααα»ααα·αα·ααααααΎαα‘αΎαα ααΆαα½αααΉα Elastic ααααΏααα·αα’αΆαααααααΎα ααα½ααα·αααααααααααα
- αα·αααΆαααΆααααααααα’αααααααααααααα
ααΌα ααααααΎαααααΎαααΎα Elastic αααααΆαααααα½αααΎα α αΎααααα ααααααΆααααΆαααααΆααααααΌαα
ααααΌααα Elastic
1. ααΎαααΆαα αΆααααααΎαααΆαααααΆααααααΌαααΆαα½αααΉαααααΆαααααααααααα ααα»α αααα α’αα·αα·ααααααααΎαααΆαα ααα»α αααααα»ααααα αα 70 α αΎααααα»αααααααα½α ααααααααααΆααααααααααΆα αααΎαααααΌαααΆαααΆαααΆααα ααΎααα ααααα αα·ααααα»ααααααα·ααΈα
- α’ααααααααααααααΆααααααααααα
- Geosearch αααα»αααΆααααααΆααααααα±ααααΈα ααα»α ααΆααααΆαααα½αα ααΆα§ααΆα ααα ααααα·αααΎα’αααααααΎα ααααΎαα ααα»α αααααΆααααα αα·αααααααααααΆααα
- ααααααααααααΆααααααααΆααααααα±αα - α’αααααααΎααααΆααααΌααααααΆααααΆααααα ααΎαααααΈ α αΎαα ααα»α ααΆααα’αααα αααα»αααΆααααααααΌαααΆααααα αΆααααααΆααα
- αααααααααααααααααααααα αα·αααα»ααααα»αααααΆααΈααααΆαα αα·ααα αααααα»αααΆαα αΆααααααΆαα
αα·ααΆαα’αααΈα’αααααΆα αα αααα»α Postgres ααΎαααΆαααααααα·αααααααααααΆααααΆαααααααΈ αα·αααααααΆα α αΎααα αααα»α Elastic ααΎααααααΎα Snapshots ααΈαα·ααααααααΎαα ααΆααα·αααΊααΆααααΌα Postgres αα·αα’αΆα ααααααααΉαααΆαααααααααααααααα·αα·α ααααααΆααα’ααα αα·αααααΉαααααΆααα·αα·ααααααΆα αααΎαααα»ααααααα αα½αααΆααα’αΆα αααα½αααΎααααΆααααα ααΌα αααααααααα·ααΈαααααααα Postgres ααααΌαααΆαααΆααααα α αΎααα·ααααααΆααααΌαααααΎαα·αα·ααααααΆαα½αα‘αΎαα
2. αα½ααααααΆααααΊαααααααααααΆαα ααΆαααααα»αααααααΆαααα α‘αΎααα ααΎααα αααααααΆαααααΆααααααααΎααααΈαα»αα±ααα’αααααααΎααααΆααααΆαααααααα αΌαααααααΆααα·ααααααααααΌααααααααααα»ααααα ααα αααααΊααΆα’αααΈαααααΆααααααααααΊαααααΆααα αα ααΎααα ααααα α’αααα’αΆα ααααααααααααΆαααααΌααααα’ααααα α αΎααααα»αααααααα½αααααΆααααααααααααα α αΆααααΆααααΈαα½αααΆααααααΌαααΆαααααΎα‘αΎαααΆαααα Elastic αααααα
3. αααααΆααααααΎαααΆαααααΆααααααΌαααααΎαααΆαααααα·ααααα·ααΆαα α’αααααααΎααααΆααα’αΆα αα·αααα·αααααΆααααΆαααα½ααα ααΎααα ααααα αα·αα αΌααα½ααααα»αααΆαα αΆαααααααΆααα αααααΆααααΈααΆααα·ααααααα ααΎαααααΎαααΆααα·αααααααα½αα ααα½ααα ααΆαα·ααααα ααααα α»ααααααΆα α αα·αααααααααααααΆαα αααααΆααααΆαααααααααααααα·αααΎαα ααααααααααΆα ααα½αααααΆααα·αααΊαα ααααααααΆαα½ααααα αα 1,5-2 ααΆααααααΆαααααα ααααααααααααΆααα½αααα’αΆα ααΆαααα 53 ααΆαα
αααα»ααααααΆαα½αααααΆααα αα·ααααααααααΌαααααααΎαααΆααααα»αααααααα’αααααααΆ α’αααααααΎααααΆαααα·αα αΌαα α·ααααααα αΆαα αααΎααααααααααΆαααααααααααααα αα·αααΆααα·ααΈααΎααααΈαααααα ααΆαααΌααααααααΆαααααααααααααΆαααα Postgres ααααα ααΆααΏααααΎαααΆαααα½ααααα»α α αΎααααααααααααΎααααα»αααααΎαααΆαααααΎααΆααα’αα α’αααααααΎααααΆαααα·αα’αΆα αα·αα·αααααΎαααΆααΎαα½αααααΆαααα½ααααααΆααα¬α’αααααααα αααβαα·αβααΌαβααΈαααΆαβαααααΆααβα’αΆααΈαααααβαα ααΌα ααααβααΎαβααΆαβααααΌαβααααΎαααΆαβαα Elasticsearchα
αααααα
α₯α‘αΌααααααΆαα’αΆαααααααααΌαααΆαααααααα ααΆααααααααααα’ααααΎααααΉαααα·ααΆααα ααααα ααΆαααααααααααΆααααααα
- α ααα»α αααα αα ααααααααΎαααα½αααΆααα·ααααααααΈαααααααΆααααα ααΎαα αΆααααααΎαααΆαα’αΆαααααααααΆααα
- ααααααΆαα αααΆαααΆααααααΆαααΆαα½αααααΌαααΆαααααααα½ααα ααΎααα ααααα ααΆααααΌαααΆαααααΎαααααααααααααααα·αα Elastic α
αα ααΈαααααΆααααΈαααααααααΆααΆαααααααα·ααΆαα’αααΈαα»ααααααααα·αα Elastic α αα αααα»α Postgres αα αααααααΎααααΎ α’αααααααΌααααα αΆααα αΌααααααΆααααΎαααΆααααααααααΆααΆααα’αααααααααααααααα α’αααα’αΆα ααααΎαααααααααΆα ααα½α 10 αα Elastic α αΎαα αΆααααααΎαααααΎααΆαααααΆααααααα·ααααα αΆαααΆαα ααα αΆααααααααααΆαα ααΆαα Shards ααΆααα’ααα ααΆααΆααα·αααΆαα Shard α¬ Replica αα½αα ααα½ααααα ααααΆαα·αααΎααα·ααααααααααΆααααααα ααα»ααααααΆααααααα’αααΈαααΉαα’αΆα ααααΆα
αα·ααΈααΆααααααα½ααααα αΌαααααΆ
ααΆα 2 αα·ααΈαααα»αααΆααα½ααααα αΌαααΆαα½α Elastic:
- ααΆααααα’αα·αα·ααααΎαααΆαααα TCP α α’αααααΎαααααααΆαα·ααΎααααα»αααααΆααααΆαααααΎααα ααΆαααααααΌαααΆαααΆααααα αΎα ααΆαααααααααααααααααΆααΆαααΆααα’αΆαααα’α½αααααΆααα ααΌα ααααα αΎα ααΎαα’αα»αααααα·αααααΎααΆ α αΎαααααΆααΆαααααααααΆα ααααΆαααααα»αα
- ααΆααααα ααα»α αααααΆαα HTTP αααα’αααα’αΆα ααααΎααΆααααααΎ JSON αα·αααΆααααααααααα Lucene α α α»ααααααααΊαααΆαααΈαα’αααααααα Elastic ααααΎα αα αααα»ααααααΎαααα ααΎαααα½αααΆααααααααΆααααα»αααΆα Batch ααΆααααααααΎ JSON ααΆαααα HTTP α αααααΊααΆαααααΎααααααΎααααα»αααααΆααΆαααααΎα
ααΌαα’ααα»αα ααααα ααα»α αααααΆαα HTTP ααΎαα’αΆα ααααΎαααααΆαααααααααααααΌαααΆαα’αα»ααααα’ααααΆααααααΆαααΈαααααα HTTP α ααΎαα’αΆα ααΆαααα’αααααααααααααΈ Batch αα·α Asynchronous API ααααα ααΈαααα»ααααααααΌαααααΎαααΆαααααα αααααΆααα½ααααΆαα αααΎααααα»αα’αα‘α»ααααααααααααΆαααααααααααΆααααααα½α (ααααααααΎααΆααΆαααααα)
ααααα½αα ααα½ααααααΆααααααααααα
- αααααΆαα»αα’αααααααΎααααΆαααααααΆαααα½ααααααΆαααα αααα»α Postgres αααα»α 20 ααααααααα·αααΆαααααα»α: 460713 αααααααΆαααα»ααααααα 42 αα·ααΆααΈ
- Elastic + reactive client αααααΆαα 10 threads + batch αααααΆαα 1000 ααΆαα»: 596749 records αααα»ααααααα 11 αα·ααΆααΈ
- Elastic + reactive client αααααΆαα 10 threads + batch αααααΆαα 1000 ααΆαα»α 23801684 αααααααΆαααα»ααααααα 4 ααΆααΈα
α₯α‘αΌααααααΎαααΆαααααααααααα·ααΈαααααααααααααΎ HTTP ααααααααΎα JSON ααΆ Batch/non-Batch α αΎαααααΎααΆααΆαααααααΆαααΈαααααα HTTP ααΆαα½αααααα·ααα·αααΈαααααΆαααα α’αααααα’αΆα ααααΎαααΎαααααΎααααΎαααααααΆααααα α¬α’ααααΆααααααα
αα αααα»αααΆααα½ααααα αΌααα½αα ααα½α ααΎααα ααααααΎαααΆαααΈααααααααΉααααααΌαααααΌαααΆα ααα»αααααααααααΆααααααΆαααα αΆααααΆααααααααΌαααΆαααααΆααααα»αααααα αααα»αααααΈααα α’αα·αα·ααααααΆαααααα½αααααααΆ ααααααααΎαα‘αΎααα ααΎααΌαααααΆααα Spring WebClient ααααΌαααΆαααααΎαααααΆααααααΎαααΆαα
ααΆαααααααααααΆααα
αα½αααααΆααααα ααααααααααααα αααΆαααααααααααΆααααααα½ααααααΆααα’αααααααΎααααΆαα - αααααΊααΆ Highload ααΌα ααααΆ ααααααα ααααααααΎαααααΎααΆαααΆαα½αα’αααααααΎααααΆααααΆαααα·αααΆαααΆαααααα»ααααααααΆαααααΆα
ααΆααααααΆ ααΆααααα»αααααααααα»αααΎαα‘αΎααααα»αα’αα‘α»αααααα·ααααααΆα ααα»ααααααΆαααααααααααΆααααααΊααΆαααααα·ααα»αααααΆααΆαααααα»αα ααΆαβααΈβααααΆαβαα»α αα βααααβααααααααααΆαβααα ααΎαβαααβαααα·αβααΆα α’α§ α₯α¨α α¨α©α ααααΏαα αα·ααααααβαααβααααΌαβα αααΆαβαααβααΆαβαααααβααααβααΎααααΈβααααΎαααΆα αααβααααβα±ααβααΆαβααΆαβαα’αΆαααα’α½αβαααβα’αααβααααΎβααααΆααα α’αααααααΎααααΆααααΆαααα½ααααααΆαααααααΆααααΆαα αΌααα½α ααα»ααααααΆα αααΆααααΆααααΆααααΎαααΆαα αΆαααΆα αααααΌααααααΏαα
αα ααΎαααααΆα 2019 ααΎαααΆααααααα α α·αααααΆ ElasticSearch ααΊα αΆαααΆα αα ααααα½αααααΆα ααΎαααΆααααα αααααΎαααΆααα·αααααααααααα½αααΆααα αααα»α Elastic αα·αααααααααααααΆαα ααΆαα API αααααααα·ααΈααΌαααααα αα·αααα αααααα ααΆαααααα αα ααααΆααααααΆαααααα»αα’αα‘α»ααααααααααααααΆα ααΎαααΆαααααΎαααΆα 15 ααΆαα»αααα»ααααααα 131 ααΆααΈα
αααααΆαααΎαααΆαααα»αααααΆα αααΎααααα αααα·αααα·ααα αα·αα αΌααα½ααααα»αααΆαα αΆαααααααΆαααα αααα»αααΆαααααααααααΆαααααααΎα αααααΆαα·ααΆαααΆαααααααα’αΆααααα α₯α‘αΌαααα ααΎαααααΎααααααΆααα αα α»αααααααα Elastic ααα»αααααα αααα’ααΆαα ααΎαααΆααααααααααααααααααΆααααααΆααααααΆαα»ααααααΆααααααααααααα Postgres ααΆαααααααααα»αα’α α·ααααααααα ααΎααααΈαα»αα±ααααααααααααααα Elastic αααααΆαααααααααααααααΆαααααα
ααα ααααΈααααα·ααααΆα/ααα ααααΈααααα·ααααΆα
αα αααααα ααΎαααΆααααααααααΆααααααΆααα’αααααααΎαα αααα Elastic α αΎαααΆαααα’αΆααα ααααααα α₯α‘αΌααααααΎααααα»ααααααΎααα·αα·αααααα½ααα αααα»α Elastic αα ααΎααααΌαααααΆααααα»αααΆααααΆααααααΆαααα αααα»α Postgres αααα αααΆααααααΎααααα»αα’αααααααΎααααΆααα
αα αααα’ααΆαα ααΎαααΆααααααααααααααααΆαααα ααααα·αααΎααΎααααααΆααααΎαα·ααααααααΆαααΆαα αααα»αααα α αΎααααα»αααααΌαααΆααααααααα ααα½ααα½ααααααααααΆαααααααααα ααααα·ααααααΆαα·α αα ααΆααααααΆαα Postgres αααααα
ααααα·αααΎααΎαααααΌαααΆαααΆααααααααα’ααααααααααααα αααα»ααα»αααΆα α¬ααααα·αααΎααΎαααΆαααααααααααααααααααααααααΆααΆα αααΎα αααααΎαααΉααα½α α αΎαααΆααΆααααΌαααΆααααααααα ααΆ Elasticα
βββ
α’ααα»ααααααΆααααΆαα’αΆαα ααααα·αααΎαααα»αα αα»αααααα’αααααααααΎ ElasticSearch α αΎαααΆαααααΈα’αα»ααααααααΆααααααα’αααααα ααΌαααααΆαααα½αααΎαα ααΆααΉααα½αα±ααα
αΆααα’αΆαααααααααα»αααΆαααΉαααΈαααααααα’ααααααααααΎ :)
ααααα: www.habr.com