PostgreSQL ΠΈ настройки согласованности записи для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ соСдинСния

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для студСнтов курса Β«Π‘Π°Π·Ρ‹ Π”Π°Π½Π½Ρ‹Ρ…Β». Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ? ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ вас Π½Π° Π”Π΅Π½ΡŒ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Π”Π²Π΅Ρ€Π΅ΠΉ, Π³Π΄Π΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассказываСм ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, особСнностях ΠΎΠ½Π»Π°ΠΉΠ½-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, компСтСнциях ΠΈ ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½Ρ‹Ρ… пСрспСктивах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΆΠ΄ΡƒΡ‚ выпускников послС обучСния.

PostgreSQL ΠΈ настройки согласованности записи для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ соСдинСния

PostgreSQL ΠΈ настройки согласованности записи для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ соСдинСния
Нам Π² Compose приходится ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠΌΠ΅Π½Π½ΠΎ это Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ±Π»ΠΈΠΆΠ΅ с ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ ΠΈ нСдостатками. По ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ учимся Π»ΡŽΠ±ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ особСнности Π½ΠΎΠ²Ρ‹Ρ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΡ‹ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π±Ρ‹ Π±Ρ‹Π»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ссли Π±Ρ‹ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ присутствовали ΠΈ Π² Π±ΠΎΠ»Π΅Π΅ Π·Ρ€Π΅Π»Ρ‹Ρ… инструмСнтах, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ. Одна ΠΈΠ· Π½ΠΎΠ²Ρ‹Ρ… особСнностСй, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² PostgreSQL, Π±Ρ‹Π»Π° настраиваСмая ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ записи ΠΏΠΎΠ΄ соСдинСниС Π²ΠΎ всСм кластСрС. И ΠΊΠ°ΠΊ оказалось, ΠΎΠ½Π° Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ, ΠΈ сСгодня ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с Π²Π°ΠΌΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π—Π°Ρ‡Π΅ΠΌ ΠΌΠ½Π΅ это?

Π’ΠΎ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ сСбя вСсти кластСр зависит ΠΎΡ‚ вашСго прилоТСния. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для ΠΎΠΏΠ»Π°Ρ‚Ρ‹ счСтов. Π’Π°ΠΌ понадобится стопроцСнтная ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π² кластСрС, поэтому Π²Π°ΠΌ придСтся Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ синхронныС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваша Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΆΠ΄Π°Π»Π°, ΠΏΠΎΠΊΠ° Π±ΡƒΠ΄ΡƒΡ‚ внСсСны всС измСнСния. Однако, Ссли вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ – это быстро Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π°ΡΡΡ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΡΠ΅Ρ‚ΡŒ, Ρ‚ΠΎ Π²Ρ‹ навСрняка ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Ρ‚Π΅ стопроцСнтной согласованности быстрый ΠΎΡ‚ΠΊΠ»ΠΈΠΊ. Π§Ρ‚ΠΎΠ±Ρ‹ этого Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² вашСм кластСрС асинхронныС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹.

Π—Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ, компромисс

Π’Π°ΠΌ прСдстоит ΠΏΠΎΠΉΡ‚ΠΈ Π½Π° компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. PostgreSQL ΡˆΠ°Π³Π°Π΅Ρ‚ ΠΎΡ‚ согласованности, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ конфигурация ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС получаСтся прСдсказуСмой ΠΈ Π±Π΅Π· Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠ². А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅ΠΌ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с компромиссами.

ΠšΠΎΠΌΠΏΡ€ΠΎΠΌΠΈΡΡ 1: ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Если кластСру PostgreSQL Π½Π΅ трСбуСтся ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ½ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ асинхронно. Π—Π°ΠΏΠΈΡΡŒ производится Π½Π° Π»ΠΈΠ΄Π΅Ρ€Π° кластСра, Π° Π΅Π³ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌ спустя нСсколько миллисСкунд Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ обновлСния. Когда кластСру PostgreSQL трСбуСтся ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ синхронно. Π—Π°ΠΏΠΈΡΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° Π² Π»ΠΈΠ΄Π΅Ρ€Π΅ кластСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ доТдСтся подтвСрТдСния, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π» запись, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π» запись, ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этими ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ асинхронный ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄Π²Π° ΠΏΡ€Ρ‹ΠΆΠΊΠ° ΠΏΠΎ сСти, Π° синхронный – Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅.

ΠšΠΎΠΌΠΏΡ€ΠΎΠΌΠΈΡΡ 2: Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² случаС сбоя Π² Ρ€Π°Π±ΠΎΡ‚Π΅ Π»ΠΈΠ΄Π΅Ρ€Π° Π² этих Π΄Π²ΡƒΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°Ρ… Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹ΠΌ. Если Ρ€Π°Π±ΠΎΡ‚Π° выполняСтся асинхронно, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ ошибки, Π½Π΅ всС записи Π±ΡƒΠ΄ΡƒΡ‚ зафиксированы Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌΠΈ. Бколько Π±ΡƒΠ΄Π΅Ρ‚ потСряно? Зависит ΠΎΡ‚ самого прилоТСния ΠΈ эффСктивности Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. РСпликация Compose ΠΏΠΎΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅ ΡΡ‚Π°Ρ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ Π² случаС, Ссли количСство ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Π½Π΅ΠΉ Π½Π° 1 Мб мСньшС, Ρ‡Π΅ΠΌ Π² Π»ΠΈΠ΄Π΅Ρ€Π΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ потСряно Π΄ΠΎ 1 Мб записСй ΠΏΡ€ΠΈ асинхронной Ρ€Π°Π±ΠΎΡ‚Π΅.

Π’ синхронном Ρ€Π΅ΠΆΠΈΠΌΠ΅ этого Π½Π΅ происходит. Если Π»ΠΈΠ΄Π΅Ρ€ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, всС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ любая запись, подтвСрТдСнная Π½Π° Π»ΠΈΠ΄Π΅Ρ€Π΅, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π° Π² Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ…. Π’ΠΎΡ‚ ΠΎΠ½Π° – ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ.

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ для ΠΎΠΏΠ»Π°Ρ‚Ρ‹ счСтов, Π³Π΄Π΅ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ явноС прСимущСство Π² поискС компромисса ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. Π‘Π°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ прилоТСния – Π²Π°Π»ΠΈΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ вспомнитС ΠΏΡ€ΠΎ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ основная Π·Π°Π΄Π°Ρ‡Π° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, отвСчая Π½Π° запросы ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ быстрСС. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ с мСньшим количСством ΠΏΡ€Ρ‹ΠΆΠΊΠΎΠ² ΠΏΠΎ сСти ΠΈ мСньшим ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Π² ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π΅. Однако компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ СдинствСнный, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ приходится Π΄ΡƒΠΌΠ°Ρ‚ΡŒ.

ΠšΠΎΠΌΠΏΡ€ΠΎΠΌΠΈΡΡ 3: Π‘Π±ΠΎΠΈ

ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π²Π΅Π΄Π΅Ρ‚ сСбя кластСр Π²ΠΎ врСмя сбоя. Рассмотрим ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚. Когда ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ асинхронно, Π»ΠΈΠ΄Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ записи, Π½Π΅ оТидая Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΡ… Ρ€Π΅ΠΏΠ»ΠΈΠΊ. Когда Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² кластСр, ΠΎΠ½ΠΈ Π΄ΠΎΠ³ΠΎΠ½ΡΡŽΡ‚ Π»ΠΈΠ΄Π΅Ρ€Π°. ΠŸΡ€ΠΈ синхронной Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ссли Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚, Ρ‚ΠΎ Ρƒ Π»ΠΈΠ΄Π΅Ρ€Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€Π° ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΏΠΎΠΊΠ° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Π½Π΅ вСрнСтся Π² кластСр ΠΈ Π½Π΅ смоТСт ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ запись.

По ΠΎΠ΄Π½ΠΎΠΌΡƒ соСдинСнию Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ?

ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½ΡƒΠΆΠ΅Π½ особый Ρ‚ΠΈΠΏ сочСтания согласованности ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Если ΠΎΠ½ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ Π½Π΅ являСтся нашим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ для ΠΎΠΏΠ»Π°Ρ‚Ρ‹ счСтов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ согласованным, ΠΈΠ»ΠΈ ΠΆΠ΅ нашим ΠΏΠΎΡ‡Ρ‚ΠΈ эфСмСрным ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ для ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти. Π’ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях Π±ΡƒΠ΄ΡƒΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ синхронными, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ – асинхронными. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ систСма ΠΆΠ΄Π°Π»Π°, ΠΏΠΎΠΊΠ° сообщСниС, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ Π² Ρ‡Π°Ρ‚, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½ΠΎ, Π½ΠΎ Ссли Π² этом ΠΆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠ»Π°Ρ‚Π΅ΠΆ, Ρ‚ΠΎ ΠΆΠ΄Π°Ρ‚ΡŒ придСтся.

ВсС эти Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прилоТСния. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΆΠ°Ρ‚ΡŒ максимум ΠΈΠ· кластСра. Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠ³ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ SQL для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈ для Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ контроля Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ PostgreSQL обСспСчиваСт ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ контролируСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ сСрвСра synchronous_commit. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ Π² ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ on, Π½ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°: local, remote_write ΠΈΠ»ΠΈ off.

ΠŸΡ€ΠΈ установкС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² off ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ всС синхронныС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, Π΄Π°ΠΆΠ΅ Π² локальной систСмС. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² local опрСдСляСт синхронный Ρ€Π΅ΠΆΠΈΠΌ для локальной систСмы, Π½ΠΎ записи Π² Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ производятся асинхронно. 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, ΠΌΡ‹ создаСм систСму, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ диски ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ синхронными, Π½ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ сСтСвых Ρ€Π΅ΠΏΠ»ΠΈΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡΠ²Π»ΡΡŽΡ‚ΡΡ асинхронными. Если, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ Π½Π΅ Ρ€Π΅ΡˆΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эти ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ синхронными, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅.

Если Π²Ρ‹ слСдили Π·Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Governor, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅Π΄Π°Π²Π½ΠΈΠ΅ измСнСния (1, 2), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Governor Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ.

Π•Ρ‰Π΅ ΠΏΠ°Ρ€Π° слов…

Π‘ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ нСдСлю Π½Π°Π·Π°Π΄, я Π±Ρ‹ Π²Π°ΠΌ сказал, Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ½ΠΊΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ PostgreSQL. ИмСнно Ρ‚ΠΎΠ³Π΄Π° ΠšΡƒΡ€Ρ‚, Ρ‡Π»Π΅Π½ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Compose, настаивал Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΅ΡΡ‚ΡŒ. Он ΡƒΡ‚ΠΈΡ…ΠΎΠΌΠΈΡ€ΠΈΠ» ΠΌΠΎΠΈ возраТСния ΠΈ нашСл Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ PostgreSQL ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

PostgreSQL ΠΈ настройки согласованности записи для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ соСдинСния

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π² любоС врСмя. ПовСдСниС для любой Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ опрСдСляСтся настройкой, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π»ΠΈΡΡŒ синхронно, Π° для Π΄Ρ€ΡƒΠ³ΠΈΡ… – асинхронно. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ multistatement Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ асинхронно, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎ, Π·Π°Π΄Π°ΠΉΡ‚Π΅ SET LOCAL synchronous_commit TO OFF Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠΉ нСбольшой ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ Π΄Π°Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com