ืืื ืืืจ! ืฉืื ืืงืกืื ืืกืืืืื, ืื ื ืขืืื ืืื ืืืกื ืืื ืื ืคืจืืืงืืื ื-FINCH. ืืืื ืืจืฆืื ื ืืกืคืจ ืืื ืืืฆื, ืืืืฆืขืืช ElasticSearch, ืืฆืืื ื ืืขืื 15 ืืืืืื ืืงืฉืืช ื-6 ืืงืืช ืืืืืขื ืืช ืืขืืืก ืืืืื ืืืชืจ ืฉื ืืื ืืืงืืืืชืื ื. ืืฆืขืจื ื, ื ืฆืืจื ืืืกืชืืจ ืืื ืฉืืืช, ืืืืืื ืฉืืฉ ืื ื NDA, ืื ื ืืงืืืื ืฉืชืืื ืืืชืื ืื ืืกืืื ืืื. ืืื ื ืื.
ืืื ืืคืจืืืงื ืขืืื
ืืฆื ืืืืืจื ืฉืื ื, ืื ื ืืืฆืจืื ืฉืืจืืชืื ืืืืืืืื ืืช ืืืืฆืืขืื ืฉื ืืชืจื ืืืื ืืจื ื ืืืืคืืืงืฆืื ืื ืืื ืฉื ืืืงืื ืฉืื ื. ื ืืชื ืืจืืืช ืืช ืืืื ื ืืืืื ืืชืจืฉืื:
ืืชืืืื ืืขืืืื ืื ื ืืขืืืื ืืกืคืจ ืจื ืฉื ืขืกืงืืืช: ืจืืืฉืืช, ืชืฉืืืืื, ืคืขืืืืช ืขื ืืชืจืืช ืืฉืชืืฉ, ืขืืืจื ืื ื ืืืืกื ืื ืืจืื ืืืื ืื, ืืื ืืืืืืื ืืืืฆืื ื ืชืื ืื ืืื ืืืขืจืืืช ืืืฆืื ืืืช.
ืืฉื ื ืื ืชืืืืืื ืืคืืืื ืืืฉืจ ืื ื ืืงืืืื ื ืชืื ืื ืืืืงืื ืืืขืืืจืื ืืืชื ืืืฉืชืืฉ. ืื ืืกืฃ, ืขืืืื ืงืืืืื ืชืืืืื ืขืืืื ืขื ืชืฉืืืืื ืืชืืื ืืืช ืืื ืืกืื.
ืจืงืข ืงืฆืจ
ืืชืืืื, ืืฉืชืืฉื ื ื-PostgreSQL ืืืืืจ ืื ืชืื ืื ืืืืื. ืืืชืจืื ืืช ืืกืื ืืจืืืื ืฉืื ืขืืืจ DBMS: ื ืืืืืช ืฉื ืขืกืงืืืช, ืฉืคืช ืืืืืช ื ืชืื ืื ืืคืืชืืช, ืืืืื ืจืื ืฉื ืืืื ืืืื ืืืจืฆืื; ืืฉืืืื ืขื ืืืฆืืขืื ืืืืื ืกืืคืงื ืืช ืืฆืจืืื ืฉืื ื ืืืฉื ืืื ืจื ืืืื.
ืืืกื ื ืืืืืืื ืืช ืื ืื ืชืื ืื ื-Postgres: ืืขืกืงืืืช ืืขื ืืืฉืืช. ืืื ืืกืคืจ ืืืฉืชืืฉืื ืืื, ืืืืชื ืื ืืกืคืจ ืืืงืฉืืช.
ืืืขื ืืืื ื, ืืกืคืจ ืืคืขืืืช ืืฉื ืชื ื-2017 ืืืื ืืืชืจ ืืืกืงืืืค ืขืืื ืขื 131 ืืืืืื. ืืฉื ืช 2018 - 125 ืืืืืื. 2019 ืฉืื 130 ืืืืืื. ืืืกืฃ ืขืื 100-200 ืืืืืื ืืืืจืกืช ืืืืืืื ืฉื ืืืชืจ ืืืืืคืืืงืฆืื ืืืืืืื, ืืืชื ืืงืื ืืกืคืจ ืขืฆืื ืฉื ืืงืฉืืช.
ืขื ืฆืืืืช ืืคืจืืืงื, Postgres ืืคืกืืงื ืืืชืืืื ืขื ืืขืืืก, ืื ืืื ืื ื ืืื - ืืืคืืขื ืืกืคืจ ืจื ืฉื ืฉืืืืชืืช ืฉืื ืืช, ืขืืืจื ืื ืืฆืืื ื ืืืฆืืจ ืืกืคืจ ืืกืคืืง ืฉื ืืื ืืงืกืื.
ืืื ื ืฉืืฉ ืฆืืจื ืืืืืจื ื ืชืื ืื ืืืจืื ืฉืืกืคืงื ืืช ืืฆืจืืื ืฉืื ื ืืืืจืืื ืืช ืืขืืืก ื-PostgreSQL. Elasticsearch ื- MongoDB ื ืืฉืื ืืืคืฉืจืืืืช ืืคืฉืจืืืช. ืืืืจืื ืืคืกืื ืื ืงืืืืช ืืืืืช:
- ืืืืจืืช ืืฆืืจืช ืืื ืืงืก ืืืืืช ืืื ืฉืืืืช ืื ืชืื ืื ืืืื ืืงืกืื ืืืื. ืขื Elastic, ืืืืืจืืช ืืื ื ืชืืืื ืืืืืช ืื ืชืื ืื.
- ืืื ืืืคืืฉ ืืงืกื ืืื
ืื ืืืจื ื ืืขืฆืื ื ืืืืกืืืง ืืืชืืื ื ื ืืืขืืจ.
ืืขืืจ ืืืืกืื
1. ืืชืืื ื ืืช ืืืขืืจ ืืฉืืจืืช ืืืคืืฉ ื ืงืืืืช ืืืืืจื. ืืืงืื ืฉืื ื ืืฉ ืืกื ืืื ื-70 ื ืงืืืืช ืืืืจื, ืืืืืจ ืืฆืจืื ืืกืคืจ ืกืืื ืืืคืืฉืื ืืืชืจ ืืืืคืืืงืฆืื:
- ืืืคืืฉ ืืงืกื ืืคื ืฉื ืขืืจ
- ืืืคืืฉ ืืืืืืจืคื ืืจืืืืก ื ืชืื ืื ืงืืื ืืืฉืื. ืืืฉื, ืื ืืืฉืชืืฉ ืจืืฆื ืืจืืืช ืืืื ื ืงืืืืช ืืืืจื ืงืจืืืืช ืืืืชื.
- ืืืคืืฉ ืืคื ืจืืืืข ื ืชืื - ืืืฉืชืืฉ ืืฆืืืจ ืจืืืืข ืขื ืืืคื, ืืื ืื ืงืืืืช ืืจืืืืก ืื ืืืฆืืืช ืื.
- ืืคืฉ ืืคื ืืกื ื ืื ื ืืกืคืื. ื ืงืืืืช ืืืืืจื ืฉืื ืืช ืื ืืื ืืืืืจ
ืื ืืืืจืื ืขื ืืืจืืื, ืื ื-Postgres ืืฉ ืื ื ืืงืืจ ื ืชืื ืื ืื ืืืคื ืืื ืืืืฉืืช, ืื Elastic Snapshots ืืงืืืื ืืื ืชืื ืื ืืืงืืจืืื. ืืขืืืื ืืื ืฉืืชืืืื Postgres ืื ืืืื ืืื ืืืชืืืื ืขื ืืืืคืืฉ ืืคื ืื ืืงืจืืืจืืื ืื. ืื ืจืง ืฉืืื ืืื ืืงืกืื ืจืืื, ืื ืืืื ืื ืืืคืืฃ, ืื ืฉืืชืืื Postgres ืืื ืืืืืื ืืื ืืืื ืืืืื ืืื ืืงืก ืืืฉืชืืฉ.
2. ืืื ืืชืืจ ืืื ืืืืจ ืืืืฉืืช. ืคืจืกืืืื ืืืคืืขืื ืืืชืจ ืืื ืืื ืืื ืฉืืืฉืชืืฉ ืื ืืื ืืืืืื ืืืจืืืช ืืืืืข, ืืฉ ืืืืื ืืช ืื ืชืื ืื ืืคื ื ืืื ืคืงื. ืืฉืืื ืื ืืฉ ืืืคืืฉ: ื ืืชื ืืืคืฉ ืืืชืจ ืืคื ืืชืืืช ืืงืกื, ืืืืงืืื ืืืืจ ืคืืืืจืื ื ืืกืคืื, ืฉืื ืื ื ืขืฉืื ืื ืืืืฆืขืืช ืืืกืืืง.
3. ืืืืจ ืืื ืืขืืจื ื ืืช ืขืืืื ืืขืกืงื. ืืฉืชืืฉืื ืืืืืื ืืงื ืืช ืืืฆืจ ืืกืืื ืืืชืจ ืืืืฉืชืชืฃ ืืืืจืืช ืคืจืกืื. ืืืืจ ืจืืืฉืืช ืืืื, ืื ื ืืขืืืื ืืืืช ืืืืื ืฉื ื ืชืื ืื, ืืืืืื ืืกืืคื ืฉืืืข ืืืืืื. ืืฉื ืืฉืืืื, ืื ืืืืื ืจืืืืื ืืกืคืจ ืืจืืืฉืืช ืืื ืืืคืฉืื ืืื 1,5-2 ืืืืืื, ืื ืืืืื ืื ืชืื ืืืื ืืืืืข ื-53 ืืืืืื.
ืืื ืขื ืืืช, ืืฉ ืืขืื ืืช ืื ืชืื ืื ืืืื ืืงืฆืจ ืืืืชืจ - ืืืฉืชืืฉืื ืื ืืืืืื ืืืืืช ืืชืืฆืื ืืกืคืจ ืืืื. ืืื ืืจื ืืืฉืื ืืืขืืื ืืืื ืืจื Postgres - ืืขืชืื ืงืจืืืืช ืงืืืื ื ืื ืขืืืื, ืืืืื ืฉืืืคืื ื ืืื ืืืงืฉืืช, ืืืฉืชืืฉืื ืื ืืืื ืืืืืง ืื ืื ืงืืืื ืคืจืกืื ืื ืื. ืื ืื ืืืื ื ืขืื ืืขืกืงืื, ืื ืืขืืจื ื ืืช ืืขืืืื ื- Elasticsearch.
ืชืงืืคืชืืืช
ืืขืช ืืขืืืื ืื ืืืืืจืื ืืืืกืกื ืืืจืืขืื, ืืืชืื ืืชื ืืื ืืืืื:
- ื ืงืืืืช ืืืืจื. ืืจืืข ืฉื ืงืื ื ืชืื ืื ืืืงืืจ ืืืฆืื ื, ืื ื ืืื ืืชืืืืื ืืขืืืื.
- ืึฒืึธืฉืืึนืช. ืืจืืข ืฉืขืืจืืื ืืืืขื ืืืฉืื ืืืชืจ, ืืื ื ืฉืืืช ืืืืืืืืช ืืืืกืืืง.
ืืื ืฉืื ืืืื ืืืืืืจ ืืช ืืืชืจืื ืืช ืฉื ืืืกืืืง. ื-Postgres, ืืขืช ืฉืืืืช ืืงืฉื, ืืชื ืฆืจืื ืืืืืช ืขื ืฉืืื ืชืขืื ืืืืฉืจ ืืช ืื ืืจืฉืืืืช. ื ืืชื ืืฉืืื 10 ืจืฉืืืืช ืืืืกืืืง ืืืืชืืื ืืขืืื ืืื, ืืืื ืืืืืช ืืคืืืืจ ืืจืฉืืืืช ืขื ืคื ื ืื ื-Shards. ืืืืื, ืืืชืื ืฉืืืง ืื-Shard ืื Replica ืื ืืจืื ืืช ืื ืชืื ืื ืืื, ืืื ืืื ืืืื ืืืื ืืงืจืื ืืืื.
ืฉืืืืช ืืื ืืืจืฆืื
ืืฉื ื 2 ืืจืืื ืืฉืืืื ืขื Elastic:
- ืืจื ืืงืื ืืงืืจื ืืจื TCP. ืืืจืืืืจ ืืืงืืื ืืืื ืืืืืข ืืืืจืื: ืืื ืืืจ ืื ื ืชืื, ืืฉ ืื ืชืืืืจ ืืืื ืื ื ืื. ืืื, ืื ื ืืืขื ืืื ืืฉืชืืฉืื ืื ืืื ืกืื ืื ืืืฉ ืืืชื ืืืืืืื.
- ืืจื ืืืฉืง HTTP ืฉืืืื ืืืฉืชืืฉ ืื ืืืงืฉืืช JSON ืืื ืืชืืืืจ ืฉื Lucene. ืืืืจืื ืืื ืื ืืข ืืงืกื ืฉืืฉืชืืฉ ืืืืกืืืง. ืืืจืกื ืื, ืื ื ืืงืืืื ืืช ืืืืืืช ืืืฆืข ืืฆืืื ืืจื ืืงืฉืืช JSON ืืจื HTTP. ืื ืืืคืฉืจืืช ืื ืื ื ืื ืกืื ืืืฉืชืืฉ.
ืืืืืช ืืืืฉืง HTTP, ืื ื ืืืืืื ืืืฉืชืืฉ ืืกืคืจืืืช ืืืกืคืงืืช ืืืฉืื ืืกืื ืืจืื ื ืฉื ืืงืื ื-HTTP. ืื ืื ื ืืืืืื ืื ืฆื ืืช Batch ืืืช ื-API ืืืกืื ืืจืื ื, ืื ืฉืืืื ืืืืฆืืขืื ืืืืืื, ืฉืขืืจื ืืืื ืืืื ืืงืืืื ืืืืื (ืขืื ืขื ืื ืืืืฉื)
ืืื ืืกืคืจืื ืืืฉืืืื:
- ืฉืืืจืช ืืฉืชืืฉื ืืืืื ืื ืฉื Postgres ื-20 ืฉืจืฉืืจืื ืืื ืงืืืืฅ: 460713 ืจืฉืืืืช ื-42 ืฉื ืืืช
- ืืงืื ืืืกืื + ืชืืืืชื ืขืืืจ 10 ืฉืจืฉืืจืื + ืืฆืืื ืขืืืจ 1000 ืืืื ืืื: 596749 ืจืฉืืืืช ืชืื 11 ืฉื ืืืช
- ืืงืื ืืืกืื + ืชืืืืชื ืขืืืจ 10 ืืืืื + ืืฆืืื ืขืืืจ 1000 ืืืื ืืื: 23801684 ืขืจืืื ืชืื 4 ืืงืืช
ืืขืช ืืชืื ื ืื ืื ืืงืฉืืช HTTP ืฉืืื ื JSON ืืชืืจ Batch / ืื Batch ืืฉืืื ืืืชื ืืจื ืื ืืงืื HTTP, ืืื ืงืฉืจ ืืกืคืจืืื. ืืชื ืืืื ืื ืืืืืจ ืืฉืืื ืืงืฉืืช ืืืืคื ืกืื ืืจืื ื ืื ืืกืื ืืจืื ื.
ืืืื ืืืจืฆืืืช ืืกืืืืืช, ืื ืื ื ืขืืืื ืืฉืชืืฉืื ืืืงืื ืืชืืืืจื ืืจืฉืื, ืืื ืื ืจืง ืขื ืืื ืฉื ืืฉืื ืื ืืื. ืืืงืจื ืื, ืืงืื ืืืชืื ืืืฉืืช ืฉื ืื ื ืขื ืืกืืก Spring WebClient ืืฉืืฉ ืืขืืืื.
ืงืืืื ืืืื
ืืืช ืืฉื ื ืืชืงืืื ืืคืจืืืงื ืืืืฆืข ืืืื ืืืฉืชืืฉืื โ ืืื ืืืชื Highload, ืฉืื ืืฉืื ืื ืื ื ืขืืืืื ืขื ืขืฉืจืืช ืืืืืื ื ืืฉืชืืฉืื ืื ืืื ืืช.
ืืืจื ืืื ืืชืจืืฉืื ืฉืืื ืขืืืกืื ืืืืื ืืืืื, ืืื ืืืืฆืข ืืื ืืื ืืจืื ืืืจืช ืืืืจื. ืฉื ื ืฉืขืืจื, ืืืื ืืืืฆืข, ืืืจื ื 27 ืืืืืืช ืกืืืจื. ืื ืชืื ืื ืขืืืื ืืืฉื ืืืชืจ ืืืฆื ืฉืขื, ืื ืฉืืจื ืืื ื ืืืืช ืืืฉืชืืฉืื. ืืืฉืชืืฉืื ืงืืืื ืคืจืกืื ืขื ืืืฉืชืชืคืืช, ืื ืืชืืจืจ ืฉืฆืจืื ืืืืืฅ ืืช ืืชืืืื.
ืืชืืืืช 2019, ืืืืื ื ืฉืื ืื ื ืฆืจืืืื ืืช ElasticSearch. ืืืฉื ืฉื ื ืฉืืื ืืจืื ื ืืช ืขืืืื ืื ืชืื ืื ืฉืืชืงืืื ืืืืกืืืง ืืืช ืื ืคืงืชื ื-API ืฉื ืืืคืืืงืฆืื ืืืืชืจ ืืืืืืื. ืืชืืฆืื ืืื, ืืฉื ื ืืืื ืืืืื ืืงืืคืืื, ืขืืืื ื 15 ืื ืืกืืช ื-131 ืืงืืช.
ืืืืืื ืฉืืฉ ืื ื ืืจืื ืื ืฉืื ืฉืจืืฆืื ืืงื ืืช ืกืืืจื ืืืืฉืชืชืฃ ืืืืจืืช ืคืจืกืื ืืืืฆืขืื, ืืืืืจ ืืฆืขื ืืื ื. ืืขืช ืื ื ืฉืืืืื ืืืืข ืขืืื ื ืืืืกืืืง, ืื ืืขืชืื ืื ื ืืชืื ื ืื ืืืขืืืจ ืืืืข ืืจืืืื ืืืืืืฉืื ืืืืจืื ืื ื-Postgres ืืืืกืื ืงืืืข. ืืื ืื ืืกืชืื ืืช ืืื ืืืืกืื, ืฉืื ืื ืืฉ ืืืืืืช.
ืืกืงื ื/ืืกืงื ืืช
ืืจืืข ืืขืืจื ื ืืช ืื ืืฉืืจืืชืื ืฉืจืฆืื ื ืืืืกืืืง ืืขืฆืจื ื ืืช ืื ืืขืช ืขืชื. ืืขืช ืื ื ืืื ืื ืืื ืืงืก ื-Elastic ืขื ืืื ืืืืกืื ืืืชืืฉื ืืจืืฉื ื-Postgres, ืฉืืฉืชืื ืขื ืขืืืก ืืืฉืชืืฉ.
ืืขืชืื, ืื ื ืืชืื ื ืื ืืืขืืืจ ืฉืืจืืชืื ืื ื ืืื ืฉืืงืฉืช ืื ืชืื ืื ืืืคืืช ืืืืื ืช ืืื ืืืืคืฉืช ืืกืคืจ ืืืชื ืืืืื ืฉื ืขืืืืืช. ืื ืืืจ ืื ืืฉืืื ืขืืืจ Postgres.
ืื ืื ืื ื ืฆืจืืืื ืืืคืืฉ ืืืงืกื ืืื ืืคืื ืงืฆืืื ืืืืช ืื ืื ืืฉ ืื ื ืืจืื ืงืจืืืจืืื ื ืืืคืืฉ ืฉืื ืื, ืื ืื ืื ื ืืืจ ืืืืขืื ืฉืฆืจืื ืืชืจืื ืืช ืื ื- Elastic.
โโโ
ืชืืื ืฉืงืจืืช. ืื ืืืืจื ืฉืื ืืฉืชืืฉืช ืื ื- ElasticSearch ืืืฉ ืื ืืงืจื ืืืฉืื ืืฉืื, ืกืคืจ ืื ื. ืืืื ืืขื ืืื ืืืขืช ืื ืฉืืืื ืฉื ืืืจืื ๐
ืืงืืจ: www.habr.com