PostgreSQL ΠΈ поставки Π·Π° конзистСнтност Π½Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ спСцифични Π·Π° ΠΊΠΎΠ½Π΅ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π°

ΠŸΡ€Π΅Π²ΠΎΠ΄ΠΎΡ‚ Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½ΠΎ Π·Π° студСнтитС Π½Π° курсот "Π‘Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ". Π”Π°Π»ΠΈ стС заинтСрСсирани Π΄Π° сС Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚Π΅ Π²ΠΎ ΠΎΠ²Π°Π° насока? Π’Π΅ ΠΏΠΎΠΊΠ°Π½ΡƒΠ²Π°ΠΌΠ΅ Π΄Π° ΠžΡ‚Π²ΠΎΡ€Π΅Π½ Π΄Π΅Π½, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ Π΄Π΅Ρ‚Π°Π»Π½ΠΎ Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, карактСристикитС Π½Π° онлајн Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΡ‚, ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΈΡ‚Π΅ ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° ΠΊΠ°Ρ€ΠΈΠ΅Ρ€Π° ΡˆΡ‚ΠΎ Π³ΠΈ Ρ‡Π΅ΠΊΠ°Π°Ρ‚ Π΄ΠΈΠΏΠ»ΠΎΠΌΠΈΡ€Π°Π½ΠΈΡ‚Π΅ студСнти ΠΏΠΎ ΠΎΠ±ΡƒΠΊΠ°Ρ‚Π°.

PostgreSQL ΠΈ поставки Π·Π° конзистСнтност Π½Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ спСцифични Π·Π° ΠΊΠΎΠ½Π΅ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π°

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, создавамС систСм ΠΊΠ°Π΄Π΅ Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ‚Π΅ дискови остануваат синхрони, Π½ΠΎ ΠΌΡ€Π΅ΠΆΠ½ΠΈΡ‚Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ сС стандардно асинхрони. ОсвСн, сС Ρ€Π°Π·Π±ΠΈΡ€Π°, Π°ΠΊΠΎ Π½Π΅ ΠΎΠ΄Π»ΡƒΡ‡ΠΈΠΌΠ΅ Π΄Π° Π³ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ ΠΎΠ²ΠΈΠ΅ обврски синхрони, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°Π½ΠΎ ΠΏΠΎΠ³ΠΎΡ€Π΅.

Ако стС Π³ΠΎ слСдСлС Ρ€Π°Π·Π²ΠΎΡ˜ΠΎΡ‚ ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π° Π³ΡƒΠ²Π΅Ρ€Π½Π΅Ρ€, ΠΌΠΎΠΆΠ΅Π±ΠΈ стС Π·Π°Π±Π΅Π»Π΅ΠΆΠ°Π»Π΅ Π½Π΅ΠΊΠΎΠΈ нСодамнСшни ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ (1, 2), ΡˆΡ‚ΠΎ ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π½Π° корисницитС Π½Π° Π“ΡƒΠ²Π΅Ρ€Π½Π΅Ρ€ Π΄Π° Π³ΠΈ тСстираат ΠΎΠ²ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΈ Π΄Π° ја слСдат Π½ΠΈΠ²Π½Π°Ρ‚Π° конзистСнтност.

Π£ΡˆΡ‚Π΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π·Π±ΠΎΡ€ΠΎΠ²ΠΈ...

ΠŸΡ€Π΅Π΄ само Π΅Π΄Π½Π° Π½Π΅Π΄Π΅Π»Π°, Π±ΠΈ Π²ΠΈ ΠΊΠ°ΠΆΠ°Π» Π΄Π΅ΠΊΠ° Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΠΊΡƒ Ρ„ΠΈΠ½ΠΎ Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈ PostgreSQL. Вогаш ΠšΡƒΡ€Ρ‚, Ρ‡Π»Π΅Π½ Π½Π° Ρ‚ΠΈΠΌΠΎΡ‚ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Compose, ΠΈΠ½ΡΠΈΡΡ‚ΠΈΡ€Π°ΡˆΠ΅ Π½Π° Ρ‚ΠΎΠ° Π΄Π΅ΠΊΠ° постои Ρ‚Π°ΠΊΠ²Π° моТност. Вој Π³ΠΈ смири ΠΌΠΎΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ²ΠΎΡ€ΠΈ ΠΈ најдС Π²ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° PostgreSQL слСдното:

PostgreSQL ΠΈ поставки Π·Π° конзистСнтност Π½Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ спСцифични Π·Π° ΠΊΠΎΠ½Π΅ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π°

Оваа поставка ΠΌΠΎΠΆΠ΅ Π΄Π° сС смСни Π²ΠΎ сСкоС Π²Ρ€Π΅ΠΌΠ΅. ΠžΠ΄Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π·Π° која Π±ΠΈΠ»ΠΎ Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π° сС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡƒΠ²Π° со поставката Π²Π°ΠΆΠ΅Ρ‡ΠΊΠ° Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΡ‚ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅. Π—Π°Ρ‚ΠΎΠ°, ΠΌΠΎΠΆΠ½ΠΎ Π΅ ΠΈ корисно Π·Π° Π½Π΅ΠΊΠΎΠΈ трансакции Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚ синхроно, Π° Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ асинхроно. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° сС присили Π΅Π΄Π΅Π½ multistatement Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° ΠΏΡ€Π°Π²Π΅ΡšΠ΅ ΠΎΠ±Π²Ρ€Π·ΡƒΠ²Π° асинхроно ΠΊΠΎΠ³Π° стандардната врСдност Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ Π΅ спротивна, сС поставува SET LOCAL synchronous_commit TO OFF Π²ΠΎ Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°.

Π‘ΠΎ ΠΎΠ²Π°Π° ΠΌΠ°Π»Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° конфигурациската Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, Π½Π° корисницитС ΠΈΠΌ Π΄Π°Π΄ΠΎΠ²ΠΌΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π²Ρ€Π· Π½ΠΈΠ²Π½Π°Ρ‚Π° конзистСнтност ΠΈ пСрформанси.

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€