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

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

Как Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ постигнахмС β€” Ρ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ΠΎΡ‚ΠΎ.

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

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

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° всичко Ρ‚ΠΎΠ²Π° са ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ NoSQL ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° слабо ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈ. А Π½ΠΈΠ΅ искахмС Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ основното консистСнтно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Microsoft SQL Server, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π±ΠΈΠ»ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ ΠΎΡ‚ самото създаванС Π½Π° β€žΠžΠ΄Π½ΠΎΠΊΠ»Π°ΡΡΠ½ΠΈΠΊΠΈβ€œ. Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ сС ΡΡŠΡΡ‚ΠΎΠ΅ΡˆΠ΅ ΠΎΡ‚ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 300 машини с SQL Server Standard Edition, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ…Π° 50 Π’Π± Π΄Π°Π½Π½ΠΈ β€” бизнСс-ΡΡŠΡ‰Π½ΠΎΡΡ‚ΠΈ. Π’Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ сС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈ изискват висока ΡΡŠΠ³Π»Π°ΡΡƒΠ²Π°Π½ΠΎΡΡ‚.

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

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

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

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

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

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

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

ΠžΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚

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

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

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

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

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

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

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

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

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

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

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

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

TX.commit();

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

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

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

Π”Ρ€ΡƒΠ³ΠΈ, Π½Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²Π°ΠΆΠ½ΠΈ, изисквания бяха:

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

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

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

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ β€” Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ SQL ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°Ρ‚Π° устойчивост Π½Π° ΠΎΡ‚ΠΊΠ°Π·ΠΈ, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° скалиранС, устойчив ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ ΠΈ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ, Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈ ΠΈ Π±ΡŠΡ€Π·ΠΈ ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. ΠžΡ†Π΅Π½ΠΈΡ…ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠ°Ρ‚ΠΎ доста Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π΅Π½ ΠΈ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΡŠΠΊ.

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

Cassandra ΠΈ CQL

И Ρ‚Π°ΠΊΠ°, ΠΊΠ°ΠΊΠ²ΠΎ Π΅ интСрСсно Π² Cassandra, ΠΊΠ°ΠΊΠ²ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°?

На ΠΏΡŠΡ€Π²ΠΎ място, Ρ‚ΡƒΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π°Π²ΠΈ 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 β€” ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° ΠΈΠ»ΠΈ ΠΏΡŠΠ»Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅, ΠΈΠ»ΠΈ ΠΏΡŠΠ»Π½ΠΎΡ‚ΠΎ нСизпълнСниС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΎΡ‚ измСнСния, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅. Π’ΠΎΠ²Π° Π½ΠΈ позволява Π΄Π° Ρ€Π΅ΡˆΠΈΠΌ A Π² ACID β€” атомарност ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅.

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

Какво ни липсвашС в Cassandra

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

C*One

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

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

NewSQL = NoSQL+ACID

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

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

NewSQL = NoSQL+ACID

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

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ C*One

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

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

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

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

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

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

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

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

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

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

NewSQL = NoSQL+ACID

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

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

Но Π΅ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π±ΡŠΡ€Π·ΠΎ Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅ коя Π½ΠΎΠ΄Π° Π΅ спряло Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°. НСобходимо Π΅ Π½Π΅Ρ‰ΠΎ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π²ΡŠΠΏΡ€ΠΎΡ.

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

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

NewSQL = NoSQL+ACID

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

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

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

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

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

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

NewSQL = NoSQL+ACID

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

NewSQL = NoSQL+ACID

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

  • Π°ΠΊΠΎ ID Π²Π΅Ρ‡Π΅ Π΅ Π² транзакцията, Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС Π²Π·ΠΈΠΌΠ°Ρ‚ ΠΎΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°;
  • Π°ΠΊΠΎ ID Π½Π΅ Π΅ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, нСдостигащитС Π΄Π°Π½Π½ΠΈ сС ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ ΠΎΡ‚ Π½ΠΎΠ΄ΠΎΠ²ΠΈΡ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, обСдиняват сС с ΡƒΠΆΠ΅ Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ сС ΠΏΡ€Π΅Π΄Π°Π²Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

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

NewSQL = NoSQL+ACID

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

NewSQL = NoSQL+ACID

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

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° описанитС ΠΏΠΎ-Π³ΠΎΡ€Π΅ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ…ΠΌΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΡ‚Π΅ ACID:

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

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

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

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

Вя ΠΈΠΌΠ° ID (ΠΏΡŠΡ€Π²ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡), собствСник ΠΈ Π΄Π°Ρ‚Π° Π½Π° промяна. НСобходимо Π΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ прост Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ β€” Π΄Π° сС ΠΈΠ·Π±Π΅Ρ€Π°Ρ‚ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΏΠΎ собствСник с Π΄Π°Ρ‚Π° Π½Π° промяна β€žΠ·Π° послСднитС 24 часа.β€œ

SELECT *
WHERE owner=?
AND modified>?

Π—Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ Π±ΡŠΡ€Π·ΠΎ, Π² класичСска SQL Π‘Π£Π‘Π” Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ индСкс ΠΏΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅ (owner, modified). Подобно ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ сравнитСлно просто, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ сСга ΠΈΠΌΠ°ΠΌΠ΅ Π³Π°Ρ€Π°Π½Ρ†ΠΈΠΈ ACID!

ИндСкси в C*One

Има ΠΈΠ·Ρ…ΠΎΠ΄Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° с Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ, Π² която ID Π½Π° записа Π΅ ΠΏΡŠΡ€Π²ΠΈΡ‡Π½ΠΈΡΡ‚ ΠΊΠ»ΡŽΡ‡.

NewSQL = NoSQL+ACID

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

NewSQL = NoSQL+ACID

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

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

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

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

Какво постигнахмС

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

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

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

Π‘Π»Π΅Π΄ ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ към Π½ΠΎΠ²Π°Ρ‚Π° систСма ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ replication factor = 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 Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΎΠ±Π»Π°ΠΊΠΎ. one-cloud, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ускорим Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²ΠΈ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ, Π΄Π° опростим конфигурацията ΠΈ Π΄Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Сксплоатацията. Π‘Π΅Π· изходния ΠΊΠΎΠ΄ Ρ‰Π΅ΡˆΠ΅ Π΄Π° бъдС Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-слоТно ΠΈ Ρ…Ρ€ΠΎΠΌΠ°Π²ΠΎ.

Π‘Π΅Π³Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ ΠΏΠΎ трансфСра Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π½ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π² ΠΎΠ±Π»Π°ΠΊ β€” Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ съвсСм Π΄Ρ€ΡƒΠ³Π° история.

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster