PostgreSQL เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™เบชเบฐเป€เบžเบฒเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ

เบเบฒเบ™เปเบ›เบžเบฒเบชเบฒเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเป„เบ”เป‰เบ–เบทเบเบเบฐเบเบฝเบกเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบชเบถเบเบชเบฒเบ‚เบญเบ‡เบซเบผเบฑเบเบชเบนเบ” "เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™". เบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบ™เบตเป‰? เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบตเบ™เบ—เปˆเบฒเบ™เป„เบ› เบกเบทเป‰เป€เบ›เบตเบ”, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบปเบ™เบ—เบฐเบ™เบฒเปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™, เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบฎเบนเบšเปเบšเบšเบญเบญเบ™เป„เบฅเบ™เปŒ, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปเบฅเบฐเบ„เบงเบฒเบกเบชเบปเบ”เปƒเบชเบ”เป‰เบฒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบฅเปเบ–เป‰เบฒเบœเบนเป‰เบฎเบฝเบ™เบˆเบปเบšเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบก.

PostgreSQL เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™เบชเบฐเป€เบžเบฒเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ

PostgreSQL เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™เบชเบฐเป€เบžเบฒเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ
เบขเบนเปˆเบ—เบตเปˆ Compose, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเบฐเบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบซเบผเบฒเบเบ‚เบถเป‰เบ™. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเบฝเบ™เบฎเบนเป‰เบ—เบตเปˆเบˆเบฐเบฎเบฑเบเบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆ, เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเบ„เบดเบ”เบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเบ‡เบฒเบกเปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเปƒเบซเบเปˆเบเบงเปˆเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™. เบซเบ™เบถเปˆเบ‡เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเปƒเบซเบกเปˆเบ—เบตเปˆเบ‚เป‰เบญเบเบขเบฒเบเป€เบซเบฑเบ™เปƒเบ™ PostgreSQL เปเบกเปˆเบ™เบเปเบฒเบ™เบปเบ”เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™เบ•เปเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปƒเบ™เบ—เบปเปˆเบงเบเบธเปˆเบกเบ—เบฑเบ‡เบซเบกเบปเบ”. เปเบฅเบฐเบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบซเบฑเบ™เบญเบญเบ, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบกเบฑเบ™เบขเบนเปˆเปเบฅเป‰เบง, เปเบฅเบฐเบกเบทเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบขเบฒเบเปเบšเปˆเบ‡เบ›เบฑเบ™เปƒเบซเป‰เบ—เปˆเบฒเบ™เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™.

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™?

เปเบ™เบงเปƒเบ”เบเบธเปˆเบกเบ„เบงเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเบ‚เบถเป‰เบ™เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เปเบญเบฑเบšเบเบฒเบ™เบˆเปˆเบฒเบเป€เบ‡เบดเบ™เปƒเบšเบšเบดเบ™. เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡ XNUMX% เปƒเบ™เบ—เบปเปˆเบงเบเบธเปˆเบก, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™ synchronous commits เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบฅเปเบ–เป‰เบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ–เป‰เบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบกเปˆเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบชเบฑเบ‡เบ„เบปเบกเบ—เบตเปˆเป€เบ•เบตเบšเป‚เบ•เป„เบง, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบกเบฑเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เป„เบงเบซเบผเบฒเบเบเบงเปˆเบฒเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡ XNUMX%. เป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธเบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ asynchronous เปƒเบ™เบเบธเปˆเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เบžเบปเบšเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ™เบตเบ›เบฐเบ™เบญเบก

เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบเบฒเบ™เบ„เป‰เบฒเบฅเบฐเบซเบงเปˆเบฒเบ‡เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. PostgreSQL เบเป‰เบฒเบเบญเบญเบเป„เบ›เบˆเบฒเบเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เป€เบžเบฒเบฐเบงเปˆเบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™เบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เป€เบ”เบปเบฒเป„เบ”เป‰เปเบฅเบฐเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเปเบ›เบเปƒเบˆเบ—เบตเปˆเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”. เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ›เบฐเบ™เบตเบ›เบฐเบ™เบญเบก.

Tradeoff 1: เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”

เบ–เป‰เบฒเบเบธเปˆเบก PostgreSQL เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเปเบšเบš asynchronously. เบเบฒเบ™เบ‚เบฝเบ™เปเบกเปˆเบ™เป€เบฎเบฑเบ”เป„เบ›เบซเบฒเบœเบนเป‰เบ™เปเบฒเบเบธเปˆเบก, เปเบฅเบฐเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบ•เบปเบงเปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เปƒเบ™เบชเบญเบ‡เบชเบฒเบกเบกเบดเบฅเบดเบงเบดเบ™เบฒเบ—เบตเบ•เปเปˆเบกเบฒ. เป€เบกเบทเปˆเบญเบเบธเปˆเบก PostgreSQL เบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡, เบกเบฑเบ™เบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ synchronously. เบเบฒเบ™เบ‚เบฝเบ™เบˆเบฐเบ–เบทเบเป€เบฎเบฑเบ”เป„เบ›เบซเบฒเบœเบนเป‰เบ™เปเบฒเบเบธเปˆเบก, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เปƒเบซเป‰เบเบฑเบš replicas เปเบฅเบฐเบฅเปเบ–เป‰เบฒเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบ„เบปเบ™เป„เบ”เป‰เบ‚เบฝเบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเบฅเบดเป€เบฅเบตเปˆเบกเบเบฒเบ™เบ‚เบฝเบ™เบงเปˆเบฒเบกเบฑเบ™เบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”. เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™ asynchronous เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบ hops, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบงเบดเบ—เบตเบเบฒเบ™ synchronous เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบชเบตเปˆ.

Tradeoff 2: เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเบ‚เบญเบ‡เบœเบนเป‰เบ™เปเบฒเปƒเบ™เบชเบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบเบฑเบ‡เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เบ–เป‰เบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบšเปเปˆเบเบปเบ‡เบเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบเบตเบ”เบ‚เบทเป‰เบ™, เบšเปเปˆเปเบกเปˆเบ™เบšเบฑเบ™เบ—เบถเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเป€เบฎเบฑเบ”เป‚เบ”เบ replicas. เบˆเบฐเป€เบชเบเป€เบ—เบปเปˆเบฒเปƒเบ”? เบ‚เบถเป‰เบ™เบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปเบฅเบฐเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡. Compose replication เบˆเบฐเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเปƒเบซเป‰ replica เบˆเบฒเบเบเบฒเบ™เบเบฒเบเป€เบ›เบฑเบ™เบœเบนเป‰เบ™เปเบฒเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบกเบฑเบ™เปเบกเปˆเบ™ 1 MB เบซเบ™เป‰เบญเบเบเปˆเบงเบฒเบœเบนเป‰เบ™เปเบฒ, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบ–เบดเบ‡ 1 MB เบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบญเบฒเบ”เบˆเบฐเบชเบนเบ™เป€เบชเบเป„เบ›เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™ asynchronous.

เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เป‚เบซเบกเบ” synchronous. เบ–เป‰เบฒเบœเบนเป‰เบ™เปเบฒเบฅเบปเป‰เบกเป€เบซเบฅเบง, เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบเบฒเบ™เบ‚เบฝเบ™เปƒเบ”เป†เบ—เบตเปˆเบขเบทเบ™เบขเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบœเบนเป‰เบ™เปเบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เปƒเบ™เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡.

เบžเบถเบ”เบ•เบดเบเปเบฒ synchronous เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบเบฒเบ™เป€เบญเบตเป‰เบ™เป€เบเบฑเบšเป€เบ‡เบดเบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบกเบตเบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เปƒเบ™เบเบฒเบ™เบŠเบทเป‰เบ‚เบฒเบเบฅเบฐเบซเบงเปˆเบฒเบ‡เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบกเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบ•เบญเบ™เบ™เบตเป‰เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบชเบฑเบ‡เบ„เบปเบกเบ—เบตเปˆเบงเบฝเบเบ‡เบฒเบ™เบ•เบปเป‰เบ™เบ•เปเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบฎเบฑเบเบชเบฒเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เป‚เบ”เบเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ•เปเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป„เบงเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบˆเบฐเป„เบงเป„เบ”เป‰. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฑเบš hops เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบซเบ™เป‰เบญเบเปเบฅเบฐเบเบฒเบ™เบฅเปเบ–เป‰เบฒเบซเบ™เป‰เบญเบเบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบˆเบฐเป€เบ›เบฑเบ™เบšเบนเบฅเบดเบกเบฐเบชเบดเบ”. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบšเปเปˆเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ”เบฝเบงเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบš.

Trade-off 3: เบเบฒเบ™เบ‚เบฑเบ”เบ‚เป‰เบญเบ‡

เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡ เบชเบณ เบ„เบฑเบ™เบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบเบธเปˆเบกเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเปเบ™เบงเปƒเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบฅเบปเป‰เบกเป€เบซเบฅเบง. เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบซเบ™เบถเปˆเบ‡เบซเบผเบทเบซเบผเบฒเบ replicas เบฅเบปเป‰เบกเป€เบซเบฅเบง. เป€เบกเบทเปˆเบญเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ–เบทเบเบ›เบฐเบกเบงเบ™เบœเบปเบ™ asynchronously, เบœเบนเป‰เบ™เปเบฒเบˆเบฐเบชเบทเบšเบ•เปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบเบญเบกเบฎเบฑเบšเปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบฝเบ™, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบฅเปเบ–เป‰เบฒเบชเปเบฒเบฅเบฑเบš replicas เบ—เบตเปˆเบ‚เบฒเบ”เบซเบฒเบเป„เบ›. เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ replicas เบเบฑเบšเบ„เบทเบ™เบชเบนเปˆ cluster, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบˆเบฑเบšเบเบฑเบšเบœเบนเป‰เบ™เปเบฒ. เบ”เป‰เบงเบเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เปเบšเบš synchronous, เบ–เป‰เบฒ replicas เบšเปเปˆเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบœเบนเป‰เบ™เปเบฒเบˆเบฐเบšเปเปˆเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเปเบฅเบฐเบˆเบฐเบชเบทเบšเบ•เปเปˆเบฅเปเบ–เป‰เบฒเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบ‚เบญเบ‡เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบˆเบปเบ™เบเปˆเบงเบฒ replica เบเบฑเบšเบ„เบทเบ™เบชเบนเปˆ cluster เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบเบญเบกเบฎเบฑเบšเปเบฅเบฐเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบเบฒเบ™เบ‚เบฝเบ™.

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบซเบ™เบถเปˆเบ‡เบ•เปเปˆเบ—เบธเบฅเบฐเบเปเบฒ?

เบ—เบธเบเป†เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบฐเป€เบžเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆ, เปเบ™เปˆเบ™เบญเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™ app เบˆเปˆเบฒเบเปƒเบšเบšเบดเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบชเบญเบ”เบ„เปˆเบญเบ‡เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เบซเบผเบทเป€เบเบทเบญเบš ephemeral app เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบชเบฑเบ‡เบ„เบปเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เปƒเบ™เบ—เบธเบเบเปเบฅเบฐเบ™เบตเบญเบทเปˆเบ™เป†, เบˆเบฐเบกเบตเป€เบงเบฅเบฒเบ—เบตเปˆเบšเบฒเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ•เป‰เบญเบ‡เบ–เบทเบ synchronous เปเบฅเบฐเบšเบฒเบ‡เบญเบฑเบ™เบ•เป‰เบญเบ‡ asynchronous. เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบฅเบฐเบšเบปเบšเบฅเปเบ–เป‰เบฒเบˆเบปเบ™เบเปˆเบงเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเปเบกเปˆเบ™เบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ, เปเบ•เปˆเบ–เป‰เบฒเบเบฒเบ™เบˆเปˆเบฒเบเป€เบ‡เบดเบ™เบ–เบทเบเบ”เปเบฒเป€เบ™เบตเบ™เบขเบนเปˆเปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ”เบฝเบงเบเบฑเบ™, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบฅเปเบ–เป‰เบฒ.

เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เปเบ™เปˆเบ™เบญเบ™, เปเบกเปˆเบ™เป€เบฎเบฑเบ”เป‚เบ”เบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบเปˆเบฝเบงเบเบฑเบšเป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เปเบ•เปˆเบฅเบฐเบงเบดเบ—เบตเบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เป„เบ”เป‰เบ›เบฐเป‚เบซเบเบ”เบชเบนเบ‡เบชเบธเบ”เบˆเบฒเบเบเบธเปˆเบกเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™เบฅเบฐเบ”เบฑเบš SQL เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบฅเบฐเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ.

เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”

เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, PostgreSQL เบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡. เบญเบฑเบ™เบ™เบตเป‰เบ–เบทเบเบ„เบงเบšเบ„เบธเบกเป‚เบ”เบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเป€เบŠเบตเบšเป€เบงเบต synchronous_commit. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ•เปเบฒเปเบซเบ™เปˆเบ‡ on, เปเบ•เปˆโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เบกเบตโ€‹เบชเบฒเบกโ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบญเบทเปˆเบ™โ€‹: local, remote_write เบซเบผเบท off.

เป€เบกเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเป€เบ›เบฑเบ™ off เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ synchronous เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบขเบธเบ”เป€เบŠเบปเบฒ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™. เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบเปเบฒเบ™เบปเบ”เป‚เบซเบกเบ” synchronous เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™, เปเบ•เปˆเบเบฒเบ™เบ‚เบฝเบ™เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ” asynchronously. Remote_write เบ•เปเปˆเป„เบ›เบญเบตเบเปเบฅเป‰เบง: เบเบฒเบ™เบ‚เบฝเบ™เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เปเบกเปˆเบ™เป€เบฎเบฑเบ”เปเบšเบšเบšเปเปˆเบเบปเบ‡เบเบฑเบ™, เปเบ•เปˆเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™เป€เบกเบทเปˆเบญ replica เป„เบ”เป‰เบเบญเบกเบฎเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เบ‚เบฝเบ™เบกเบฑเบ™เปƒเบชเปˆเปเบœเปˆเบ™.

เป‚เบ”เบเบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบกเบตเบขเบนเปˆ, เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบเบžเบถเบ”เบ•เบดเบเปเบฒเปเบฅเบฐ, เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒ on โ€“ เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ synchronous, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฅเบทเบญเบเป€เบญเบปเบฒ local เบชเปเบฒเบฅเบฑเบš asynchronous commits เปƒเบ™เป„เบฅเบเบฐเป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบญเบญเบเบˆเบฒเบเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ commits synchronous.

เบ”เบฝเบงเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ™เบตเป‰เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบง, เปเบ•เปˆเบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เบฑเป‰เบ‡เบ„เปˆเบฒ synchronous_commit ะฒ local เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบžเบงเบเป€เบฎเบปเบฒเบชเบปเบ‡เป„เบชเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ›เปˆเบฝเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต synchronous_commit เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบšเบดเบ™โ€‹, เปเบฅเบฐโ€‹เบกเบฑเบ™โ€‹เป„เบ”เป‰โ€‹เบซเบฑเบ™โ€‹เบญเบญเบโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹, เบกเบตโ€‹เป€เบ–เบดเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบงเปˆเบฒโ€‹เบชเบญเบ‡โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบฎเบฑเบ”โ€‹เบชเบดเปˆเบ‡โ€‹เบ™เบตเป‰โ€‹. เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบเปเบฒเบ™เบปเบ” session เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

SET SESSION synchronous_commit TO ON;  
// Your writes go here

เบ—เบธเบเป†เบเบฒเบ™เบ‚เบฝเบ™เบ•เปเปˆเป„เบ›เปƒเบ™เป€เบŠเบ”เบŠเบฑเบ™เบˆเบฐเบฎเบฑเบšเบฎเบนเป‰เบเบฒเบ™เบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบชเบปเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบ—เบฒเบ‡เบšเบงเบเปƒเบซเป‰เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ. เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเปเบ™เปˆเบ™เบญเบ™เบ—เปˆเบฒเบ™เบ›เปˆเบฝเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ synchronous_commit เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™โ€‹เบชเปˆเบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹ SESSION เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเบขเบนเปˆเปƒเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เบ”เบตเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบš replication synchronous เบชเปเบฒเบฅเบฑเบšเบ—เบธเบฅเบฐเบเปเบฒเบ”เบฝเบง. เปƒเบ™เบซเบผเบฒเบเป†เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ” NoSQL เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบšเปเปˆเบกเบต, เปเบ•เปˆเบกเบฑเบ™เป€เบฎเบฑเบ”เปƒเบ™ PostgreSQL. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบ—เปˆเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเปเบฒเบ™เบปเบ” synchronous_commit ะฒ on เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ. COMMIT เบˆเบฐเป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเป‚เบ”เบเปƒเบŠเป‰เบ„เปˆเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปƒเบ”เป† synchronous_commit, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เปƒเบ™เป€เบงเบฅเบฒเบ™เบฑเป‰เบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒเป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบญเบทเปˆเบ™เป†เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบ‚เบฝเบ™เบšเปเปˆเปเบกเปˆเบ™ asynchronous.

BEGIN;  
SET LOCAL synchronous_commit TO ON;  
// Your writes go here
COMMIT;  

เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบˆเบฐเบ–เบทเบเบขเบทเบ™เบขเบฑเบ™เป€เบ›เบฑเบ™เบฅเบฒเบเบฅเบฑเบเบญเบฑเบเบชเบญเบ™เบเบฑเบš replicas เบเปˆเบญเบ™เบ—เบตเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เปƒเบ™เบ—เบฒเบ‡เบšเบงเบเบเบฑเบšเบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ PostgreSQL

เบเปˆเบญเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบฅเบฐเบšเบปเบš PostgreSQL เบเบฑเบš synchronous_commit, เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เปƒเบ™โ€‹ local. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เปƒเบ™เบ”เป‰เบฒเบ™เป€เบŠเบตเบŸเป€เบงเบต, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ”เบชเบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก synchronous_standby_names เบˆเบฐเป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบ™เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เป€เบกเบทเปˆเบญเปƒเบ” synchronous_commit เบˆเบฐเบขเบนเปˆเปƒเบ™ on. เบกเบฑเบ™เบเปเบฒเบ™เบปเบ”เบงเปˆเบฒ replicas เปƒเบ”เบ—เบตเปˆเบกเบตเบชเบดเบ”เป„เบ”เป‰เบฎเบฑเบšเบชเปเบฒเบฅเบฑเบš synchronous commits, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เบฑเป‰เบ‡เบกเบฑเบ™เป€เบ›เบฑเบ™. *, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ replicas เบ—เบฑเบ‡เบซเบกเบปเบ”เบกเบตเบชเปˆเบงเบ™เบฎเปˆเบงเบก. เบ„เปˆเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบง configured เปƒเบ™ เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบก:

synchronous_commit = local  
synchronous_standby_names='*'

เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต synchronous_commit เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เบงเบฒเบกเบซเบกเบฒเบ local, เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบ—เบตเปˆเปเบœเปˆเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบเบฑเบ‡เบ„เบปเบ‡ synchronous, เปเบ•เปˆเบเบฒเบ™ replica เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบกเปˆเบ™ asynchronous เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆ, เปเบ™เปˆเบ™เบญเบ™, เบžเบงเบเป€เบฎเบปเบฒเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ synchronous, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ เป‚เบ„เบ‡เบเบฒเบ™เบ›เบปเบเบ„เบญเบ‡, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบšเบฒเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ (1, 2), เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰ Governor เบ—เบปเบ”เบชเบญเบšเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบฅเบฐเบ•เบดเบ”เบ•เบฒเบกเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

เบญเบตเบเบชเบญเบ‡เบชเบฒเบกเบ„เบณ...

เบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบญเบฒเบ—เบดเบ”เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบ‚เป‰เบญเบเบˆเบฐเบšเบญเบเป€เบˆเบปเป‰เบฒเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ›เบฑเบš PostgreSQL เปƒเบซเป‰เบฅเบฐเบญเบฝเบ”. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ Kurt, เบชเบฐเบกเบฒเบŠเบดเบเบ‚เบญเบ‡เบ—เบตเบกเบ‡เบฒเบ™เป€เบงเบ—เบต Compose, เบขเบทเบ™เบขเบฑเบ™เบงเปˆเบฒเป‚เบญเบเบฒเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบกเบตเบขเบนเปˆ. เบฅเบฒเบงเบชเบฐเบซเบ‡เบปเบšเบเบฒเบ™เบ„เบฑเบ”เบ„เป‰เบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบฅเบฐเบžเบปเบšเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™ PostgreSQL เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

PostgreSQL เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™เบชเบฐเป€เบžเบฒเบฐเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰เบ—เบธเบเป€เบงเบฅเบฒ. เบžเบถเบ”เบ•เบดเบเปเบฒเบชเปเบฒเบฅเบฑเบšเบ—เบธเบฅเบฐเบเปเบฒเปƒเบ”เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบกเบตเบœเบปเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปเบฅเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ” synchronously เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบ„เบปเบ™เบญเบทเปˆเบ™ asynchronously. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบšเบฑเบ‡เบ„เบฑเบšเบซเบ™เบถเปˆเบ‡ multistatement เบ—เบธเบฅเบฐเบเปเบฒเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ asynchronously เป€เบกเบทเปˆเบญเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบ•เบฑเป‰เบ‡ SET LOCAL synchronous_commit TO OFF เปƒเบ™เบ—เบธเบฅเบฐเบเปเบฒ.

เบ”เป‰เบงเบเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เป€เบฅเบฑเบเบ™เป‰เบญเบเบ™เบตเป‰เบ•เปเปˆเบเบฑเบšเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบ„เบงเบšเบ„เบธเบกเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡ เปเบฅเบฐเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™