NewSQL = NoSQL+ACID
Доскоро Π² Odnoklassniki ΠΎΠΊΠΎΠ»ΠΎ 50 TB Π΄Π°Π½Π½ΠΈ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½ΠΈ Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅, сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ…Π° Π² SQL Server. Π—Π° Ρ‚Π°ΠΊΡŠΠ² ΠΎΠ±Π΅ΠΌ Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ нСвъзмоТно Π΄Π° сС осигури Π±ΡŠΡ€Π· ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ ΠΈ Π΄ΠΎΡ€ΠΈ устойчив Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ†Π΅Π½Ρ‚ΡŠΡ€Π° Π·Π° Π΄Π°Π½Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° SQL Π‘Π£Π‘Π”. ОбикновСно Π² Ρ‚Π°ΠΊΠΈΠ²Π° случаи сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΅Π΄Π½ΠΎ ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π° Π½Π° NoSQL, Π½ΠΎ Π½Π΅ всичко ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΎ към NoSQL: някои ΠΎΠ±Π΅ΠΊΡ‚ΠΈ изискват Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π·Π° транзакция Π½Π° ACID.

Π’ΠΎΠ²Π° Π½ΠΈ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° NewSQL ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, тоСст Π‘Π£Π‘Π”, която осигурява толСрантност към Π³Ρ€Π΅ΡˆΠΊΠΈ, мащабируСмост ΠΈ производитСлност Π½Π° NoSQL систСмитС, Π½ΠΎ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π°ΠΏΠ°Π·Π²Π° ACID Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈΡ‚Π΅, ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ Π½Π° класичСскитС систСми. Има ΠΌΠ°Π»ΠΊΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ индустриални систСми ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ Π½ΠΎΠ² клас, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ сами Π²Π½Π΅Π΄Ρ€ΠΈΡ…ΠΌΠ΅ Ρ‚Π°ΠΊΠ°Π²Π° систСма ΠΈ я пуснахмС Π² Ρ‚ΡŠΡ€Π³ΠΎΠ²ΡΠΊΠ° Сксплоатация.

Как Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ сС случи - ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΠΎΠ΄ Ρ€Π°Π·Ρ€Π΅Π·Π°.

ДнСс мСсСчната аудитория Π½Π° Odnoklassniki Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 70 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ посСтитСли. НиС Π²Π»Π΅Π·Π΅ Π² Ρ‡Π΅Π»Π½Π°Ρ‚Π° ΠΏΠ΅Ρ‚ΠΈΡ†Π° Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈΡ‚Π΅ социални ΠΌΡ€Π΅ΠΆΠΈ Π² свСта ΠΈ Π² ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ двадСсСт сайта, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΏΡ€Π΅ΠΊΠ°Ρ€Π²Π°Ρ‚ Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅. Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° β€žOKβ€œ сС справя с ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ натоварвания: Π½Π°Π΄ ΠΌΠΈΠ»ΠΈΠΎΠ½ HTTP заявки/сСк Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚. Части ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€Π½ΠΈΡ ΠΏΠ°Ρ€ΠΊ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 8000 броя са Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ Π±Π»ΠΈΠ·ΠΎ Π΅Π΄Π½Π° Π΄ΠΎ Π΄Ρ€ΡƒΠ³Π° - Π² Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ московски Ρ†Π΅Π½Ρ‚ΡŠΡ€Π° Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява Π΄Π° сС осигури ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎ забавянС ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ 1 ms ΠΌΠ΅ΠΆΠ΄Ρƒ тях.

ИзползвамС Cassandra ΠΎΡ‚ 2010 Π³., Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΉΠΊΠΈ с вСрсия 0.6. ДнСс работят няколко дСсСтки ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. Най-Π±ΡŠΡ€Π·ΠΈΡΡ‚ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Π½Π°Π΄ 4 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² сСкунда, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΉ-голСмият ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° 260 TB.

Π’ΠΎΠ²Π° ΠΎΠ±Π°Ρ‡Π΅ са всички ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ NoSQL ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ слабо ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈ. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° искахмС Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ основното послСдоватСлно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Microsoft SQL Server, ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ‚ основаванСто Π½Π° Odnoklassniki. Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ сС ΡΡŠΡΡ‚ΠΎΠ΅ΡˆΠ΅ ΠΎΡ‚ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 300 машини SQL Server Standard Edition, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ…Π° 50 TB Π΄Π°Π½Π½ΠΈ - бизнСс ΠΎΠ±Π΅ΠΊΡ‚ΠΈ. Π’Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ сС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ изискват висока консистСнция.

Π—Π° Π΄Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π΄Π°Π½Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π½Π° SQL Server, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ ΠΊΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»Π½ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΈ ΠΏΡ€Π΅Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ (ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³). Π’ историчСски ΠΏΠ»Π°Π½ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ проста схСма Π·Π° раздСлянС Π½Π° Π΄Π°Π½Π½ΠΈ: всСки ΠΎΠ±Π΅ΠΊΡ‚ бСшС ΡΠ²ΡŠΡ€Π·Π°Π½ с Ρ‚ΠΎΠΊΠ΅Π½ - функция Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π°. ΠžΠ±Π΅ΠΊΡ‚ΠΈ със ΡΡŠΡ‰ΠΈΡ Ρ‚ΠΎΠΊΠ΅Π½ бяха поставСни Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ SQL ΡΡŠΡ€Π²ΡŠΡ€. Π’Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° Π³Π»Π°Π²Π΅Π½-Π΄Π΅Ρ‚Π°ΠΉΠ» бСшС Π²Π½Π΅Π΄Ρ€Π΅Π½Π° ΠΏΠΎ Ρ‚Π°ΠΊΡŠΠ² Π½Π°Ρ‡ΠΈΠ½, Ρ‡Π΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΈΡ‚Π΅ Π½Π° главния ΠΈ Π΄ΡŠΡ‰Π΅Ρ€Π½ΠΈΡ запис Π²ΠΈΠ½Π°Π³ΠΈ ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‚ ΠΈ сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ ΡΡŠΡ€Π²ΡŠΡ€. Π’ Π΅Π΄Π½Π° социална ΠΌΡ€Π΅ΠΆΠ° ΠΏΠΎΡ‡Ρ‚ΠΈ всички записи сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° потрСбитСля, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ всички потрСбитСлски Π΄Π°Π½Π½ΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π° подсистСма сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ ΡΡŠΡ€Π²ΡŠΡ€. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π΅Π΄Π½Π° бизнСс транзакция ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π²Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ SQL ΡΡŠΡ€Π²ΡŠΡ€, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ възмоТно осигуряванСто Π½Π° ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½ΠΎΡΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π±Π΅Π· Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π±Π°Π²Π΅Π½ ΠΈ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³Π° ΠΈ Π·Π° ускоряванС Π½Π° SQL:

  • НиС Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ограничСния Π½Π° външСн ΠΊΠ»ΡŽΡ‡, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈ ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³ идСнтификационният Π½ΠΎΠΌΠ΅Ρ€ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π½Π° Π΄Ρ€ΡƒΠ³ ΡΡŠΡ€Π²ΡŠΡ€.
  • НС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈ ΠΈ Ρ‚Ρ€ΠΈΠ³Π΅Ρ€ΠΈ ΠΏΠΎΡ€Π°Π΄ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° процСсора Π½Π° Π‘Π£Π‘Π”.
  • НиС Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ JOIN ΠΏΠΎΡ€Π°Π΄ΠΈ всичко ΠΏΠΎ-Π³ΠΎΡ€Π΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ чСтСния ΠΎΡ‚ диск.
  • Извън транзакция Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° изолация Read Uncommitted, Π·Π° Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ блокиранията.
  • НиС изпълнявамС само ΠΊΡ€Π°Ρ‚ΠΊΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ 100ms срСдно).
  • НиС Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡ€Π΅Π΄ΠΎΠ²ΠΈ UPDATE ΠΈ DELETE ΠΏΠΎΡ€Π°Π΄ΠΈ голям Π±Ρ€ΠΎΠΉ блокирания - Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ само Π΅Π΄ΠΈΠ½ запис навСднъТ.
  • ЗаявкитС Π²ΠΈΠ½Π°Π³ΠΈ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ само ΠΎΡ‚ индСкси - заявка с пълСн ΠΏΠ»Π°Π½ Π·Π° сканиранС Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π·Π° нас ΠΏΡ€Π΅Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ нСйния ΠΎΡ‚ΠΊΠ°Π·.

Π’Π΅Π·ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ…Π° Π΄Π° изстискамС ΠΏΠΎΡ‡Ρ‚ΠΈ максималната производитСлност ΠΎΡ‚ SQL ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ ΠΎΠ±Π°Ρ‡Π΅ ставаха всС ΠΏΠΎΠ²Π΅Ρ‡Π΅. НСка Π΄Π° Π³ΠΈ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ със SQL

  • Въй ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ самонаписано ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³, добавянСто Π½Π° Π½ΠΎΠ²ΠΈ ΡˆΠ°Ρ€Π΄ΠΎΠ²Π΅ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΡˆΠ΅ Ρ€ΡŠΡ‡Π½ΠΎ ΠΎΡ‚ администраторитС. ΠŸΡ€Π΅Π· цялото Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΈΡ‚Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ Π½Π΅ са обслуТвали заявки.
  • Въй ΠΊΠ°Ρ‚ΠΎ броят Π½Π° записитС Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° растС, скоростта Π½Π° вмъкванС ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ намалява, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС добавят индСкси към ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°, скоростта ΠΏΠ°Π΄Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ, ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ създаванС Π½Π° индСкси ΠΎΡ‚Π½Π΅ΠΌΠ° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° прСстой.
  • НаличиСто Π½Π° ΠΌΠ°Π»ΠΊΠΎ количСство Windows Π·Π° SQL Server Π² производство затруднява ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° инфраструктурата

Но основният ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅

отказоустойчивост

ΠšΠ»Π°ΡΠΈΡ‡Π΅ΡΠΊΠΈΡΡ‚ SQL Server ΠΈΠΌΠ° лоша толСрантност към Π³Ρ€Π΅ΡˆΠΊΠΈ. Π”Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ΠΌ, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ само Π΅Π΄ΠΈΠ½ ΡΡŠΡ€Π²ΡŠΡ€ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ Ρ‚ΠΎΠΉ сС проваля Π½Π° всСки Ρ‚Ρ€ΠΈ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. По Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ ΡΠ°ΠΉΡ‚ΡŠΡ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π·Π° 20 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΎ. Ако ΠΈΠΌΠ°Ρ‚Π΅ 64 ΡΡŠΡ€Π²ΡŠΡ€Π°, Ρ‚ΠΎΠ³Π°Π²Π° ΡΠ°ΠΉΡ‚ΡŠΡ‚ спира вСднъТ Π½Π° всСки Ρ‚Ρ€ΠΈ сСдмици. И Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ 200 ΡΡŠΡ€Π²ΡŠΡ€Π°, Ρ‚ΠΎΠ³Π°Π²Π° ΡΠ°ΠΉΡ‚ΡŠΡ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ всяка сСдмица. Π’ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Какво ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ, Π·Π° Π΄Π° сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ устойчивостта Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π½Π° SQL ΡΡŠΡ€Π²ΡŠΡ€Π°? УикипСдия Π½ΠΈ ΠΊΠ°Π½ΠΈ Π΄Π° строим ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ с висока Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚: ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π² случай Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° някой ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ° Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅.

Π’ΠΎΠ²Π° изисква Ρ„Π»ΠΎΡ‚ ΠΎΡ‚ скъпо ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅: мноТСство Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½ΠΈ, ΠΎΠΏΡ‚ΠΈΡ‡Π½ΠΈ Π²Π»Π°ΠΊΠ½Π°, сподСлСно ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎ: ΠΎΠΊΠΎΠ»ΠΎ 10% ΠΎΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡΡ‚Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ с ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° рСзСрвния възСл с Π²Π»Π°ΠΊ Π·Π°Π΄ главния възСл.

Но основният Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ Π½Π° Ρ‚Π°ΠΊΡŠΠ² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ с висока Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΎΡΡ‚ Π΅ Π½ΡƒΠ»Π΅Π²Π°Ρ‚Π° наличност Π² случай Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° Ρ†Π΅Π½Ρ‚ΡŠΡ€Π° Π·Π° Π΄Π°Π½Π½ΠΈ, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС Π½Π°ΠΌΠΈΡ€Π°. Odnoklassniki ΠΈΠΌΠ° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Ρ†Π΅Π½Ρ‚ΡŠΡ€Π° Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π½ΠΈΠ΅ трябва Π΄Π° осигурим Ρ€Π°Π±ΠΎΡ‚Π° Π² Π΅Π΄ΠΈΠ½ ΠΎΡ‚ тях Π² случай Π½Π° пълна ΠΏΠΎΠ²Ρ€Π΅Π΄Π°.

Π—Π° Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Multi Master рСпликация, Π²Π³Ρ€Π°Π΄Π΅Π½Π° Π² SQL Server. Π’ΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-скъпо ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ†Π΅Π½Π°Ρ‚Π° Π½Π° софтуСра ΠΈ страда ΠΎΡ‚ Π΄ΠΎΠ±Ρ€Π΅ извСстни ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с рСпликацията - Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ΠΈΠΌΠΈ забавяния Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΏΡ€ΠΈ синхронна рСпликация ΠΈ забавяния ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° рСпликация (ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° Π·Π°Π³ΡƒΠ±Π΅Π½ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ) ΠΏΡ€ΠΈ асинхронна. ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π° сС Ρ€ΡŠΡ‡Π½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈ Ρ‚Π°Π·ΠΈ опция напълно Π½Π΅ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌΠ° Π·Π° нас.

Всички Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ изискваха ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈ Π½ΠΈΠ΅ ΠΏΡ€ΠΈΡΡ‚ΡŠΠΏΠΈΡ…ΠΌΠ΅ към тСхния ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π΅Π½ Π°Π½Π°Π»ΠΈΠ·. Π’ΡƒΠΊ трябва Π΄Π° сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΠΌ с Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ основно ΠΏΡ€Π°Π²ΠΈ SQL Server – Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅.

ΠŸΡ€ΠΎΡΡ‚Π° транзакция

ΠŸΠΎΠΌΠΈΡΠ»Π΅Ρ‚Π΅ Π·Π° Π½Π°ΠΉ-простата транзакция ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ SQL програмист: добавянС Π½Π° снимка към Π°Π»Π±ΡƒΠΌ. АлбумитС ΠΈ снимкитС сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚Π°Π±Π΅Π»ΠΈ. ΠΠ»Π±ΡƒΠΌΡŠΡ‚ ΠΈΠΌΠ° ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ брояч Π½Π° снимки. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‚Π°ΠΊΠ°Π²Π° транзакция сС раздСля Π½Π° слСднитС ΡΡ‚ΡŠΠΏΠΊΠΈ:

  1. Π‘Π»ΠΎΠΊΠΈΡ€Π°ΠΌΠ΅ Π°Π»Π±ΡƒΠΌΠ° ΠΏΠΎ ΠΊΠ»ΡŽΡ‡.
  2. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ запис Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° със снимки.
  3. Ако снимката ΠΈΠΌΠ° ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ статус, Ρ‚ΠΎΠ³Π°Π²Π° затварямС брояча Π½Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ снимки Π² Π°Π»Π±ΡƒΠΌΠ°, Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ записа ΠΈ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ транзакцията.

Или в псСвдокод:

TX.start("Albums", id);
Album album = albums.lock(id);
Photo photo = photos.create(…);

if (photo.status == PUBLIC ) {
    album.incPublicPhotosCount();
}
album.update();

TX.commit();

Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ Π½Π°ΠΉ-чСсто срСщаният сцСнарий Π·Π° бизнСс транзакция Π΅ Π΄Π° сС ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π°Ρ‚ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π½Π° прилоТСния, Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π½Π΅Ρ‰ΠΎ ΠΈ Π΄Π° сС Π·Π°ΠΏΠΈΡˆΠ°Ρ‚ Π½ΠΎΠ²ΠΈΡ‚Π΅ стойности ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. ОбикновСно ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠ°Π²Π° транзакция обновявамС няколко ΠΎΠ±Π΅ΠΊΡ‚Π°, няколко Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ.

ΠšΠΎΠ³Π°Ρ‚ΠΎ сС изпълнява транзакция, ΠΌΠΎΠΆΠ΅ Π΄Π° възникнС Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Π° модификация Π½Π° ΡΡŠΡ‰ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° систСма. НапримСр, Antispam ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π΅ΡˆΠΈ, Ρ‡Π΅ потрСбитСлят Π΅ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ ΠΏΠΎ някакъв Π½Π°Ρ‡ΠΈΠ½ ΠΈ слСдоватСлно всички снимки Π½Π° потрСбитСля Π²Π΅Ρ‡Π΅ Π½Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΈ, Ρ‚Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ Π·Π° ΠΌΠΎΠ΄Π΅Ρ€ΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° промяна Π½Π° photo.status Π½Π° Π΄Ρ€ΡƒΠ³Π° стойност ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ броячи. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π°ΠΊΠΎ Ρ‚Π°Π·ΠΈ опСрация Ρ‰Π΅ сС случи Π±Π΅Π· Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ Π·Π° атомарност Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€Π°Ρ‰ΠΈ сС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ Π² ACID, Ρ‚ΠΎΠ³Π°Π²Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ няма Π΄Π° бъдС Ρ‚ΠΎΠ²Π°, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅ - ΠΈΠ»ΠΈ Π±Ρ€ΠΎΡΡ‡ΡŠΡ‚ Π½Π° снимкитС Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π³Ρ€Π΅ΡˆΠ½Π° стойност, ΠΈΠ»ΠΈ Π½Π΅ всички снимки Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ Π·Π° ΠΌΠΎΠ΄Π΅Ρ€ΠΈΡ€Π°Π½Π΅.

По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Odnoklassniki Π΅ написан ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΡŠΠ² ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ бизнСс ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄Π½Π° транзакция. Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΎΠΏΠΈΡ‚Π° ΠΎΡ‚ миграцията към NoSQL с ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎΡΡ‚ Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π° Π½ΠΈΠ΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Π΅ Π½Π°ΠΉ-голямото прСдизвикатСлство (ΠΈ ΠΎΡ‚Π½Π΅ΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅) Π΅ нСобходимостта ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π·Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° послСдоватСлност Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅. Π—Π°Ρ‚ΠΎΠ²Π° считамС, Ρ‡Π΅ основното изискванС Π·Π° Π½ΠΎΠ²ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΅ осигуряванСто Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π΅Π°Π»Π½ΠΈ ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π”Ρ€ΡƒΠ³ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π²Π°ΠΆΠ½ΠΈ изисквания бяха:

  • Π’ случай Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π² Ρ†Π΅Π½Ρ‚ΡŠΡ€Π° Π·Π° Π΄Π°Π½Π½ΠΈ трябва Π΄Π° ΠΈΠΌΠ° Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΊΠ°ΠΊΡ‚ΠΎ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, Ρ‚Π°ΠΊΠ° ΠΈ Π·Π° запис Π² Π½ΠΎΠ²ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
  • Π—Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π³Π°ΡˆΠ½Π°Ρ‚Π° скорост Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅. ВоСст, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ с Π½ΠΎΠ²ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, количСството ΠΊΠΎΠ΄ трябва Π΄Π° бъдС ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ ΡΡŠΡ‰ΠΎΡ‚ΠΎ, Π½Π΅ трябва Π΄Π° ΠΈΠΌΠ° Π½ΡƒΠΆΠ΄Π° Π΄Π° добавятС Π½Π΅Ρ‰ΠΎ към Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΈ индСкси ΠΈ Ρ‚.Π½.
  • Бкоростта Π½Π° Π½ΠΎΠ²ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ трябва Π΄Π° Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ висока, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈ Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡ‡Π½ΠΎ строги, с ΠΎΠ±Ρ‰ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ Π±Π°Π²Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€. Π΄Π²ΡƒΡ„Π°Π·ΠΎΠ²ΠΈ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ΠΈ.
  • Автоматично ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅.
  • Използвайки ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ Π΅Π²Ρ‚ΠΈΠ½ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, Π±Π΅Π· Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΊΡƒΠΏΡƒΠ²Π°Ρ‚Π΅ Π΅ΠΊΠ·ΠΎΡ‚ΠΈΡ‡Π½ΠΈ ΠΆΠ΅Π»Π΅Π·Π°.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π½Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° компанията. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, бСшС Π΄Π°Π΄Π΅Π½ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π° ΠΏΠ°Ρ‚Π΅Π½Ρ‚ΠΎΠ²Π°Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄, Π·Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½Π΅ Π² Java.

РСшСния, Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Анализирайки Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, стигнахмС Π΄ΠΎ Π΄Π²Π° възмоТни Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°:

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ всСки SQL ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°Ρ‚Π° толСрантност към Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅, ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈΡ€Π°Π½Π΅ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ°Π·, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ ΠΈ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ, Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈ ΠΈ Π±ΡŠΡ€Π·ΠΈ ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. НиС ΠΎΡ†Π΅Π½ΠΈΡ…ΠΌΠ΅ Ρ‚Π°Π·ΠΈ опция ΠΊΠ°Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½Π° ΠΈ ΠΎΡ‚Π½Π΅ΠΌΠ°Ρ‰Π° Π²Ρ€Π΅ΠΌΠ΅.

Вторият Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ NoSQL Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ с Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅, failover clustering, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ ΠΈ сами Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ SQL. На ΠΏΡ€ΡŠΠ² ΠΏΠΎΠ³Π»Π΅Π΄ Π΄ΠΎΡ€ΠΈ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π·Π° внСдряванС Π½Π° SQL, Π΄Π° Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅, ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° ΠΎΡ‚ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. Но Ρ‚ΠΎΠ³Π°Π²Π° ΠΎΡΡŠΠ·Π½Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ Π½Π°Π±ΠΎΡ€ΡŠΡ‚ ΠΎΡ‚ SQL Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π΄Π°Π»Π΅Ρ‡ ΠΎΡ‚ ANSI SQL ΠšΠ°ΡΠ°Π½Π΄Ρ€Π° CQL Π΄Π°Π»Π΅Ρ‡ ΠΎΡ‚ ANSI SQL. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ ΠΏΠΎ-ΠΎΡ‚Π±Π»ΠΈΠ·ΠΎ CQL, Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ Ρ‚ΠΎΠ²Π°, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ.

ΠšΠ°ΡΠ°Π½Π΄Ρ€Π° ΠΈ CQL

И Ρ‚Π°ΠΊΠ°, ΠΊΠ°ΠΊΠ²ΠΎ Π΅ интСрСсно Π·Π° ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°, ΠΊΠ°ΠΊΠ²ΠΈ характСристики ΠΈΠΌΠ°?

ΠŸΡŠΡ€Π²ΠΎ, Ρ‚ΡƒΠΊ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ SELECT ΠΈΠ»ΠΈ UPDATE Ρ‡Ρ€Π΅Π· ΠΏΡŠΡ€Π²ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡.

CREATE TABLE photos (id bigint KEY, owner bigint,…);
SELECT * FROM photos WHERE id=?;
UPDATE photos SET … WHERE id=?;

Π—Π° Π΄Π° осигури ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½ΠΎΡΡ‚ Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ‚Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, Cassandra ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ²ΠΎΡ€ΡƒΠΌΠ΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. Π’ Π½Π°ΠΉ-простия случай Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΏΡ€ΠΈ поставянС Π½Π° Ρ‚Ρ€ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ Ρ€Π΅Π΄ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ възли Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, Π·Π°ΠΏΠΈΡΡŠΡ‚ сС счита Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ΅Π½, Π°ΠΊΠΎ ΠΏΠΎ-голямата част ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ (Ρ‚.Π΅. Π΄Π²Π° ΠΎΡ‚ Ρ‚Ρ€ΠΈ) ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄ΠΈΡ…Π° успСха Π½Π° Ρ‚Π°Π·ΠΈ опСрация Π·Π° запис. Π”Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ сСрия сС считат Π·Π° послСдоватСлни, Π°ΠΊΠΎ ΠΏΡ€ΠΈ Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ са Π°Π½ΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½ΠΈ ΠΈ са Π³ΠΈ ΠΏΠΎΡ‚Π²ΡŠΡ€Π΄ΠΈΠ»ΠΈ. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, Π°ΠΊΠΎ ΠΈΠΌΠ° Ρ‚Ρ€ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, ΠΏΡŠΠ»Π½Π°Ρ‚Π° ΠΈ Π½Π΅Π·Π°Π±Π°Π²Π½Π° ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½ΠΎΡΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π°, Π°ΠΊΠΎ Π΅Π΄ΠΈΠ½ възСл сС ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈ. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ ΠΎΡ‰Π΅ ΠΏΠΎ-Π½Π°Π΄Π΅ΠΆΠ΄Π½Π° схСма: Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΉΡ‚Π΅ заявки Π΄ΠΎ Ρ‚Ρ€ΠΈΡ‚Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, Ρ‡Π°ΠΊΠ°ΠΉΠΊΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΎΡ‚ Π΄Π²Π΅Ρ‚Π΅ Π½Π°ΠΉ-Π±ΡŠΡ€Π·ΠΈ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΊΡŠΡΠ½ΠΈΡΡ‚ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° Ρ‚Ρ€Π΅Ρ‚Π°Ρ‚Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° сС ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Ρ. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ възСл, ΠΊΠΎΠΉΡ‚ΠΎ закъснява с ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° сСриозни ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ - спирачки, ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ Π² JVM, Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π² ядрото Π½Π° linux, Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π΅Π½ срив, ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° с ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΠ±Π°Ρ‡Π΅ Π½Π΅ са засСгнати ΠΏΠΎ никакъв Π½Π°Ρ‡ΠΈΠ½.

Извиква сС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ‚Ρ€ΠΈ възСла ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΎΡ‚ Π΄Π²Π° спСкулация: ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° сС заявка Π·Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° "ΠΏΠ°Π΄Π½Π΅".

Π”Ρ€ΡƒΠ³ΠΎ прСдимство Π½Π° Cassandra Π΅ Batchlog, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, са напълно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΈΠ»ΠΈ Π½Π΅ напълно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ към ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π’ΠΎΠ²Π° Π½ΠΈ позволява Π΄Π° Ρ€Π΅ΡˆΠΈΠΌ А Π² ACID - атомарност извън кутията.

Най-Π±Π»ΠΈΠ·ΠΊΠΎΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ Π΄ΠΎ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² ΠšΠ°ΡΠ°Π½Π΄Ρ€Π° Π΅ Ρ‚.Π½Π°Ρ€. "Π»Π΅ΠΊΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ". Но Ρ‚Π΅ са Π΄Π°Π»Π΅Ρ‡ ΠΎΡ‚ β€žΠΈΡΡ‚ΠΈΠ½ΡΠΊΠΈβ€œ ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ: Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‚ΠΎΠ²Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ CAS Π²ΡŠΡ€Ρ…Ρƒ Π΄Π°Π½Π½ΠΈΡ‚Π΅ само Π½Π° Π΅Π΄ΠΈΠ½ запис, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ консСнсуса Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Π·Π° Ρ‚Π΅ΠΆΠΊΠ° катСгория Paxos. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ скоростта Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΅ ниска.

Какво пропуснахмС Π² ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°

И Ρ‚Π°ΠΊΠ°, Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΠΌ истински ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² Cassandra. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Π±ΠΈΡ…ΠΌΠ΅ ΠΌΠΎΠ³Π»ΠΈ лСсно Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΠΌ Π΄Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° класичСската Π‘Π£Π‘Π”: послСдоватСлни Π±ΡŠΡ€Π·ΠΈ индСкси, ΠΊΠΎΠΈΡ‚ΠΎ Π±ΠΈΡ…Π° Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ Π½Π΅ само Ρ‡Ρ€Π΅Π· ΠΏΡŠΡ€Π²ΠΈΡ‡Π½ΠΈΡ ΠΊΠ»ΡŽΡ‡, ΠΈ обичайния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ с Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ нарастванС.

C*One

Π’Π°ΠΊΠ° сС Ρ€ΠΎΠ΄ΠΈ Π½ΠΎΠ²Π°Ρ‚Π° Π‘Π£Π‘Π” C*One, ΡΡŠΡΡ‚ΠΎΡΡ‰ сС ΠΎΡ‚ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΡΡŠΡ€Π²ΡŠΡ€Π½ΠΈ възли:

  • Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π° са (ΠΏΠΎΡ‡Ρ‚ΠΈ) стандартни ΡΡŠΡ€Π²ΡŠΡ€ΠΈ Π½Π° Cassandra, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ дисковС. Π‘ нарастванСто Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ ΠΎΠ±Π΅ΠΌΠ° Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ тСхният Π±Ρ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅ лСсно Π΄Π° сС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ Π΄ΠΎ дСсСтки ΠΈ стотици.
  • Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΈ – осигуряват ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅.
  • ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ са ΡΡŠΡ€Π²ΡŠΡ€ΠΈ Π½Π° прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ бизнСс ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π°Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. МоТС Π΄Π° ΠΈΠΌΠ° хиляди Ρ‚Π°ΠΊΠΈΠ²Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ.

NewSQL = NoSQL+ACID

Π‘ΡŠΡ€Π²ΡŠΡ€ΠΈ ΠΎΡ‚ всички Π²ΠΈΠ΄ΠΎΠ²Π΅ са Π² ΠΎΠ±Ρ‰ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π½Π° Cassandra, Π·Π° Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠΈΡ€Π°Ρ‚ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си ΠΈ клюка Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π½Π° информация. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Heartbeat ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ Π½Π°ΡƒΡ‡Π°Π²Π°Ρ‚ Π·Π° Π²Π·Π°ΠΈΠΌΠ½ΠΈ ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈ, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Π΅Π΄ΠΈΠ½Π½Π° схСма Π½Π° Π΄Π°Π½Π½ΠΈ - Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, тяхната структура ΠΈ рСпликация; схСма Π½Π° раздСлянС, ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π½Π° топология ΠΈ Π΄Ρ€.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅

NewSQL = NoSQL+ACID

ВмСсто стандартнитС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ€Π΅ΠΆΠΈΠΌ Fat Client. Вакъв възСл Π½Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° дСйства ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ Π·Π° изпълнСниС Π½Π° заявка, Ρ‚.Π΅. самият ΠΊΠ»ΠΈΠ΅Π½Ρ‚ дСйства ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ Π½Π° своитС заявки: Ρ‚ΠΎΠΉ провСрява Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ. Π’ΠΎΠ²Π° Π΅ Π½Π΅ само ΠΏΠΎ-Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎ ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ ΠΎΡ‚ стандартния Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ изисква комуникация с ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€, Π½ΠΎ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π²ΠΈ позволява Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° заявки. Извън транзакция, ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, заявкитС сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ Π΄ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π°. Ако ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π΅ ΠΎΡ‚Π²ΠΎΡ€ΠΈΠ» транзакция, Ρ‚ΠΎΠ³Π°Π²Π° всички заявки Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° транзакцията сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ Π΄ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° Π½Π° транзакцията.
NewSQL = NoSQL+ACID

C*One Transaction Coordinator

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π΅ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²Π½Π΅Π΄Ρ€ΠΈΡ…ΠΌΠ΅ Π·Π° C*One ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°. Π’ΠΎΠΉ отговаря Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅, Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡΡ‚Π° ΠΈ Ρ€Π΅Π΄Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅.

Π—Π° всяка обслуТвана транзакция ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π²Ρ€Π΅ΠΌΠ΅Π²Π° ΠΌΠ°Ρ€ΠΊΠ°: всяка слСдваща Π΅ ΠΏΠΎ-голяма ΠΎΡ‚ Ρ‚Π°Π·ΠΈ Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° транзакция. Въй ΠΊΠ°Ρ‚ΠΎ систСмата Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ Π² Cassandra сС основава Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΊΠ»Π΅ΠΉΠΌΠ° (Π½Π° Π΄Π²Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π½ΠΈ записа, послСдният Π²Ρ€Π΅ΠΌΠ΅Π²ΠΈ ΠΊΠ»Π΅ΠΉΠΌΠΎ сС счита Π·Π° Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π΅Π½), ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡŠΡ‚ Π²ΠΈΠ½Π°Π³ΠΈ Ρ‰Π΅ бъдС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Π² ΠΏΠΎΠ»Π·Π° Π½Π° послСдващата транзакция. Π’Π°ΠΊΠ° Π²Π½Π΅Π΄Ρ€ΠΈΡ…ΠΌΠ΅ часовник Lamport Π΅ Π΅Π²Ρ‚ΠΈΠ½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ Π² Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° систСма.

Π‘Ρ€Π°Π²ΠΈ

Π—Π° Π΄Π° осигурим изолация, Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½Π°ΠΉ-лСсния Π½Π°Ρ‡ΠΈΠ½ - пСсимистични ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ‡Π½ΠΈΡ ΠΊΠ»ΡŽΡ‡ Π½Π° записа. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, ΠΏΡ€ΠΈ транзакция Π·Π°ΠΏΠΈΡΡŠΡ‚ трябва ΠΏΡŠΡ€Π²ΠΎ Π΄Π° бъдС Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½, Π΅Π΄Π²Π° слСд Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ ΠΈ Π·Π°ΠΏΠ°Π·Π΅Π½. Π‘Π°ΠΌΠΎ слСд ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° запис ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚.

ВнСдряванСто Π½Π° Ρ‚Π°ΠΊΠΎΠ²Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π΅ лСсно Π² Π½Π΅Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° срСда. Π’ Π΅Π΄Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° систСма ΠΈΠΌΠ° Π΄Π²Π° основни Π½Π°Ρ‡ΠΈΠ½Π°: ΠΈΠ»ΠΈ Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, ΠΈΠ»ΠΈ Π΄Π° сС разпрСдСлят Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ΠΈ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ запис, Π²ΠΈΠ½Π°Π³ΠΈ Π΄Π° сС обслуТват ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€.

Въй ΠΊΠ°Ρ‚ΠΎ Π² нашия случай Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π²Π΅Ρ‡Π΅ са Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π³Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»Π½ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² SQL, бСшС Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄Π° сС присвоят Π³Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»Π½ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅: Π΅Π΄ΠΈΠ½ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° всички Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ с Ρ‚ΠΎΠΊΠ΅Π½ ΠΎΡ‚ 0 Π΄ΠΎ 9, вторият - с Ρ‚ΠΎΠΊΠ΅Π½ ΠΎΡ‚ 10 Π΄ΠΎ 19 ΠΈ Ρ‚.Π½. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° всСки ΠΎΡ‚ СкзСмпляритС Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° става Π³Π»Π°Π²Π΅Π½ Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

Π’ΠΎΠ³Π°Π²Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡΡ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ Π±Π°Π½Π°Π»Π½Π° HashMap Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°.

ΠžΡ‚ΠΊΠ°Π·ΠΈ Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΈ

Въй ΠΊΠ°Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ обслуТва ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π³Ρ€ΡƒΠΏΠ° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½ΠΎ Π±ΡŠΡ€Π·ΠΎ Π΄Π° сС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ Ρ„Π°ΠΊΡ‚ΡŠΡ‚ Π½Π° нСговия нСуспСх, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ повторният ΠΎΠΏΠΈΡ‚ Π·Π° изпълнСниС Π½Π° транзакцията Π΄Π° Π΅ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π° Π±ΡŠΡ€Π·ΠΎ ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ напълно ΡΠ²ΡŠΡ€Π·Π°Π½ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π·Π° ΡΠ»ΡƒΡˆΠ°Π½Π΅ Π½Π° ΠΊΠ²ΠΎΡ€ΡƒΠΌ:

ВсСки Ρ†Π΅Π½Ρ‚ΡŠΡ€ Π·Π° Π΄Π°Π½Π½ΠΈ хоства ΠΏΠΎΠ½Π΅ Π΄Π²Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ възСла. ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ всСки ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΡΡŠΡ€Π΄Π΅Ρ‡Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π΄ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ Π³ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€Π° Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ си, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΊΠΎΠ³Π° Π·Π° послСдСн ΠΏΡŠΡ‚ Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΡΡŠΡ€Π΄Π΅Ρ‡Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΊΠΎΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΈ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°.

NewSQL = NoSQL+ACID

ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΉΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° информация ΠΎΡ‚ останалитС ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ ΡΡŠΡ€Π΄Π΅Ρ‡Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, всСки ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ Ρ€Π΅ΡˆΠ°Π²Π° Π·Π° сСбС си ΠΊΠΎΠΈ възли Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Ρ‚ ΠΈ ΠΊΠΎΠΈ Π½Π΅, Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄Π΅ΠΉΠΊΠΈ сС ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π½Π° ΠΊΠ²ΠΎΡ€ΡƒΠΌΠ°: Π°ΠΊΠΎ възСл X ΠΏΠΎΠ»ΡƒΡ‡ΠΈ информация ΠΎΡ‚ ΠΏΠΎ-голямата част ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π·Π° Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ възСл Y, Ρ‚ΠΎΠ³Π°Π²Π° , Y Ρ€Π°Π±ΠΎΡ‚ΠΈ. ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎ, Π²Π΅Π΄Π½Π°Π³Π° Ρ‰ΠΎΠΌ мнозинството ΡΡŠΠΎΠ±Ρ‰ΠΈ Π·Π° липсващи ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ възСл Y, Ρ‚ΠΎΠ³Π°Π²Π° Y Π΅ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ. Π›ΡŽΠ±ΠΎΠΏΠΈΡ‚Π½ΠΎ Π΅, Ρ‡Π΅ Π°ΠΊΠΎ ΠΊΠ²ΠΎΡ€ΡƒΠΌΡŠΡ‚ ΠΊΠ°ΠΆΠ΅ Π½Π° възСл X, Ρ‡Π΅ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ Π½Π΅Π³ΠΎ, Ρ‚ΠΎΠ³Π°Π²Π° самият възСл X Ρ‰Π΅ сС счита Π·Π° Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ΅Π½.

Π‘ΡŠΡ€Π΄Π΅Ρ‡Π½ΠΈΡ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ с висока чСстота, ΠΎΠΊΠΎΠ»ΠΎ 20 ΠΏΡŠΡ‚ΠΈ Π² сСкунда, с ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΡ‚ 50 ms. Π’ Java Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° 50 ms ΠΏΠΎΡ€Π°Π΄ΠΈ сравними Π²Ρ€Π΅ΠΌΠ΅Π½Π° Π½Π° ΠΏΠ°ΡƒΠ·Π°, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ΠΈ ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ€Π°Ρ‡Π° Π½Π° ΠΎΡ‚ΠΏΠ°Π΄ΡŠΡ†ΠΈ. УспяхмС Π΄Π° постигнСм Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ Π·Π° рСакция, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ G1 ΡΡŠΠ±ΠΈΡ€Π°Ρ‡Π° Π½Π° ΠΎΡ‚ΠΏΠ°Π΄ΡŠΡ†ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° посочитС Ρ†Π΅Π» Π·Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° GC ΠΏΠ°ΡƒΠ·ΠΈΡ‚Π΅. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, понякога, доста рядко, ΠΏΠ°ΡƒΠ·ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€Π° Π½Π°Π΄Ρ…Π²ΡŠΡ€Π»ΡΡ‚ 50 ms, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Ρ„Π°Π»ΡˆΠΈΠ²ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π°. Π—Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π΅ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π΅ ΡΡŠΠΎΠ±Ρ‰Π°Π²Π° Π·Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° отдалСчСния възСл, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ ΡΡŠΡ€Π΄Π΅Ρ‡Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Π½Π΅Π³ΠΎ Π΅ Π·Π°Π³ΡƒΠ±Π΅Π½ΠΎ, само Π°ΠΊΠΎ липсват няколко ΠΏΠΎΠ΄Ρ€Π΅Π΄.Π’Π°ΠΊΠ° успяхмС Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ΠΌ ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° координационния възСл Π·Π° 200 ms.

Но Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π±ΡŠΡ€Π·ΠΎ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠΎΠΉ възСл Π΅ прСстанал Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°. Врябва Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Π½Π΅Ρ‰ΠΎ ΠΏΠΎ Π²ΡŠΠΏΡ€ΠΎΡΠ°.

Π Π΅Π·Π΅Ρ€Π²ΠΈΡ€Π°Π½Π΅

ΠšΠ»Π°ΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ‚Π° схСма ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°, Ρ‡Π΅ Π² случай Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° ΠΊΠ°ΠΏΠΈΡ‚Π°Π½Π° Π΄Π° стартира ΠΈΠ·Π±ΠΎΡ€Π° Π½Π° Π½ΠΎΠ², ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Ρ€Π΅Π½ унивСрсалСн Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ. Π’Π°ΠΊΠΈΠ²Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ ΠΎΠ±Π°Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚ Π΄ΠΎΠ±Ρ€Π΅ извСстни ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с конвСргСнцията във Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° самия ΠΈΠ·Π±ΠΎΡ€Π΅Π½ процСс. УспяхмС Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΠΌ Ρ‚Π°ΠΊΠΈΠ²Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ забавяния, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ схСмата Π·Π° подмяна Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ Π² напълно ΡΠ²ΡŠΡ€Π·Π°Π½Π° ΠΌΡ€Π΅ΠΆΠ°:

NewSQL = NoSQL+ACID

Π”Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ΠΌ, Ρ‡Π΅ искамС Π΄Π° изпълним транзакция Π² Π³Ρ€ΡƒΠΏΠ° 50. НСка ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ схСма Π·Π° замСстванС, тоСст ΠΊΠΎΠΈ възли Ρ‰Π΅ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ Π³Ρ€ΡƒΠΏΠ° 50 Π² случай Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° главния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€. ΠΠ°ΡˆΠ°Ρ‚Π° Ρ†Π΅Π» Π΅ Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΌΠ΅ систСмата Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° Π² случай Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π² Ρ†Π΅Π½Ρ‚ΡŠΡ€Π° Π·Π° Π΄Π°Π½Π½ΠΈ. НСка Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅, Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ Ρ€Π΅Π·Π΅Ρ€Π² Ρ‰Π΅ бъдС възСл ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ Ρ†Π΅Π½Ρ‚ΡŠΡ€ Π·Π° Π΄Π°Π½Π½ΠΈ, Π° вторият Ρ€Π΅Π·Π΅Ρ€Π² Ρ‰Π΅ бъдС възСл ΠΎΡ‚ трСтия. Π’Π°Π·ΠΈ схСма сС ΠΈΠ·Π±ΠΈΡ€Π° вСднъТ ΠΈ Π½Π΅ сС промСня, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ топологията Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π½Π΅ сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, тоСст Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π² Π½Π΅Π³ΠΎ Π½Π΅ влязат Π½ΠΎΠ²ΠΈ възли (ΠΊΠΎΠ΅Ρ‚ΠΎ сС случва ΠΌΠ½ΠΎΠ³ΠΎ рядко). Π Π΅Π΄ΡŠΡ‚ Π·Π° ΠΈΠ·Π±ΠΎΡ€ Π½Π° Π½ΠΎΠ² Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ мастСр Π² случай Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° стария Π²ΠΈΠ½Π°Π³ΠΈ Ρ‰Π΅ бъдС слСдният: ΠΏΡŠΡ€Π²ΠΈΡΡ‚ Ρ€Π΅Π·Π΅Ρ€Π² Ρ‰Π΅ станС Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ мастСр, Π° Π°ΠΊΠΎ Ρ‚ΠΎΠΉ Π΅ прСстанал Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°, Ρ‰Π΅ станС вторият Ρ€Π΅Π·Π΅Ρ€Π².

Π’Π°ΠΊΠ°Π²Π° схСма Π΅ ΠΏΠΎ-Π½Π°Π΄Π΅ΠΆΠ΄Π½Π° ΠΎΡ‚ унивСрсалСн Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π·Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° Π½ΠΎΠ² ΠΊΠ°ΠΏΠΈΡ‚Π°Π½ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° сС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ Ρ„Π°ΠΊΡ‚ΡŠΡ‚ Π½Π° ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° стария.

Но ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Ρ‰Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚ ΠΊΠΎΠΉ ΠΎΡ‚ майсторитС Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°? НСвъзмоТно Π΅ Π΄Π° сС ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ информация Π΄ΠΎ хиляди ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Π·Π° 50 ms. Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ заявка Π·Π° отварянС Π½Π° транзакция, Π±Π΅Π· всС ΠΎΡ‰Π΅ Π΄Π° Π·Π½Π°Π΅, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ мастСр Π²Π΅Ρ‡Π΅ Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° ΠΈ заявката Ρ‰Π΅ останС Π² ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅. Π—Π° Π΄Π° Π½Π΅ сС случи Ρ‚ΠΎΠ²Π°, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ спСкулативно ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ заявка Π·Π° отварянС Π½Π° транзакция към ΠΊΠ°ΠΏΠΈΡ‚Π°Π½Π° Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° ΠΈ Π΄Π²Π°Ρ‚Π° ΠΉ Ρ€Π΅Π·Π΅Ρ€Π²Π° навСднъТ, Π½ΠΎ само Ρ‚ΠΎΠ·ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ ΠΊΠ°ΠΏΠΈΡ‚Π°Π½ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Ρ‰Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Ρ‚Π°Π·ΠΈ заявка. Цялата послСдваща комуникация Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° транзакцията Ρ‰Π΅ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° само с активния мастСр.

Π“Π»Π°Π²Π½ΠΈΡ‚Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ копия поставят ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅ заявки Π·Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Ρ‚Π΅Ρ…Π½ΠΈ, Π² ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° ΠΎΡ‚ Π½Π΅Ρ€ΠΎΠ΄Π΅Π½ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ извСстно Π²Ρ€Π΅ΠΌΠ΅. Ако активният мастСр ΡƒΠΌΡ€Π΅, новият Π³Π»Π°Π²Π΅Π½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° заявки Π·Π° отварянС Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ своята опашка ΠΈ отговаря Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Ако ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π²Π΅Ρ‡Π΅ Π΅ ΠΎΡ‚Π²ΠΎΡ€ΠΈΠ» транзакция със стария мастСр, Ρ‚ΠΎΠ³Π°Π²Π° вторият ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ сС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π° (ΠΈ, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‚Π°ΠΊΠ°Π²Π° транзакция няма Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠΈ ΠΈ Ρ‰Π΅ бъдС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½Π° ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°).

Как Ρ€Π°Π±ΠΎΡ‚ΠΈ транзакцията

Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠ» заявка Π΄ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° Π·Π° отварянС Π½Π° транзакция Π·Π° Ρ‚Π°ΠΊΡŠΠ² ΠΈ Ρ‚Π°ΠΊΡŠΠ² ΠΎΠ±Π΅ΠΊΡ‚ с Ρ‚Π°ΠΊΡŠΠ² ΠΈ Ρ‚Π°ΠΊΡŠΠ² ΠΏΡŠΡ€Π²ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π° Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ ΠΈ Π³ΠΎ поставя Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π·Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. Ако Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Ρ‡Π΅Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ ΠΈ записва ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°.

NewSQL = NoSQL+ACID

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ иска Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² транзакция, Ρ‚ΠΎΠΉ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° заявка Π΄ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° Π·Π° промяна Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π°, Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΡŠΡ‚ поставя Π½ΠΎΠ²ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° със ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° транзакцията Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. Π’ΠΎΠ²Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° записа - ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π΅ сС записва.

NewSQL = NoSQL+ACID

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ поиска свои собствСни ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Π° транзакция, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΡŠΡ‚ дСйства ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

  • Π°ΠΊΠΎ ID Π²Π΅Ρ‡Π΅ Π΅ Π² транзакцията, Ρ‚ΠΎΠ³Π°Π²Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС Π²Π·Π΅ΠΌΠ°Ρ‚ ΠΎΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°;
  • Π°ΠΊΠΎ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° няма ID, Ρ‚ΠΎΠ³Π°Π²Π° липсващитС Π΄Π°Π½Π½ΠΈ сС Ρ‡Π΅Ρ‚Π°Ρ‚ ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ с Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ са Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ сС Π²Ρ€ΡŠΡ‰Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ собствСнитС си ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Π½Π΅ Π²ΠΈΠΆΠ΄Π°Ρ‚ Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ само Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°, Ρ‚Π΅ всС ΠΎΡ‰Π΅ Π½Π΅ са Π² Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π½Π° ΠšΠ°ΡΠ°Π½Π΄Ρ€Π°.

NewSQL = NoSQL+ACID

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚, ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ услугата Π΅ ΠΈΠΌΠ°Π»Π° Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° ΠΎΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° Π² рСгистриран ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π΄ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΈΡ‚Π΅ Π½Π° Cassandra ΠΊΠ°Ρ‚ΠΎ рСгистриран ΠΏΠ°ΠΊΠ΅Ρ‚. Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅ правят всичко Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ Π΄Π° бъдС Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ (напълно) ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ ΠΈ Π²Ρ€ΡŠΡ‰Π°Ρ‚ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ освобоТдава ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈΡ‚Π΅ ΠΈ ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π°Π²Π° успСха Π½Π° транзакцията Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

NewSQL = NoSQL+ACID

А Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π°Π·Π°Π΄ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΡŠΡ‚ трябва само Π΄Π° освободи ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π·Π°Π΅Ρ‚Π° ΠΎΡ‚ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° транзакцията.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° подобрСнията, описани ΠΏΠΎ-Π³ΠΎΡ€Π΅, Π½ΠΈΠ΅ Π²Π½Π΅Π΄Ρ€ΠΈΡ…ΠΌΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΡ‚Π΅ Π½Π° ACID:

  • Атомност. Π’ΠΎΠ²Π° Π΅ гаранция, Ρ‡Π΅ Π½ΠΈΡ‚ΠΎ Π΅Π΄Π½Π° транзакция няма Π΄Π° бъдС частично фиксирана Π² систСмата, ΠΈΠ»ΠΈ всички Π½Π΅ΠΉΠ½ΠΈ ΠΏΠΎΠ΄ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ изпълнСни, ΠΈΠ»ΠΈ Π½ΠΈΡ‚ΠΎ Π΅Π΄Π½Π° ΠΎΡ‚ тях няма Π΄Π° бъдС изпълнСна. Π’ нашия случай Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ сС спазва ΠΏΠΎΡ€Π°Π΄ΠΈ рСгистрираната ΠΏΠ°Ρ€Ρ‚ΠΈΠ΄Π° Π² Cassandra.
  • ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎΡΡ‚. Всяка ΡƒΡΠΏΠ΅ΡˆΠ½Π° транзакция, ΠΏΠΎ дСфиниция, Π°Π½Π³Π°ΠΆΠΈΡ€Π° само Π²Π°Π»ΠΈΠ΄Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ. Ако слСд отварянС Π½Π° транзакция ΠΈ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° някои ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ сС установи, Ρ‡Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ Π΅ Π½Π΅Π²Π°Π»ΠΈΠ΄Π΅Π½, сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π°Π·Π°Π΄.
  • изолация. ΠšΠΎΠ³Π°Ρ‚ΠΎ сС изпълнява транзакция, ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π΅ трябва Π΄Π° влияят Π½Π° нСйния Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚. Π•Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ са ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ с пСсимистични ΠΊΠ»ΡŽΡ‡Π°Π»ΠΊΠΈ Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°. Π—Π° чСтСния извън транзакция сС спазва ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ Π½Π° изолация Π½Π° Π½ΠΈΠ²ΠΎ Read Committed.
  • стабилност. НСзависимо ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ Π½Π° ΠΏΠΎ-нискитС Π½ΠΈΠ²Π° - Π·Π°Ρ‚ΡŠΠΌΠ½Π΅Π½ΠΈΠ΅ Π½Π° систСмата, Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π΅Π½ срив - ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅, Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΎΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π° транзакция, трябва Π΄Π° останат Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ слСд възобновяванС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ.

Π§Π΅Ρ‚Π΅Π½Π΅ ΠΏΠΎ индСкси

Π”Π° Π²Π·Π΅ΠΌΠ΅ΠΌ проста Ρ‚Π°Π±Π»ΠΈΡ†Π°:

CREATE TABLE photos (
id bigint primary key,
owner bigint,
modified timestamp,
…)

Има ID (ΠΏΡŠΡ€Π²ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡), собствСник ΠΈ Π΄Π°Ρ‚Π° Π½Π° промяна. Врябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ проста заявка - ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ Π·Π° собствСника с Π΄Π°Ρ‚Π°Ρ‚Π° Π½Π° промяната "Π·Π° послСдния Π΄Π΅Π½".

SELECT *
WHERE owner=?
AND modified>?

Π—Π° Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ Π±ΡŠΡ€Π·ΠΎ Ρ‚Π°ΠΊΠ°Π²Π° заявка, Π² класичСска SQL Π‘Π£Π‘Π”, трябва Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ индСкс Π²ΡŠΡ€Ρ…Ρƒ ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅ (собствСник, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½). МоТСм Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π° съвсСм просто, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ ΠΎΡ‚ ACID!

ИндСкси в C*One

Има Π½Π°Ρ‡Π°Π»Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° със снимки, Π² която ID Π½Π° записа Π΅ ΠΏΡŠΡ€Π²ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡.

NewSQL = NoSQL+ACID

Π—Π° индСкс C*One създава Π½ΠΎΠ²Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°, която Π΅ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°. ΠšΠ»ΡŽΡ‡ΡŠΡ‚ Π΅ ΡΡŠΡ‰ΠΈΡΡ‚ ΠΊΠ°Ρ‚ΠΎ индСксния ΠΈΠ·Ρ€Π°Π·, Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΈ ΠΏΡŠΡ€Π²ΠΈΡ‡Π½ΠΈΡ ΠΊΠ»ΡŽΡ‡ Π½Π° записа ΠΎΡ‚ ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°:

NewSQL = NoSQL+ACID

Π‘Π΅Π³Π° заявката Π·Π° β€žΡΠΎΠ±ΡΡ‚Π²Π΅Π½ΠΈΠΊ ΠΏΡ€Π΅Π· послСднитС XNUMX Ρ‡Π°ΡΠ°β€œ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС прСнаписана ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Π±ΠΎΡ€ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°:

SELECT * FROM i1_test
WHERE owner=?
AND modified>?

Π‘ΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ снимкитС Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈ индСкс i1 сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°. Π’ΡŠΠ· основа само Π½Π° схСмата Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ промяна, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΈ запомня промяната Π½Π΅ само Π½Π° основната Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π½ΠΎ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π° копията. НС сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ дСйствия с индСксната Ρ‚Π°Π±Π»ΠΈΡ†Π°, рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π΅ сС Ρ‡Π΅Ρ‚Π°Ρ‚, Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡΡ‚Π° Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ добавянСто Π½Π° индСкси ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ консумира рСсурси ΠΈ практичСски Π½Π΅ влияС Π½Π° скоростта Π½Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ACID успяхмС Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΠΌ индСкси "ΠΊΠ°Ρ‚ΠΎ Π² SQL". Π’Π΅ са послСдоватСлни, ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΈ, Π±ΡŠΡ€Π·ΠΈ, ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΈ ΠΈ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π² Π΅Π·ΠΈΠΊΠ° Π·Π° заявки CQL. ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° индСкс Π½Π΅ изисква ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Всичко Π΅ просто, ΠΊΠ°ΠΊΡ‚ΠΎ Π² SQL. И Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ Π΅, Ρ‡Π΅ индСкситС Π½Π΅ влияят Π½Π° скоростта Π½Π° изпълнСниС Π½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅.

Какво стана

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΈΡ…ΠΌΠ΅ C*One ΠΏΡ€Π΅Π΄ΠΈ Ρ‚Ρ€ΠΈ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈ Π³ΠΎ пуснахмС Π² Ρ‚ΡŠΡ€Π³ΠΎΠ²ΡΠΊΠ° Сксплоатация.

Какво Π·Π°Π²ΡŠΡ€ΡˆΠΈΡ…ΠΌΠ΅? НСка Π΄Π° ΠΎΡ†Π΅Π½ΠΈΠΌ Ρ‚ΠΎΠ²Π° Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° подсистСма Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° снимки, Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΈΡ‚Π΅ Π²ΠΈΠ΄ΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ Π² социалната ΠΌΡ€Π΅ΠΆΠ°. НС става Π΄ΡƒΠΌΠ° Π·Π° Ρ‚Π΅Π»Π°Ρ‚Π° Π½Π° самитС Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ, Π° Π·Π° всякакъв Π²ΠΈΠ΄ мСтаинформация. Π‘Π΅Π³Π° Π² Odnoklassniki ΠΈΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ 20 ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄Π° Ρ‚Π°ΠΊΠΈΠ²Π° записи, систСмата ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° 80 хиляди заявки Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π² сСкунда, Π΄ΠΎ 8 хиляди ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π² сСкунда, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с модификация Π½Π° Π΄Π°Π½Π½ΠΈ.

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ SQL с ΠΊΠΎΠ΅Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ Π½Π° рСпликация = 1 (Π½ΠΎ Π² RAID 10), ΠΌΠ΅Ρ‚Π°-информацията Π·Π° снимката сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΡˆΠ΅ Π½Π° силно Π½Π°Π»ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ ΠΎΡ‚ 32 машини Π½Π° Microsoft SQL Server (плюс 11 Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ). Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° бяха Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ 10 ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ копия. ΠžΠ±Ρ‰ΠΎ 50 скъпи ΠΊΠΎΠ»ΠΈ. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ систСмата Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€ΠΈ Π½ΠΎΠΌΠΈΠ½Π°Π»Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅, Π±Π΅Π· ΠΌΠ°Ρ€ΠΆ.

Π‘Π»Π΅Π΄ ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Π½Π΅ към Π½ΠΎΠ²Π° систСма ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΊΡ‚ΠΎΡ€ = 3 - ΠΊΠΎΠΏΠΈΠ΅ във всСки Ρ†Π΅Π½Ρ‚ΡŠΡ€ Π·Π° Π΄Π°Π½Π½ΠΈ. БистСмата сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ 63 Cassandra възли Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ 6 ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€Π°Ρ‰ΠΈ машини, Π·Π° ΠΎΠ±Ρ‰ΠΎ 69 ΡΡŠΡ€Π²ΡŠΡ€Π°. Но Ρ‚Π΅Π·ΠΈ машини са ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΅Π²Ρ‚ΠΈΠ½ΠΈ, ΠΎΠ±Ρ‰ΠΎ ΠΎΠΊΠΎΠ»ΠΎ 30% ΠΎΡ‚ Ρ†Π΅Π½Π°Ρ‚Π° Π½Π° SQL систСма. Π’ Ρ‚ΠΎΠ·ΠΈ случай Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π½Π° Π½ΠΈΠ²ΠΎ ΠΎΡ‚ 30%.

Π‘ Π²ΡŠΠ²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° C*One забавянСто ΡΡŠΡ‰ΠΎ намаля: Π² SQL опСрацията Π·Π° запис ΠΎΡ‚Π½Π΅ ΠΎΠΊΠΎΠ»ΠΎ 4,5 ms. Π’ C * One - ΠΎΠΊΠΎΠ»ΠΎ 1,6 ms. ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Π΅Π΄Π½Π° транзакция Π΅ срСдно ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠ° ΠΎΡ‚ 40 ms, Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ΡŠΡ‚ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° Π·Π° 2 ms, ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ запис Π΅ срСдно 2 ms. 99-ият ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈΠ» Π΅ само 3-3,1 ms, броят Π½Π° изчакванията Π΅ намалял със 100 ΠΏΡŠΡ‚ΠΈ - всичко Ρ‚ΠΎΠ²Π° сС дълТи Π½Π° ΡˆΠΈΡ€ΠΎΠΊΠΎΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° спСкулации.

Към днСшна Π΄Π°Ρ‚Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΡ‚ Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π½Π° SQL Server са ΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈ ΠΎΡ‚ Сксплоатация, Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ сС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ само с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° C * One. АдаптирахмС C*One Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² нашия ΠΎΠ±Π»Π°ΠΊ Π΅Π΄Π½ΠΎΠΎΠ±Π»Π°Ρ‡Π΅Π½, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈ възмоТно ускоряванСто Π½Π° внСдряванСто Π½Π° Π½ΠΎΠ²ΠΈ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ, опростяванСто Π½Π° конфигурацията ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°. Π‘Π΅Π· изходния ΠΊΠΎΠ΄ Ρ‚ΠΎΠ²Π° Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΈ ΠΈΠ·Ρ‚ΡŠΡ€ΠΊΠ°Π½ΠΎ.

Π‘Π΅Π³Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ Π²ΡŠΡ€Ρ…Ρƒ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π½ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π² ΠΎΠ±Π»Π°ΠΊΠ° - Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ съвсСм Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° история.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€