ΠΠ°ΡΠ΅ΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ 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.
ΠΠ°ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΡ.




