БСсплатная ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΡ

ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈΠ»ΠΈ Ρ†Π΅Π»ΡŒ. ΠžΡ‚Π²Π΅Ρ‡Ρƒ с практичСским ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом β€” бСсплатно, Π±Π΅Π· ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π².

Или Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ врСмя Π² Calendly

Π—Π°Ρ‡Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ CouchDB для ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ

Apache CouchDB β€” Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎ-ориСнтированная Π‘Π£Π‘Π” с HTTP API, встроСнной Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈ модСлью eventual consistency. Π•Ρ‘ часто Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½Ρ‹ offline-first ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ (PouchDB Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈΠ»ΠΈ Π½Π° мобильном), multi-master рСпликация ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅Π³ΠΈΠΎΠ½Π°ΠΌΠΈ ΠΈΠ»ΠΈ простой ops-ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ Π±Π΅Π· тяТёлого DBA.

ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ ΠΈΠ· PostgreSQL, MySQL, MongoDB ΠΈΠ»ΠΈ legacy Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π² CouchDB β€” Π½Π΅ «экспорт CSV ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Β». ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (_id, _rev, отсутствиС JOIN, ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊ first-class), Π² индСксах (Mango, map/reduce views) ΠΈ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈ ΠΏΠΈΡˆΠ΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹. План ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ простой ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ поэтапном ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ риски ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅

ΠŸΠ΅Ρ€Π΅Π΄ стартом зафиксируйтС, с Ρ‡Π΅ΠΌ ΡΡ‚ΠΎΠ»ΠΊΠ½Ρ‘Ρ‚Π΅ΡΡŒ:

  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ сСрвиса β€” big-bang cutover рискован; ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ dual-write ΠΈΠ»ΠΈ read-from-new с fallback.
  • Π¦Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ β€” рСляционныС FK ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Π½ΡƒΠΆΠ½ΠΎ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… ΠΈΠ»ΠΈ eventual links.
  • Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ β€” Π΄Π°Ρ‚Ρ‹, decimal, Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ поля, null vs отсутствиС ΠΊΠ»ΡŽΡ‡Π°; JSON-сСриализация Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π½Π° ETL ΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
  • Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ β€” Π°Π²Ρ‚ΠΎΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ SQL Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠ°ΠΊ _id; Π½ΡƒΠΆΠ½Π° стратСгия UUID, составных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈΠ»ΠΈ prefix+legacy id.
  • ΠžΠ±ΡŠΡ‘ΠΌ ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ β€” bulk API CouchDB ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ batch Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²; Π±Π΅Π· throttle ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ disk I/O ΠΈ compaction.

ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ сторону: CouchDB Ρ…Ρ€Π°Π½ΠΈΡ‚ append-only B-tree, пСриодичСски Π½ΡƒΠΆΠ½Π° compaction; ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ lag Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ _users/_replicator ΠΏΡ€ΠΈ multi-site.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

НС ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ схСму SQL ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹:

  • Embed β€” связанныС сущности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всСгда Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ вмСстС (адрСс Π² Π·Π°ΠΊΠ°Π·Π΅), Π² ΠΎΠ΄Π½ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅.
  • Reference by id β€” ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ со ссылкой orderId Π² line-item; ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π΄Π²Π° GET ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Mango $in.
  • Denormalized views β€” Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ для быстрых списков Π±Π΅Π· join Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠΈ.
  • Type discriminator β€” ΠΏΠΎΠ»Π΅ type: "customer" | "invoice" Π² ΠΎΠ΄Π½ΠΎΠΉ Π±Π°Π·Π΅ ΠΈΠ»ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ database per aggregate.

Π‘ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Mango-индСксы ΠΈ views Π΄ΠΎ массовой Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ: индСкс Π½Π° поля Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ списков (status, createdAt, tenantId). ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ Π±Π΅Π· индСксов ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ full scan ΠΈ timeout Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΆΠ΅ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½-Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ΅.

ΠŸΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ процСсс ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ downtime

Π€Π°Π·Π° 0: инвСнтаризация ΠΈ pilot

Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ статистику ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ: ΠΎΠ±ΡŠΡ‘ΠΌ, частота ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ запросы. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π΅ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ для pilot β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, справочник ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ETL-скрипт (Python с requests/couchdb library, Node nano, ΠΈΠ»ΠΈ Logstash) с Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠ΅ΠΉ: число записСй, checksum ΠΏΠΎΠ»Π΅ΠΉ, sample diff.

Π€Π°Π·Π° 1: historical load

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ историчСскиС Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ CouchDB Ρ‡Π΅Ρ€Π΅Π· _bulk_docs Π±Π°Ρ‚Ρ‡Π°ΠΌΠΈ ΠΏΠΎ 500–2000 Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². БохраняйтС mapping old_id β†’ couch _id Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΠ»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ трассировки. ЗапускайтС Π² off-peak; слСдитС Π·Π° disk ΠΈ compaction.

Π€Π°Π·Π° 2: incremental sync

Пока historical ΠΈΠ΄Ρ‘Ρ‚, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ CDC ΠΈΠ· источника (Debezium, logical replication, oplog tail для Mongo) ΠΈΠ»ΠΈ пСриодичСский delta ΠΏΠΎ updated_at. ΠŸΠΈΡˆΠΈΡ‚Π΅ измСнСния Π² CouchDB с Ρ‚Π΅ΠΌ ΠΆΠ΅ mapping id. Lag ΠΌΠ΅ΠΆΠ΄Ρƒ source ΠΈ CouchDB Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ ΠΈ ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚ΡŒΡΡ ΠΊ Π½ΡƒΠ»ΡŽ ΠΏΠ΅Ρ€Π΅Π΄ cutover.

Π€Π°Π·Π° 3: dual-write ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ чтСния

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡˆΠ΅Ρ‚ Π² ΡΡ‚Π°Ρ€ΡƒΡŽ ΠΈ Π½ΠΎΠ²ΡƒΡŽ систСму (ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· sync service). Π‘Π½Π°Ρ‡Π°Π»Π° Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΈΠ· CouchDB для Π½Π΅ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… экранов с shadow compare Π»ΠΎΠ³Π°ΠΌΠΈ. ΠŸΡ€ΠΈ расхоТдСнии β€” Π°Π»Π΅Ρ€Ρ‚, Π½Π΅ silent fix. Когда расхоТдСния Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… SLA β€” ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ primary read Π½Π° CouchDB.

Π€Π°Π·Π° 4: ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ legacy

ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ dual-write, Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΡΡ‚Π°Ρ€ΡƒΡŽ Π‘Π”, ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ read-only доступ Π½Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ rollback (7–30 Π΄Π½Π΅ΠΉ). Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ runbook ΠΎΡ‚ΠΊΠ°Ρ‚Π°: DNS/feature flag ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° SQL, Ссли compaction ΠΈΠ»ΠΈ рСпликация Π΄Π°Π»ΠΈ сбой.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° качСства

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€:

  • couchdb-dump / couchapp β€” backup ΠΈ восстановлСниС для staging.
  • Custom ETL + idempotency β€” ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³ΠΎΠ½ Π½Π΅ создаёт Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ (_id Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½).
  • Reconciliation job β€” nightly сравнСниС count ΠΈ hash sample ΠΌΠ΅ΠΆΠ΄Ρƒ source ΠΈ CouchDB.
  • Load test β€” k6 ΠΈΠ»ΠΈ vegeta Π½Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ Mango-запросы послС ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ.

ПослС cutover настройтС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΠ·Π΅Π» ΠΈΠ»ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ DC β€” CouchDB сильна ΠΈΠΌΠ΅Π½Π½ΠΎ Π² geo-replication Π±Π΅Π· custom glue code.

Когда CouchDB β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€, Π° ΠΊΠΎΠ³Π΄Π° Π½Π΅Ρ‚

CouchDB Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для offline sync, content с Ρ€Π΅Π΄ΠΊΠΈΠΌΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌΠΈ, edge-кэшСй ΠΈ систСм с HTTP-native интСграциями. Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ аналитичСскиС ΠΎΡ‚Ρ‡Ρ‘Ρ‚Ρ‹, ТёсткиС ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ мноТСством сущностСй ΠΈ heavy aggregation часто ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² SQL ΠΈΠ»ΠΈ data warehouse с ETL ΠΈΠ· CouchDB.

Π“ΠΈΠ±Ρ€ΠΈΠ΄ β€” Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ стратСгия: operational Π΄Π°Π½Π½Ρ‹Π΅ Π² CouchDB, финансовый ledger Π² PostgreSQL, sync Ρ‡Π΅Ρ€Π΅Π· event bus.

Если Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡŽ ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ модСль Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΎΠ±ΡŠΡ‘ΠΌ Ρ€Π°Π±ΠΎΡ‚ ΠΈ риски простоя β€” Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ваш кСйс Π½Π° ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΠΈ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ сопровоТдСнии CouchDB: услуги ΠΏΠΎ CouchDB.

Когда CouchDB Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ умСстСн

CouchDB силён Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π½ΡƒΠΆΠ½Π° ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ°ΡΡ‚Π΅Ρ€-рСпликация, ΠΎΡ„Π»Π°ΠΉΠ½-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΈ HTTP-native API. Если ваш кСйс β€” классичСский OLTP с Тёсткими JOIN ΠΈ транзакциями Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†, сравнивайтС чСстно с PostgreSQL: Β«ΠΌΠΎΠ΄Π½ΠΎΒ» Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚ Β«ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚Β».

Для mobile/web sync часто Π±Π΅Ρ€ΡƒΡ‚ PouchDB Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΈ CouchDB Π½Π° сСрвСрС. Π—Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΠΉΡ‚Π΅ модСль ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ. Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ Ρ‡Π΅Ρ€Π΅Π· Mango ΠΈΠ»ΠΈ view β€” ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΠ½Π°Ρ‡Π΅ sync Π±ΡƒΠ΄Π΅Ρ‚ быстрым, Π° запросы β€” Π½Π΅Ρ‚.

  • РСпликация filtered/selector β€” Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ лишниС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π° устройство
  • ΠšΠΎΠΌΠΏΠ°ΠΊΡ†ΠΈΡ ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Ρ€Π΅Π²ΠΈΠ·ΠΈΠΉ β€” ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ роста диска
  • ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ conflict rate

ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ Π±Π΅Π· простоя

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ: dual-write ΠΈΠ»ΠΈ CDC ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π‘Π”, backfill, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ чтСния. Π”Π΅Π»Π°ΠΉΡ‚Π΅ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΏΠΎ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ id. НС Π½Π°Ρ‡ΠΈΠ½Π°ΠΉΡ‚Π΅ с Β«Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ всё Π² JSON ΠΈ Π½Π°Π΄Π΅ΡΡ‚ΡŒΡΡΒ» Π½Π° ΠΏΡ€ΠΎΠ΄Π΅ с ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² β€” сначала ΠΏΠΈΠ»ΠΎΡ‚ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ bounded context.

Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° Π±Π΅ΡΠΏΠ»Π°Ρ‚Π½ΡƒΡŽ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΡŽ.