ΠΡΠ΅Π²ΠΎΠ΄ΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½ΠΎ Π·Π° ΡΡΡΠ΄Π΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΊΡΡΡΠΎΡ
PostgreSQL ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ Π·Π° ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ Π½Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° ΠΊΠΎΠ½Π΅ΠΊΡΠΈΡΠ°ΡΠ°
ΠΠΎ Compose ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ ΡΠΎ ΠΌΠ½ΠΎΠ³Ρ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΡΡΠΎ Π½ΠΈ Π΄Π°Π²Π° ΠΌΠΎΠΆΠ½ΠΎΡΡ ΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΠΌΠ΅ ΡΠΎ Π½ΠΈΠ²Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠΈ. ΠΠ°ΠΊΠΎ ΡΡΠΎ ΡΡΠΈΠΌΠ΅ Π΄Π° Π³ΠΈ ΡΠ°ΠΊΠ°ΠΌΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π° Π½ΠΎΠ²ΠΈΡΠ΅ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΏΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ ΠΏΠΎΡΠ½ΡΠ²Π°ΠΌΠ΅ Π΄Π° ΡΠ°Π·ΠΌΠΈΡΠ»ΡΠ²Π°ΠΌΠ΅ ΠΊΠΎΠ»ΠΊΡ Π±ΠΈ Π±ΠΈΠ»ΠΎ ΡΠ±Π°Π²ΠΎ Π΄ΠΎΠΊΠΎΠ»ΠΊΡ ΡΠ»ΠΈΡΠ½ΠΈ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π±Π΅Π° ΠΏΡΠΈΡΡΡΠ½ΠΈ Π²ΠΎ ΠΏΠΎΠ·ΡΠ΅Π»ΠΈΡΠ΅ Π°Π»Π°ΡΠΊΠΈ ΡΠΎ ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅ Π΄ΠΎΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅. ΠΠ΄Π½Π° ΠΎΠ΄ Π½ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΎ ΡΠ°ΠΊΠ°Π² Π΄Π° ΡΠ° Π²ΠΈΠ΄Π°ΠΌ Π²ΠΎ PostgreSQL Π±Π΅ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°Π±ΠΈΠ»Π½Π° ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ Π½Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΏΠΎ Π²ΡΡΠΊΠ° Π½ΠΈΠ· ΡΠ΅Π»ΠΈΠΎΡ ΠΊΠ»Π°ΡΡΠ΅Ρ. Π ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΈΡΠΏΠΎΡΡΠ°Π²ΠΈ, Π½ΠΈΠ΅ Π²Π΅ΡΠ΅ Π³ΠΎ ΠΈΠΌΠ°ΠΌΠ΅, Π° Π΄Π΅Π½Π΅Ρ ΡΠ°ΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠ΅ ΡΠΎ Π²Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅.
ΠΠΎΡΡΠΎ ΠΌΠΈ ΡΡΠ΅Π±Π°?
ΠΠ°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ Π²Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°. ΠΠ΅ΠΌΠ΅ΡΠ΅, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° ΠΏΠ»Π°ΡΠ°ΡΠ΅ ΡΠΌΠ΅ΡΠΊΠΈ. ΠΠ΅ Π²ΠΈ ΡΡΠ΅Π±Π° XNUMX% ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ Π½ΠΈΠ· ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ, ΡΠ°ΠΊΠ° ΡΡΠΎ ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈ ΠΎΠ±Π²ΡΠ·ΡΠ²Π°ΡΠ° ΡΠ°ΠΊΠ° ΡΡΠΎ Π²Π°ΡΠ°ΡΠ° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ΠΊΠ° Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π°Ρ ΡΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ. ΠΠ΅ΡΡΡΠΎΠ°, Π°ΠΊΠΎ Π²Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π΅ Π±ΡΠ·ΠΎΡΠ°ΡΡΠ΅ΡΠΊΠ° ΡΠΎΡΠΈΡΠ°Π»Π½Π° ΠΌΡΠ΅ΠΆΠ°, ΡΠΎΠ³Π°Ρ Π²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ ΡΠ΅ ΠΏΡΠ΅ΡΠΏΠΎΡΠΈΡΠ°ΡΠ΅ Π±ΡΠ· ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ Π½Π°Π΄ XNUMX% ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ. ΠΠ° Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈ ΠΎΠ±Π²ΡΠ·Π½ΠΈΡΠΈ Π²ΠΎ Π²Π°ΡΠΈΠΎΡ ΠΊΠ»Π°ΡΡΠ΅Ρ.
ΠΠ°ΠΏΠΎΠ·Π½Π°ΡΡΠ΅ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡ
ΠΠΎΡΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΈ ΠΏΠΎΠΌΠ΅ΡΡ ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅. PostgreSQL ΡΠ΅ ΠΎΠ΄Π΄Π°Π»Π΅ΡΡΠ²Π° ΠΎΠ΄ ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠ° Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΡΠΎΠ³Π°Ρ Π΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π»ΠΈΠ²Π° ΠΈ Π±Π΅Π· Π½Π΅ΠΎΡΠ΅ΠΊΡΠ²Π°Π½ΠΈ ΠΈΠ·Π½Π΅Π½Π°Π΄ΡΠ²Π°ΡΠ°. Π‘Π΅Π³Π° Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΈΡΠ΅.
Tradeoff 1: Performance
ΠΠΊΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ PostgreSQL Π½Π΅ Π±Π°ΡΠ° ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΎ. ΠΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ Π΄ΠΎ Π»ΠΈΠ΄Π΅ΡΠΎΡ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ, Π° Π°ΠΆΡΡΠΈΡΠ°ΡΠ°ΡΠ° ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΈΡΠΏΡΠ°ΡΠ΅Π½ΠΈ Π΄ΠΎ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΌΠΈΠ»ΠΈΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΠΏΠΎΠ΄ΠΎΡΠ½Π°. ΠΠΎΠ³Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ PostgreSQL Π±Π°ΡΠ° ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ, ΡΠΎΡ ΠΌΠΎΡΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΎ. ΠΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ ΡΠ΅ Π±ΠΈΠ΄Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ Π΄ΠΎ Π²ΠΎΠ΄Π°ΡΠΎΡ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ, ΠΊΠΎΡ ΡΠ΅ ΠΈΡΠΏΡΠ°ΡΠΈ Π°ΠΆΡΡΠΈΡΠ°ΡΠ΅ Π΄ΠΎ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ ΠΈ ΡΠ΅ ΡΠ΅ΠΊΠ° ΠΏΠΎΡΠ²ΡΠ΄Π° Π΄Π΅ΠΊΠ° ΡΠ΅ΠΊΠΎΡ Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΡΠ΅Π΄ Π΄Π° ΠΈΡΠΏΡΠ°ΡΠΈ ΠΏΠΎΡΠ²ΡΠ΄Π° Π΄ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΡ ΡΡΠΎ Π³ΠΎ ΠΈΠ½ΠΈΡΠΈΡΠ°Π» ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ Π΄Π΅ΠΊΠ° Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΡΠ°ΠΊΡΠΈΡΠ½Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΏΠΎΠΌΠ΅ΡΡ ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏΠΈ Π΅ Π²ΠΎ ΡΠΎΠ° ΡΡΠΎ Π·Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π΄Π²Π° ΠΌΡΠ΅ΠΆΠ½ΠΈ ΡΠΊΠΎΠΊΠΎΠ²ΠΈ, Π΄ΠΎΠ΄Π΅ΠΊΠ° Π·Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΡΠ΅ΡΠΈΡΠΈ.
ΠΠ°ΠΌΠ΅Π½Π° 2: ΠΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΎΡ Π²ΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° Π½Π΅ΡΡΠΏΠ΅Ρ Π½Π° Π»ΠΈΠ΄Π΅ΡΠΎΡ Π²ΠΎ ΠΎΠ²ΠΈΠ΅ Π΄Π²Π° ΠΏΡΠΈΡΡΠ°ΠΏΠ° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ Π±ΠΈΠ΄Π΅ ΡΠ°Π·Π»ΠΈΡΠ΅Π½. ΠΠΊΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠ΅ ΠΈΠ·Π²Π΅Π΄ΡΠ²Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΎ, ΡΠΎΠ³Π°Ρ Π°ΠΊΠΎ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΠΈ ΡΠ°ΠΊΠ²Π° Π³ΡΠ΅ΡΠΊΠ°, Π½Π΅ΠΌΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ ΠΈΠ·Π²ΡΡΠ΅Π½ΠΈ ΡΠΈΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΎΠ΄ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅. ΠΠΎΠ»ΠΊΡ ΡΠ΅ ΡΠ΅ ΠΈΠ·Π³ΡΠ±ΠΈ? ΠΠ°Π²ΠΈΡΠΈ ΠΎΠ΄ ΡΠ°ΠΌΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΈ Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΎΡΡΠ° Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°. Π‘ΠΎΡΡΠ°Π²Π΅ΡΠ΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΡΠ΅ ΡΠΏΡΠ΅ΡΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ° Π΄Π° ΡΡΠ°Π½Π΅ Π»ΠΈΠ΄Π΅Ρ Π°ΠΊΠΎ ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π°ΡΠ° Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π²ΠΎ Π½Π΅Π° Π΅ Π·Π° 1 MB ΠΏΠΎΠΌΠ°Π»Π° ΠΎΡΠΊΠΎΠ»ΠΊΡ Π²ΠΎ Π»ΠΈΠ΄Π΅ΡΠΎΡ, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ, Π΄ΠΎ 1 MB Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΡΠ°Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ±Π°Ρ ΠΏΡΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ°.
ΠΠ²Π° Π½Π΅ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° Π²ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠΎΡ ΡΠ΅ΠΆΠΈΠΌ. ΠΠΊΠΎ Π»ΠΈΠ΄Π΅ΡΠΎΡ Π½Π΅ ΡΡΠΏΠ΅Π΅, ΡΠΈΡΠ΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ ΡΠ΅ Π°ΠΆΡΡΠΈΡΠ°Π°Ρ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠ΅ΠΊΠΎΠ΅ ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ΄Π΅Π½ΠΎ Π½Π° Π»ΠΈΠ΄Π΅ΡΠΎΡ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΠΎΡΠ²ΡΠ΄Π΅Π½ΠΎ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅. ΠΠ²Π° Π΅ ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ.
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΎΡΠΎ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ ΠΈΠΌΠ° ΡΠΌΠΈΡΠ»Π° Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° Π½Π°ΠΏΠ»Π°ΡΠ° ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠ° ΠΈΠΌΠ° ΡΠ°ΡΠ½Π° ΠΏΡΠ΅Π΄Π½ΠΎΡΡ Π²ΠΎ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΎΡ ΠΏΠΎΠΌΠ΅ΡΡ ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠ° ΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅. ΠΠ°ΡΠ²Π°ΠΆΠ½ΠΎ Π·Π° Π²Π°ΠΊΠ²Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΡΠ΅ Π²Π°Π»ΠΈΠ΄Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. Π‘Π΅Π³Π° ΡΠ°Π·ΠΌΠΈΡΠ»Π΅ΡΠ΅ Π·Π° ΡΠΎΡΠΈΡΠ°Π»Π½Π° ΠΌΡΠ΅ΠΆΠ° Π²ΠΎ ΠΊΠΎΡΠ° Π³Π»Π°Π²Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π΅ Π΄Π° Π³ΠΎ Π·Π°Π΄ΡΠΆΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΡΠΎ ΡΠΎΠ° ΡΡΠΎ ΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅ Π½Π° Π±Π°ΡΠ°ΡΠ°ΡΠ° ΡΡΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ±ΡΠ·ΠΎ. ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΈΠ·Π²Π΅Π΄Π±Π°ΡΠ° ΡΠΎ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΌΡΠ΅ΠΆΠ½ΠΈ ΡΠΊΠΎΠΊΠΎΠ²ΠΈ ΠΈ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΡΠ΅ΠΊΠ°ΡΠ΅ Π·Π° ΠΎΠ±Π²ΡΡΠΊΠΈ. Π‘Π΅ΠΏΠ°ΠΊ, ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΎΡ ΠΏΠΎΠΌΠ΅ΡΡ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ ΠΈ ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠ° Π½Π΅ Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΠΎΡ Π·Π° ΠΊΠΎΡ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ°Π·ΠΌΠΈΡΠ»ΠΈΡΠ΅.
Π Π°Π·ΠΌΠ΅Π½Π° 3: ΠΠ΅ΡΡΠ΅ΡΠΈ
ΠΠ½ΠΎΠ³Ρ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π° Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π½Π΅ΡΡΠΏΠ΅Ρ . Π Π°Π·ΠΌΠΈΡΠ»Π΅ΡΠ΅ Π·Π° ΡΠΈΡΡΠ°ΡΠΈΡΠ° ΠΊΠΎΠ³Π° Π΅Π΄Π½Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ Π½Π΅ ΡΡΠΏΠ΅Π²Π°Π°Ρ. ΠΠΎΠ³Π° Π·Π°Π»ΠΎΠΆΠ±ΠΈΡΠ΅ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π°Π°Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΎ, Π»ΠΈΠ΄Π΅ΡΠΎΡ ΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈ Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ Π΄Π° ΠΏΡΠΈΡΠ°ΡΠ° ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π° Π·Π°ΠΏΠΈΡΠΈ, Π±Π΅Π· Π΄Π° ΡΠ΅ΠΊΠ° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ ΡΡΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠ²Π°Π°Ρ. ΠΠΎΠ³Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ ΡΠ΅ Π²ΡΠ°ΡΠ°Π°Ρ Π²ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ, ΡΠΈΠ΅ ΡΠ΅ ΡΡΠΈΠ³Π½ΡΠ²Π°Π°Ρ ΡΠΎ Π»ΠΈΠ΄Π΅ΡΠΎΡ. Π‘ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°, Π°ΠΊΠΎ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ Π½Π΅ ΡΠ΅Π°Π³ΠΈΡΠ°Π°Ρ, ΡΠΎΠ³Π°Ρ Π»ΠΈΠ΄Π΅ΡΠΎΡ Π½Π΅ΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΠΈΠ·Π±ΠΎΡ ΠΈ ΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈ Π΄Π° ΡΠ΅ΠΊΠ° Π·Π° ΠΏΠΎΡΠ²ΡΠ΄Π° Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ° Π½Π΅ ΡΠ΅ Π²ΡΠ°ΡΠΈ Π²ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠΈΡΠ°ΡΠΈ ΠΈ ΠΈΠ·Π²ΡΡΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ.
ΠΠ΄Π½Π° Π²ΡΡΠΊΠ° ΠΏΠΎ ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ°?
Π‘Π΅ΠΊΠΎΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΈΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π° ΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΡΠΈΠΏ Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠ° Π½Π° ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ ΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ. ΠΡΠ²Π΅Π½, ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π°ΠΊΠΎ Π½Π΅ Π΅ Π½Π°ΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° ΠΏΠ»Π°ΡΠ°ΡΠ΅ ΡΠΌΠ΅ΡΠΊΠΈ, Π·Π° ΠΊΠΎΡΠ° Π·Π°ΠΌΠΈΡΠ»ΡΠ²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° Π΅ ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½Π°, ΠΈΠ»ΠΈ Π½Π°ΡΠ°ΡΠ° ΡΠ΅ΡΠΈΡΠΈ Π΅ΡΠ΅ΠΌΠ΅ΡΠ½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° ΡΠΎΡΠΈΡΠ°Π»Π½ΠΎ Π²ΠΌΡΠ΅ΠΆΡΠ²Π°ΡΠ΅. ΠΠΎ ΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΈ ΡΠ»ΡΡΠ°ΠΈ, ΡΠ΅ ΠΈΠΌΠ° ΠΌΠΎΠΌΠ΅Π½ΡΠΈ ΠΊΠΎΠ³Π° Π½Π΅ΠΊΠΎΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈ, Π° Π½Π΅ΠΊΠΎΠΈ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈ. ΠΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ ΡΠ°ΠΊΠ°ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΎΡ Π΄Π° ΡΠ΅ΠΊΠ° Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ ΠΏΠΎΡΠ°ΠΊΠ°ΡΠ° ΠΈΡΠΏΡΠ°ΡΠ΅Π½Π° Π΄ΠΎ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΎΡ, Π½ΠΎ Π°ΠΊΠΎ ΠΏΠ»Π°ΡΠ°ΡΠ΅ΡΠΎ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈ Π²ΠΎ ΠΈΡΡΠ°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°, ΡΠΎΠ³Π°Ρ ΡΠ΅ ΠΌΠΎΡΠ° Π΄Π° ΠΏΠΎΡΠ΅ΠΊΠ°ΡΠ΅.
Π‘ΠΈΡΠ΅ ΠΎΠ²ΠΈΠ΅ ΠΎΠ΄Π»ΡΠΊΠΈ, ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π³ΠΈ Π΄ΠΎΠ½Π΅ΡΡΠ²Π° ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΎΡ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°. ΠΠΎΠ½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈ ΠΎΠ΄Π»ΡΠΊΠΈ Π·Π° ΡΠΎΠ° ΠΊΠΎΠ³Π° Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ΅ΠΊΠΎΡ ΠΏΡΠΈΡΡΠ°ΠΏ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Π³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅ΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠΎΡ ΠΎΠ΄ Π²Π°ΡΠΈΠΎΡ ΠΊΠ»Π°ΡΡΠ΅Ρ. ΠΠ°ΠΆΠ½ΠΎ Π΅ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΎΡ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΡΡΠ»Π° ΠΌΠ΅ΡΡ Π½ΠΈΠ² Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° SQL Π·Π° Π²ΡΡΠΊΠΈ ΠΈ Π·Π° ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΠΈ.
ΠΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π²ΠΎ ΠΏΡΠ°ΠΊΡΠ°
Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, PostgreSQL ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ. ΠΠ²Π° Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½ΠΎ ΠΎΠ΄ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ synchronous_commit
. Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ Π΅ Π²ΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΡΠ° on
, Π½ΠΎ ΠΈΠΌΠ° ΡΡΠΈ Π΄ΡΡΠ³ΠΈ ΠΎΠΏΡΠΈΠΈ: local
, remote_write
ΠΈΠ»ΠΈ off
.
ΠΡΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ Π½Π° off
ΡΠΈΡΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈ ΠΎΠ±Π²ΡΠ·ΡΠ²Π°ΡΠ° ΡΠ΅ ΡΡΠΎΠΏΠΈΡΠ°Π½ΠΈ, Π΄ΡΡΠΈ ΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π³ΠΎ ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠΎΡ ΡΠ΅ΠΆΠΈΠΌ Π·Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ, Π½ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ Π²ΠΎ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ ΡΠ΅ Π²ΡΡΠΈ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΎ. Remote_write
ΠΎΠ΄ΠΈ ΡΡΡΠ΅ ΠΏΠΎΠ΄Π°Π»Π΅ΠΊΡ: Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ°ΡΠ° Π²ΠΎ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ°Π²Π°Ρ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΎ, Π½ΠΎ ΡΠ΅ Π²ΡΠ°ΡΠ°Π°Ρ ΠΊΠΎΠ³Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠ° Π³ΠΎ ΠΏΡΠΈΡΠ°ΡΠΈΠ»Π° Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ, Π½ΠΎ Π½Π΅ ΡΠ° Π½Π°ΠΏΠΈΡΠ°Π»Π° Π½Π° Π΄ΠΈΡΠΊΠΎΡ.
Π‘ΠΎ ΠΎΠ³Π»Π΅Π΄ Π½Π° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ»ΠΈΠ²ΠΈΠΎΡ ΠΎΠΏΡΠ΅Π³ Π½Π° ΠΎΠΏΡΠΈΠΈ, ΠΈΠ·Π±ΠΈΡΠ°ΠΌΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ ΠΈ, ΠΈΠΌΠ°ΡΡΠΈ Π³ΠΎ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠΎΠ° on
β ΡΠΎΠ° ΡΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈ ΡΠ½ΠΈΠΌΠΊΠΈ, Π½ΠΈΠ΅ ΡΠ΅ ΠΈΠ·Π±Π΅ΡΠ΅ΠΌΠ΅ local
Π·Π° Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈ ΠΎΠ±Π²ΡΠ·ΡΠ²Π°ΡΠ° ΠΏΡΠ΅ΠΊΡ ΠΌΡΠ΅ΠΆΠ°ΡΠ°, Π΄ΠΎΠ΄Π΅ΠΊΠ° Π»ΠΎΠΊΠ°Π»Π½ΠΈΡΠ΅ ΠΎΠ±Π²ΡΠ·ΡΠ²Π°ΡΠ° ΠΎΡΡΠ°Π²Π°Π°Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈ.
Π‘Π΅Π³Π°, ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π° Π·Π° ΠΌΠΎΠΌΠ΅Π½Ρ, Π½ΠΎ Π·Π°ΠΌΠΈΡΠ»Π΅ΡΠ΅ Π΄Π΅ΠΊΠ° Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΠ²ΠΌΠ΅ synchronous_commit
Π² local
Π·Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ. Π‘Π΅ ΠΏΡΠ°ΡΡΠ²Π°Π²ΠΌΠ΅ Π΄Π°Π»ΠΈ Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠΌΠ΅Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ synchronous_commit
Π²ΠΎ Π»Π΅Ρ, ΠΈ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° Π΄Π΅ΠΊΠ° Π½Π΅ ΡΠ°ΠΌΠΎ ΡΡΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌΠ° Π΄ΡΡΠΈ Π΄Π²Π° Π½Π°ΡΠΈΠ½ΠΈ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°. ΠΡΠ²ΠΈΠΎΡ Π΅ Π΄Π° ΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΠ΅ΡΠΈΡΠ°ΡΠ° Π½Π° Π²Π°ΡΠ°ΡΠ° Π²ΡΡΠΊΠ° Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΠΎΠ² Π½Π°ΡΠΈΠ½:
SET SESSION synchronous_commit TO ON;
// Your writes go here
Π‘ΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ° Π²ΠΎ ΡΠ΅ΡΠΈΡΠ°ΡΠ° ΡΠ΅ Π³ΠΈ ΠΏΠΎΡΠ²ΡΠ΄Π°Ρ ΠΏΠΈΡΡΠ²Π°ΡΠ°ΡΠ° Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ ΠΏΡΠ΅Π΄ Π΄Π° ΡΠ΅ Π²ΡΠ°ΡΠ°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π΅Π½ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈΠΎΡ ΠΊΠ»ΠΈΠ΅Π½Ρ. ΠΡΠ²Π΅Π½, ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π°ΠΊΠΎ Π½Π΅ ΡΠ° ΡΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠ°ΡΠ° synchronous_commit
ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΡΠΏΡΡΡΠΈΡΠ΅ Π΄Π΅Π» SESSION
Π²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠ΅ Π±ΠΈΠ΄Π΅ Π²ΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ.
ΠΡΠΎΡΠΈΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΅ Π΄ΠΎΠ±Π°Ρ ΠΊΠΎΠ³Π° ΡΠ°ΠΌΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ΡΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ Π΄Π΅ΠΊΠ° Π΄ΠΎΠ±ΠΈΠ²Π°ΡΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° Π΅Π΄Π½Π° ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ°. ΠΠΎ ΠΌΠ½ΠΎΠ³Ρ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ NoSQL ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΎΡ Π½Π° ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΠΈ Π½Π΅ ΠΏΠΎΡΡΠΎΠΈ, Π½ΠΎ ΠΏΠΎΡΡΠΎΠΈ Π²ΠΎ PostgreSQL. ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π°ΡΠ΅ ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ° ΠΈ ΠΏΠΎΡΠΎΠ° ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ synchronous_commit
Π² on
ΠΏΡΠ΅Π΄ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ ΡΠΏΠΈΡΠΎΡ Π·Π° ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ°. COMMIT
ΡΠ΅ ΡΠ° ΠΈΠ·Π²ΡΡΠΈ ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ synchronous_commit
, ΡΡΠΎ Π±Π΅ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΎ Π²ΠΎ ΡΠΎΠ° Π²ΡΠ΅ΠΌΠ΅, ΠΈΠ°ΠΊΠΎ Π½Π°ΡΠ΄ΠΎΠ±ΡΠΎ Π΅ Π΄Π° ΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° ΠΎΠ΄Π½Π°ΠΏΡΠ΅Π΄ Π·Π° Π΄Π° Π±ΠΈΠ΄Π΅ΡΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ Π΄Π΅ΠΊΠ° Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ ΡΠ°Π·Π±ΠΈΡΠ°Π°Ρ Π΄Π΅ΠΊΠ° ΠΏΠΈΡΡΠ²Π°ΡΠ°ΡΠ° Π½Π΅ ΡΠ΅ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈ.
BEGIN;
SET LOCAL synchronous_commit TO ON;
// Your writes go here
COMMIT;
Π‘ΠΈΡΠ΅ ΠΎΠ±Π²ΡΠ·ΡΠ²Π°ΡΠ° Π½Π° ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΠΈ ΡΠ΅Π³Π° ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΏΠΎΡΠ²ΡΠ΄Π΅Π½ΠΈ ΠΊΠ°ΠΊΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ΅ ΠΏΡΠ΅Π΄ Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΄Π° Π²ΡΠ°ΡΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π΅Π½ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ Π½Π° ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈΠΎΡ ΠΊΠ»ΠΈΠ΅Π½Ρ.
ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ PostgreSQL
ΠΡΠ΅Π΄ ΠΎΠ²Π°, Π·Π°ΠΌΠΈΡΠ»ΠΈΠ²ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌ PostgreSQL ΡΠΎ synchronous_commit
, ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Π²ΠΎ local
. ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π° ΡΠ΅Π°Π»Π½ΠΎ Π½Π° ΡΡΡΠ°Π½Π°ΡΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ, ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π΄Π²Π΅ ΠΎΠΏΡΠΈΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ. Π£ΡΡΠ΅ Π΅Π΄Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ synchronous_standby_names
ΡΠ΅ ΡΠΈ Π΄ΠΎΡΠ΄Π΅ Π½Π° ΡΠ²ΠΎΠ΅ ΠΊΠΎΠ³Π° synchronous_commit
ΡΠ΅ Π±ΠΈΠ΄Π΅ Π²ΠΎ on
. Π’ΠΎΡ ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π° ΠΊΠΎΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π·Π° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈ ΠΎΠ±Π²ΡΡΠΊΠΈ, ΠΈ Π½ΠΈΠ΅ ΡΠ΅ Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ Π½Π° *
, ΡΡΠΎ ΡΠ΅ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° ΡΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ ΡΠΈΡΠ΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ. ΠΠ²ΠΈΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΎΠ±ΠΈΡΠ½ΠΎ ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π°Ρ Π²ΠΎ
synchronous_commit = local
synchronous_standby_names='*'
Π‘ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ synchronous_commit
Π²ΠΎ Π·Π½Π°ΡΠ΅ΡΠ΅ local
, ΡΠΎΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌ ΠΊΠ°Π΄Π΅ Π»ΠΎΠΊΠ°Π»Π½ΠΈΡΠ΅ Π΄ΠΈΡΠΊΠΎΠ²ΠΈ ΠΎΡΡΠ°Π½ΡΠ²Π°Π°Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈ, Π½ΠΎ ΠΌΡΠ΅ΠΆΠ½ΠΈΡΠ΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈ. ΠΡΠ²Π΅Π½, ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π°ΠΊΠΎ Π½Π΅ ΠΎΠ΄Π»ΡΡΠΈΠΌΠ΅ Π΄Π° Π³ΠΈ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΠΎΠ²ΠΈΠ΅ ΠΎΠ±Π²ΡΡΠΊΠΈ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΠΏΡΠΈΠΊΠ°ΠΆΠ°Π½ΠΎ ΠΏΠΎΠ³ΠΎΡΠ΅.
ΠΠΊΠΎ ΡΡΠ΅ Π³ΠΎ ΡΠ»Π΅Π΄Π΅Π»Π΅ ΡΠ°Π·Π²ΠΎΡΠΎΡ
Π£ΡΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π·Π±ΠΎΡΠΎΠ²ΠΈ...
ΠΡΠ΅Π΄ ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° Π½Π΅Π΄Π΅Π»Π°, Π±ΠΈ Π²ΠΈ ΠΊΠ°ΠΆΠ°Π» Π΄Π΅ΠΊΠ° Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΠΊΡ ΡΠΈΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄ΠΈ PostgreSQL. Π’ΠΎΠ³Π°Ρ ΠΡΡΡ, ΡΠ»Π΅Π½ Π½Π° ΡΠΈΠΌΠΎΡ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Compose, ΠΈΠ½ΡΠΈΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠΎΠ° Π΄Π΅ΠΊΠ° ΠΏΠΎΡΡΠΎΠΈ ΡΠ°ΠΊΠ²Π° ΠΌΠΎΠΆΠ½ΠΎΡΡ. Π’ΠΎΡ Π³ΠΈ ΡΠΌΠΈΡΠΈ ΠΌΠΎΠΈΡΠ΅ ΠΏΡΠΈΠ³ΠΎΠ²ΠΎΡΠΈ ΠΈ Π½Π°ΡΠ΄Π΅ Π²ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° PostgreSQL
ΠΠ²Π°Π° ΠΏΠΎΡΡΠ°Π²ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΌΠ΅Π½ΠΈ Π²ΠΎ ΡΠ΅ΠΊΠΎΠ΅ Π²ΡΠ΅ΠΌΠ΅. ΠΠ΄Π½Π΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π·Π° ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ²Π° ΡΠΎ ΠΏΠΎΡΡΠ°Π²ΠΊΠ°ΡΠ° Π²Π°ΠΆΠ΅ΡΠΊΠ° Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΡ Π½Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅. ΠΠ°ΡΠΎΠ°, ΠΌΠΎΠΆΠ½ΠΎ Π΅ ΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΎ Π·Π° Π½Π΅ΠΊΠΎΠΈ ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΎ, Π° Π·Π° Π΄ΡΡΠ³ΠΈ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΎ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠΈΠ»ΠΈ Π΅Π΄Π΅Π½ multistatement
ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ° Π·Π° ΠΏΡΠ°Π²Π΅ΡΠ΅ ΠΎΠ±Π²ΡΠ·ΡΠ²Π° Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΎ ΠΊΠΎΠ³Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ Π΅ ΡΠΏΡΠΎΡΠΈΠ²Π½Π°, ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π° SET LOCAL synchronous_commit TO OFF
Π²ΠΎ ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ°.
Π‘ΠΎ ΠΎΠ²Π°Π° ΠΌΠ°Π»Π° ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΊΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅ ΠΈΠΌ Π΄Π°Π΄ΠΎΠ²ΠΌΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π²ΡΠ· Π½ΠΈΠ²Π½Π°ΡΠ° ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ ΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ.
ΠΠ·Π²ΠΎΡ: www.habr.com