ααΆαααααααα’αααααααααΌαααΆααααα
αααΆαα·ααααααααΆαααα·ααααααααααα·ααααΆ
ααΆααααααααΆααααΈαααααΆααααααΆααααΆαααααα PostgreSQL αα·αααΆααααααΆααααΆααααΆαα
αα
α―ααΆαααα ααΎααααααααΆαααΆαα½αααΌαααααΆααα·ααααααααΆα
αααΎα ααααααααα±ααααΎαααΌαα±ααΆαααΎααααΈααααΆααααΆααααα
αααΆααα’αααΈαα»αααΆα αα·αα
ααα»α
ααααααΆααααααα½αααα αα
ααααααααΎαααααααα‘αΆαααααααααα·αααααααααΌαααααΆααα·ααααααααααΈ αααααααααΎαα
αΆααααααΎααα·αααΆααΆααΉαααα’αααΆαααΆ ααααα·αααΎαααααααα·αααααααααααααΆαααααΆαααααααΆααα
αααα»αα§ααααααααααΆαααΆαα
αΆαααα»αααΆααααααΎαααΆαααααΎααΆαααΆαα½αααΉαααααααααΌαα αααααααα·αααααααΈαα½αααααααα»αα
ααααΎααα
αααα»α PostgreSQL ααΊα’αΆα
ααααααα
ααΆααααααααααΆααααααααΆαααΆααααΆαααααα»ααα½αααΆααααααΆααααΌααΆααα
αααααααΆααααΌαα α αΎαααΌα
αααααΆααααα
αα ααΎαααΆαααΆαα½α
α αΎα α αΎαααααααα ααΎαα
ααα
αααααααααΆαα½αα’αααααΌαααααααΆαα’αααΈαααααααα’αααα’αΆα
ααααΎααΆααΆαα
α ααα»α’αααΈαααα»αααααΌαααΆαααΆ?
αααααααα ααααααα½αααΆαα₯αα·ααΆααα’αΆαααααααΎαααααα·ααΈααααα’αααα ααΆα§ααΆα ααα ααΌααααααααα·ααΈααΌααΆαααα·ααααααααα α’αααααΉαααααΌαααΆαααΆααααΈαααααΆααααααΆ 100% αα ααΌααΆααα ααααα ααΌα ααααα’αααααΉαααααΌαααΎαααΆαααααααααΆα α·αααααααΆααααα ααΎααααΈα±ααααΌαααααΆααα·ααααααααααα’ααααααα αΆαααΆαααααΆααααααΌαααΆααα’αααααααααΌαααααΎα αααααΆαααΆαααΆααααα ααααα·αααΎαααααα·ααΈααααα’αααααΆαααααΆαααααααααααΈαα ααααΎααααΆαααΆαααα αα αααα’ααααααα ααααΆα αΌαα α·αααααΆαααααΎαααααΏαααΆαααΆαααΆααααΆαα 100%α ααΎααααΈαααααα ααΆαααΆ α’αααα’αΆα ααααΎααΆαααααααααΆα α·αααα’ααααΆααα αααα»αα αααααααααα’αααα
αα½αααΆααααααααααα½α
α’αααβααααΌαβααααΎβααΆαβαααααΌαβαααΆαβααΆαβαααΈαααααΆααβααααΆβααβαα·αααααα αα·αβααΆαβα’αα»ααααα PostgreSQL ααααΆααααΈααααΆαααΈααΆααααΈαααααΆααααααΆ ααΈαααααααΆααααααααααΆαααΎααααααΆααααα’αΆα ααααααααΆαααΆα αα·ααα·αααΆαααΆαααααΆααααα’αΎαααααα·αααΉαααααΆααααα α₯α‘αΌααααααΌααααα‘ααααΎαααΆααααααααααα½αα
Tradeoff 1: ααΆαα’αα»αααα
ααααα·αααΎα ααααα PostgreSQL αα·ααααααΌαα±ααααΆαααΆααααΈαααααΆααααααΆααα ααΆα’αΆα ααααΎαααΆααααα’ααααΆαα ααΆααααααααααΌαααΆαααααΎα‘αΎαα ααααα’αααααΉαααΆαα ααααα α αΎαααΆαα’αΆαααααααΉαααααΌαααΆαααααΎαα ααΆααααΆαα ααααααααααΆααΈαααΈααΈααΈαα·ααΆααΈαα ααααααααα αα αααααααααα»α PostgreSQL ααΆαααΆαααΆααααΈαααααΆααααααΆ ααΆααααΌαααααααΎαααΆαααααααααΆα ααΆααααααααΉαααααΌαααΆαααααΎα‘αΎααα ααΆααα’αααααΉαααΆαα ααααα αααααΉαααααΎααΆαα’αΆααααααα ααΆααα’αααα αααα α αΎααααα αΆαααΆααααααΆααααΆααΈαα½ααααΆαααααααα»αααΉαααααΎααΆααααααΆαααα ααΆααα’αα·αα·αααααααΆαα αΆααααααΎαααΆααααααααΆααΆααααααα ααΆααα»αααααΆααΆααααααααααΆααα·ααΈααΆαααααααΆαααααααΊααΆ αα·ααΈααΆαααααα’ααααΆαααΆαααΆααααααΆα hops ααΈα αααααααα·ααΈααΆααααα synchronous ααααΌαααΆαα ααα½ααα½αα
Tradeoff 2: ααΆαααΆααααΆαα
αααααααα αααα»αααααΉαααα·ααΆαααααααΆααααΆαααα’αααααΉαααΆααα αααα»ααα·ααΈααΆαααααααΆααααΈααααααααΉααα»αααααΆαααα ααααα·αααΎααΆαααΆαααααΌαααΆαα’αα»αααααααα’ααααΆα αααααααα·αααΎααΆαααα α»αααααααααΎαα‘αΎα αα·ααααααΆαααααααααααΆααΆααα’ααααΉαααααΌαααΆααααααααΉααααααα’αααα αααααααααα ααΎααΉαααααΌαααΆαααααααα»ααααΆα? α’αΆαααααααΎαααααα·ααΈαααα½αααΆ αα·αααααα·αααααΆαααααΆαα ααααα ααΆαα ααααααΆααααααΉαααΆαααΆαααΆαα ααααααΈααΆαααααΆαααΆα’αααααΉαααΆα ααααα·αααΎααα·ααΆαααααααααΆααα αααα»αααΆααΆααα·α ααΆα 1 MB αα·α ααΆαα’αααααΆααα»α αααααΊαα αΌαααα 1 MB αααααααααααΆα’αΆα ααΆααααααααα»αα’αα‘α»ααααααααα·ααααα·ααΆαα’ααααΆαα
ααΆαα·αααΎαα‘αΎααα αααα»αααααααααΆαααααααα ααααα·αααΎα’αααααΉαααΆααααΆααα ααΆαα ααααααΆααα’ααααααΌαααΆαααααΎαα αα α»ααααααααΆα αααααΆαααΆααααααααΆαα½ααααααΆααααααΆααααΎα’αααααΉαααΆαααααΌααααααααΆαααα ααΎααΆαα ααααα αααααΊααΆααΆααααα·ααααααα
α’αΆαααααα·αα·ααΆααααΆαααααααααΎα±αααααααΆααα αααα»ααααααα·ααΈαα·αααααααα αααααΆααααΈαααααΆααααααΆααΆαα’αααααααααααα αααΆααααΆαααααα»αααΆααααααΌααααΆαααΆααααΈαααααΆααααααΆ αα·αααΆαα’αα»ααααα α’αααΈαααααααΆαααααα»ααααααΆαααααααα·ααΈααααααααΊαα·ααααααααααΉαααααΌαα α₯α‘αΌαααααα·αα’αααΈαααααΆαααααααααααΆααα·α αα α ααααααΊαααααΆααΆαααα α·ααααα»αααΆααααααα’αααααααΎααααΆαααααααααΎααααα ααΉαααααΎα±ααααΆαααΏαααΆααααα’αΆα ααααΎαα ααΆαα αααα»αααααΈααα ααααΎαααΆαααΆαα½ααααααΆα hops αα·α ααΆααα»α αα·αααΆααααα αΆααα·α ααΆααα»ααααααΆαα commits ααΉαααααΆαααΆα’αΆαα·ααΆααα½αα αααααΆαααΆαααΆααααα ααΆααααααΌααααΆαααΆαα’αα»αααα αα·αααΆααααΈαααααΆααααααΆ αα·ααααααΆααΏααααα½αααααααα’αααααααΌααα·ααααααα
ααΆααααααΌα 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 α±ααααΆαααα’α·αααα’ααα αααα αΎαααΆαααααα Kurt αααΆαα·ααααααα»α Compose platform ααΆααααΌα
ααΆααΆαα±ααΆαααααααα ααΆααααΆααααααααααΆααααΆαααααΆαααααααααα»α α αΎαααΆαααααΎααα
αααα»αα―αααΆα PostgreSQL
ααΆαααααααααα’αΆα
ααααΆααααααΌαααΆαααααααααα α₯αα·ααΆαααααααΆααααααα·ααααα·ααΆαααΆαα½αααααΌαααΆαααααααααααΆααααααααΆααααΆααα
αααααααΎααααα·ααααα·ααΆαα ααΌα
αααα ααΆα’αΆα
αα
αα½α
αα·αααΆααααααααααααααΆααααααα·ααααα·ααΆααα½αα
ααα½αααΎααααΈααααΎααααΆααααα αα·ααααααΆααααααα·ααααα·ααΆααααααααααααα’ααααΆαα α§ααΆα αααααΎααααΈααααααα½αα multistatement
ααααα·ααααα·ααΆαααΎααααΈααααΎααΆα commits asynchronous αα
αααααααααααααααΆαααΎααααααΆαααΆααααααααΊαααα»α ααααα SET LOCAL synchronous_commit TO OFF
αα
αααα»αααααα·ααααα·ααΆααα½αα
ααΆαα½αααΉαααΆαααααααααΌα αα½ααααα ααααα―αααΆαααααααα ααΆαααααααα ααΎαααΆααααααα±ααα’αααααααΎααααΆααααΌαααΆααααααααααααΎααΆααααΈαααααΆααααααΆ αα·αααααΎαααΆααααααα½αααα
ααααα: www.habr.com