Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Π³Π»ΠΎΠ±Π°Π»Π°Ρ… InterSystems IRIS

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Π³Π»ΠΎΠ±Π°Π»Π°Ρ… InterSystems IRISΠ‘Π£Π‘Π” InterSystems IRIS ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ структуры для хранСния Π΄Π°Π½Π½Ρ‹Ρ… β€” Π³Π»ΠΎΠ±Π°Π»Ρ‹. По сути это ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ плюшками Π² Π²ΠΈΠ΄Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, быстрых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для ΠΎΠ±Ρ…ΠΎΠ΄Π° Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² Π΄Π°Π½Π½Ρ‹Ρ…, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈ своСго языка ObjectScript.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Π³Π»ΠΎΠ±Π°Π»Π°Ρ… Π² Ρ†ΠΈΠΊΠ»Π΅ статСй Β«Π“Π»ΠΎΠ±Π°Π»Ρ‹ β€” ΠΌΠ΅Ρ‡ΠΈ-ΠΊΠ»Π°Π΄Π΅Π½Ρ†Ρ‹ для хранСния Π΄Π°Π½Π½Ρ‹Ρ…Β»:

Π”Π΅Ρ€Π΅Π²ΡŒΡ. Π§Π°ΡΡ‚ΡŒ 1
Π”Π΅Ρ€Π΅Π²ΡŒΡ. Π§Π°ΡΡ‚ΡŒ 2
Π Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹Π΅ массивы. Π§Π°ΡΡ‚ΡŒ 3

МнС стало интСрСсно ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Π³Π»ΠΎΠ±Π°Π»Π°Ρ…, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ особСнности. Π’Π΅Π΄ΡŒ это ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ иная структура для хранСния Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Π΅ΠΌ всСм ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Намного Π±ΠΎΠ»Π΅Π΅ низкоуровнСвая.

Как извСстно ΠΈΠ· Ρ‚Π΅ΠΎΡ€ΠΈΠΈ рСляционных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ рСализация Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ трСбованиям ACID:

A β€” Atomic (Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ). Π—Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ всС измСнСния сдСланныС Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ….

Π‘ β€” Consistency (ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ). ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ логичСскоС состояниС Π‘Π” Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ Π½Π΅ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹ΠΌ. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ это Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ касаСтся программиста, Π½ΠΎ Π² случаС SQL-Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ½ΠΎ касаСтся Ρ‚Π°ΠΊΠΆΠ΅ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

I β€” Isolate (ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ). ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ влияниС Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°.

D β€” Durable (Π΄ΠΎΠ»Π³ΠΎΠ²Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ). ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π° Π½ΠΈΠΆΠ½ΠΈΡ… уровнях (сбой ΠΏΠΎ ΠΏΠΈΡ‚Π°Π½ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€) Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ влияниС Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ.

Π“Π»ΠΎΠ±Π°Π»Ρ‹ β€” это нСрСляционныС структуры Π΄Π°Π½Π½Ρ‹Ρ…. Они создавались для свСрхбыстрой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрёмся Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Π³Π»ΠΎΠ±Π°Π»Π°Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ docker-ΠΎΠ±Ρ€Π°Π·Π° IRIS.

Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² IRIS ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹: TSTART, TCOMMIT, TROLLBACK.

1. ΠΡ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ

Π›Π΅Π³Ρ‡Π΅ всСго ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ ΠΈΠ· консоли Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Kill ^a
TSTART
Set ^a(1) = 1
Set ^a(2) = 2
Set ^a(3) = 3
TCOMMIT

ΠŸΠΎΡ‚ΠΎΠΌ Π΄Π΅Π»Π°Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄:

Write ^a(1), β€œ ”, ^a(2), β€œ ”, ^a(3)

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

1 2 3

Всё Π² порядкС. ΠΡ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ соблюдСна: всС измСнСния записались.

УслоТним Π·Π°Π΄Π°Ρ‡Ρƒ, Π²Π²Π΅Π΄Ρ‘ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ посмотрим ΠΊΠ°ΠΊ сохранится транзакция, частично ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΠ°ΠΊ.

Π•Ρ‰Ρ‘ Ρ€Π°Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ:

Kill ^A
TSTART
Set ^a(1) = 1
Set ^a(2) = 2
Set ^a(3) = 3

ПослС Ρ‡Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ остановим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, запустим ΠΈ посмотрим.

docker kill my-iris

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° практичСски эквивалСнтна Π½Π°ΡΠΈΠ»ΡŒΡΡ‚Π²Π΅Π½Π½ΠΎΠΌΡƒ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ питания, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ отправляСт сигнал Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ остановки процСсса SIGKILL.

ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ транзакция ΡΠΎΡ…Ρ€Π°Π½ΠΈΠ»Π°ΡΡŒ частично?

WRITE ^a(1), ^a(2), ^a(3)
^
<UNDEFINED> ^a(1)

β€” НСт, Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΠ»Π°ΡΡŒ.

Π˜ΡΠΏΡ‹Ρ‚Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΎΡ‚ΠΊΠ°Ρ‚Π°:

Kill ^A
TSTART
Set ^a(1) = 1
Set ^a(2) = 2
Set ^a(3) = 3
TROLLBACK

WRITE ^a(1), ^a(2), ^a(3)
^
<UNDEFINED> ^a(1)

Π’ΠΎΠΆΠ΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΠ»ΠΎΡΡŒ.

2. Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π±Π°Π·Π°Ρ… Π½Π° Π³Π»ΠΎΠ±Π°Π»Π°Ρ… ΠΊΠ»ΡŽΡ‡ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° Π³Π»ΠΎΠ±Π°Π»Π°Ρ… (напомню, Ρ‡Ρ‚ΠΎ Π³Π»ΠΎΠ±Π°Π» β€” это Π±ΠΎΠ»Π΅Π΅ низкоуровнСвая структура для хранСния Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Π΅ΠΌ рСляционная Ρ‚Π°Π±Π»ΠΈΡ†Π°), для выполнСния трСбования согласованности Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² Ρ‚Ρƒ ΠΆΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»Π°.

НапримСр Ρƒ нас Π΅ΡΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π» ^person, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ пСрсоналии ΠΈ Π² качСствС ΠΊΠ»ΡŽΡ‡Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ИНН.

^person(1234567, β€˜firstname’) = β€˜Sergey’
^person(1234567, β€˜lastname’) = β€˜Kamenev’
^person(1234567, β€˜phone’) = β€˜+74995555555
...

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ быстрый поиск ΠΏΠΎ Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΡ‹ сдСлали ΠΊΠ»ΡŽΡ‡ ^index.

^index(β€˜Kamenev’, β€˜Sergey’, 1234567) = 1

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Π°Π·Π° Π±Ρ‹Π»Π° согласована ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΠΈΡŽ Ρ‚Π°ΠΊ:

TSTART
^person(1234567, β€˜firstname’) = β€˜Sergey’
^person(1234567, β€˜lastname’) = β€˜Kamenev’
^person(1234567, β€˜phone’) = β€˜+74995555555
^index(β€˜Kamenev’, β€˜Sergey’, 1234567) = 1
TCOMMIT

БоотвСтствСнно, ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ:

TSTART
Kill ^person(1234567)
ZKill ^index(β€˜Kamenev’, β€˜Sergey’, 1234567)
TCOMMIT

Π˜Π½Ρ‹ΠΌΠΈ словами Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ трСбования согласованности Π»Π΅ΠΆΠΈΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° ΠΏΠ»Π΅Ρ‡Π°Ρ… программиста. Но ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ Π³Π»ΠΎΠ±Π°Π»Π°Ρ… β€” это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Π² силу ΠΈΡ… Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹.

3. Π˜Π·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ

Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π΄Π΅Π±Ρ€ΠΈ. Много ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°Π΄ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±Π°Π·ΠΎΠΉ, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅.

Битуация сравнима с Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ с ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ измСнСния Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ… сразу.

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Π° это всё Ρ€Π°Π·Ρ€ΡƒΠ»ΠΈΠ²Π°Ρ‚ΡŒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Учитывая, Ρ‡Ρ‚ΠΎ Π² ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Ρ… компаниях Π΅ΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ вСрсий (Π·Π° слияниС Π²Π΅Ρ‚ΠΎΠΊ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈ Ρ‚.ΠΏ), Π° Π‘Π” всё это Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚ΠΎ становится ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ проСктирования Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Ρ‘ обслуТиваСт.

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ смысл дСйствий выполняСмых ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ², Ссли ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°Π΄ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Она ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡Π°Ρ‰ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (Π΄ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°), состояниС Π±Π°Π·Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсогласованным, поэтому ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½Π΅ Π±Ρ‹Π»ΠΎ доступа ΠΊ нСсогласованному ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ достигаСтся Π² рСляционных Π‘Π” ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ способами: созданиС ΡΠ½Π΅ΠΏΡˆΠΎΡ‚ΠΎΠ², ΠΌΠ½ΠΎΠ³ΠΎΠ²Π΅Ρ€ΡΠΈΠΎΠ½Π½ΠΎΡΡ‚ΡŒΡŽ строк ΠΈ Ρ‚.ΠΏ.

ΠŸΡ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ исполнСнии Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½Π°ΠΌ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π½Π΅ мСшали Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ свойство изолированности.

SQL опрСдСляСт 4 уровня изолированности:

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

Рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π—Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ уровня растут Ρ‡ΡƒΡ‚ΡŒ-Π»ΠΈ Π½Π΅ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ.

READ UNCOMMITTED β€” это самый Π½ΠΈΠ·ΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изолированности, Π½ΠΎ ΠΏΡ€ΠΈ этом самый скоростной. Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ измСнСния внСсённыС Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

READ COMMITTED β€” это ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся компромиссом. Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ измСнСния внСсённыС Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π΄ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ измСнСния внСсённыС послС ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

Если Ρƒ нас Π΅ΡΡ‚ΡŒ долгая транзакция Π’1, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΡˆΠ»ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² транзакциях Π’2, Π’3 … Π’n, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‡Ρ‚ΠΎ ΠΈ Π’1, Ρ‚ΠΎ ΠΏΡ€ΠΈ запросС Π΄Π°Π½Π½Ρ‹Ρ… Π² Π’1 ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π­Ρ‚ΠΎΡ‚ Ρ„Π΅Π½ΠΎΠΌΠ΅Π½ называСтся нСповторяСмоС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.

REPEATABLE READ β€” Π² этом ΡƒΡ€ΠΎΠ²Π½Π΅ изоляции Ρƒ нас Π½Π΅Ρ‚ Ρ„Π΅Π½ΠΎΠΌΠ΅Π½Π° нСповторяСмого чтСния, Π·Π° счёт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… создаётся снимок Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ использовании Π² этой ΠΆΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· снимка. Однако Π² этом ΡƒΡ€ΠΎΠ²Π½Π΅ изоляции Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°Π½Ρ‚ΠΎΠΌΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ Π²Π²ΠΈΠ΄Ρƒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ зафиксированными транзакциями.

SERIALIZABLE β€” самый высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции. Он характСризуСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅) становятся доступными Π΄Ρ€ΡƒΠ³ΠΈΠΌ транзакциям Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Для Π½Π°Ρ‡Π°Π»Π° разбСрёмся Π΅ΡΡ‚ΡŒ Π»ΠΈ изоляция ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ основного ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠžΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ 2 ΠΎΠΊΠ½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°.

Kill ^t

Write ^t(1)
2

TSTART
Set ^t(1)=2

Π˜Π·ΠΎΠ»ΡΡ†ΠΈΠΈ Π½Π΅Ρ‚. Один ΠΏΠΎΡ‚ΠΎΠΊ Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Π²ΡˆΠΈΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ видят Π»ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ происходит Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½ΠΈΡ….

ΠžΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ 2 ΠΎΠΊΠ½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ 2 Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.

kill ^t
TSTART
Write ^t(1)
3

TSTART
Set ^t(1)=3

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ видят Π΄Π°Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ самый простой, Π½ΠΎ ΠΈ самый быстрый ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции READ UNCOMMITED.

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ это ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ для Π³Π»ΠΎΠ±Π°Π»ΠΎΠ², для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… быстродСйствиС всСгда ΡΡ‚Π°Π²ΠΈΠ»ΠΎΡΡŒ Π²ΠΎ Π³Π»Π°Π²Ρƒ ΡƒΠ³Π»Π°.

Как ΠΆΠ΅ Π±Ρ‹Ρ‚ΡŒ, Ссли Π½Π°ΠΌ понадобится Π±ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции Π² опСрациях Π½Π° Π³Π»ΠΎΠ±Π°Π»Π°Ρ…?

Π—Π΄Π΅ΡΡŒ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ Π·Π°Ρ‡Π΅ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΡƒΡ€ΠΎΠ²Π½ΠΈ изоляции ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

Π‘Π°ΠΌΡ‹ΠΉ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции SERIALIZE ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ исполняСмых Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ эквивалСнтСн ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ исполнСнию, Ρ‡Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ отсутствиС ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ.

Π’Π°ΠΊΠΎΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Ρ€Π°ΠΌΠΎΡ‚Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π² ObjectScript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ массу Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… способов примСнСния: ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ, ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½ΡƒΡŽ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ LOCK.

Π‘ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠ΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ изоляции β€” это компромиссы ΠΏΡ€ΠΈΠ·Π²Π°Π½Π½Ρ‹Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ изоляции с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.

Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ позволяСт Π±Ρ€Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π½ΡƒΠΆΠ½Ρ‹Π΅ для измСнСния Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ shared, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ сразу нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΠ³Π΄Π° ΠΈΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ процСссами Π² процСссС чтСния.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Π΄Π²ΡƒΡ…Ρ„Π°Π·Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π½Π° русском ΠΈ английском языках:

β†’ Двухфазная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°
β†’ Two-phase locking

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²ΠΎ врСмя Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ состояниС Π±Π°Π·Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсогласованным, ΠΎΠ΄Π½Π°ΠΊΠΎ эти нСсогласованныС Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΈΠ΄Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссам. Как этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ?

ΠœΡ‹ сдСлаСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΊΠ½Π° видимости, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состояниС Π±Π°Π·Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ согласовано. И всС обращСния ΠΊ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠΊΠ½Π°ΠΌ видимости согласованного состояния Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ.

Shared-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ½ΠΎΠ³ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Π΅ β€” ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Π²Π·ΡΡ‚ΡŒ нСсколько процСссов. Π­Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссам ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚.Π΅. ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для формирования ΠΎΠΊΠΎΠ½ согласованного состояния Π‘Π”.

Π­ΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ… β€” Ρ‚Π°ΠΊΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ процСсс. Π­ΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ:

  1. Π›ΡŽΠ±ΠΎΠΉ процСсс, Ссли Π΄Π°Π½Π½Ρ‹Π΅ свободны
  2. Волько Ρ‚ΠΎΡ‚ процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π° эти Π΄Π°Π½Π½Ρ‹Π΅ shared-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ запросил ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ.

Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Π³Π»ΠΎΠ±Π°Π»Π°Ρ… InterSystems IRIS

Π§Π΅ΠΌ ΡƒΠΆΠ΅ ΠΎΠΊΠ½ΠΎ видимости, Ρ‚Π΅ΠΌ дольшС Π΅Π³ΠΎ приходится ΠΆΠ΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссам, Π½ΠΎ Ρ‚Π΅ΠΌ согласованнСС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ состояниС Π‘Π” Π² Π½Ρ‘ΠΌ.

READ_COMMITED β€” ΡΡƒΡ‚ΡŒ этого уровня, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Если Π΄Π°Π½Π½Ρ‹Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½Ρ‹, Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΈΡ… ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ.

Π­Ρ‚ΠΎ позволяСт Π½Π°ΠΌ Ρ€Π°ΡΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ вмСсто оТидания освобоТдСния Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

Π‘Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ…ΠΈΡ‰Ρ€Π΅Π½ΠΈΠΉ ΠΌΡ‹ Π½Π΅ смоТСм Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… Π² IRIS, поэтому Π½Π°ΠΌ придётся ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ.

БоотвСтствСнно Π½Π°ΠΌ придётся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ shared Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ согласованности.

Допустим Ρƒ нас Π΅ΡΡ‚ΡŒ Π±Π°Π·Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ^person, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пСрСводят Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ дСньги.

ΠœΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΎΡ‚ пСрсоны 123 ΠΊ пСрсонС 242:

LOCK +^person(123), +^person(242)
Set ^person(123, amount) = ^person(123, amount) - amount
Set ^person(242, amount) = ^person(242, amount) + amount
LOCK -^person(123), -^person(242)

ΠœΠΎΠΌΠ΅Π½Ρ‚ запроса количСства Π΄Π΅Π½Π΅Π³ Ρƒ пСрсоны 123 ΠΏΠ΅Ρ€Π΅Π΄ списаниСм Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ эксклюзивной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ):

LOCK +^person(123)
Write ^person(123)

А Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ состояниС счёта Π² Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ shared Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π΅Ρ‘ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

LOCK +^person(123)#”S”
Write ^person(123)

Однако, Ссли Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π‘Π” Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ практичСски ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ (напомню, Ρ‡Ρ‚ΠΎ Π³Π»ΠΎΠ±Π°Π»Ρ‹ β€” это Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ низкоуровнСвая структура, Ρ‡Π΅ΠΌ рСляционная Ρ‚Π°Π±Π»ΠΈΡ†Π°), Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ этого уровня ΠΏΠ°Π΄Π°Π΅Ρ‚.

REPEATABLE READ β€” Π² этом ΡƒΡ€ΠΎΠ²Π½Π΅ изоляции допускаСтся, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько Ρ‡Ρ‚Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ транзакциями.

БоотвСтствСнно Π½Π°ΠΌ придётся ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ shared Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ мСняСм ΠΈ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ мСняСм.

Π‘Π»Π°Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ LOCK позволяСт Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ.

LOCK +^person(123, amount)#”S”
Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ^person(123, amount)

Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Π² это врСмя ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ^person(123, amount), Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚)

LOCK +^person(123, amount)
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ^person(123, amount)
LOCK -^person(123, amount)

Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ^person(123, amount)
LOCK -^person(123, amount)#”S”

ΠŸΡ€ΠΈ пСрСчислСнии Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΠΎΠ½ΠΈ бСрутся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π° Ссли ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

LOCK +(^person(123),^person(242))

Ρ‚ΠΎ ΠΎΠ½ΠΈ бСрутся Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ всС сразу.

SERIALIZE β€” Π½Π°ΠΌ придётся Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ всС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Для этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΈ Π±Ρ€Π°Ρ‚ΡŒΡΡ Π½Π° самыС малСнькиС области Π³Π»ΠΎΠ±Π°Π»Π° для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Если ΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ списаниях срСдств Π² Π³Π»ΠΎΠ±Π°Π»Π΅ ^person, Ρ‚ΠΎ для Π½Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции SERIALIZE, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ дСньги Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ строго ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ сумму нСсколько Ρ€Π°Π·.

4. Π”ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ

Π― ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ» тСсты с Тёстким Π²Ρ‹Ρ€ΡƒΠ±Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° посрСдством

docker kill my-iris

Π‘Π°Π·Π° ΠΈΡ… пСрСносила Ρ…ΠΎΡ€ΠΎΡˆΠΎ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π±Ρ‹Π»ΠΎ выявлСно.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Для Π³Π»ΠΎΠ±Π°Π»ΠΎΠ² Π² InterSystems IRIS Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. Они Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅, Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Π΅. Для обСспСчСния ΠΆΠ΅ согласованности Π‘Π” Π½Π° Π³Π»ΠΎΠ±Π°Π»Π°Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ усилия программиста ΠΈ использованиС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π½Π΅ΠΉ Π½Π΅Ρ‚ слоТных встроСнных конструкций Ρ‚ΠΈΠΏΠ° Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ изоляции Ρƒ Π³Π»ΠΎΠ±Π°Π»ΠΎΠ² Π±Π΅Π· использования Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ β€” это READ UNCOMMITED, Π° ΠΏΡ€ΠΈ использовании Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ уровня SERIALIZE.

ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½Π° Π³Π»ΠΎΠ±Π°Π»Π°Ρ… ΠΎΡ‡Π΅Π½ΡŒ сильно зависит ΠΎΡ‚ мастСрства программиста: Ρ‡Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ shared-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции, Π° Ρ‡Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ·ΠΊΠΎ бСрутся ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ‚Π΅ΠΌ большС быстродСйствиС.

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