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:

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

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

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

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

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

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

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

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

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

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

Π—Π° Ρ‚ΠΎΠ²Π° моТСшС Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ 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();

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

ΠŸΡ€ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° транзакция ΠΌΠΎΠΆΠ΅ Π΄Π° сС случи ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° ΡΡŠΡ‰ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° систСма. НапримСр, Антиспам ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π΅ΡˆΠΈ, Ρ‡Π΅ потрСбитСлят Π΅ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ ΠΈ Π·Π°Ρ‚ΠΎΠ²Π° всички снимки Π½Π° потрСбитСля Π²Π΅Ρ‡Π΅ Π½Π΅ трябва Π΄Π° са ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΈ, Ρ‚Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ Π·Π° модСрация, Π° Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ 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 kernel, ΠΏΠΎΠ²Ρ€Π΅Π΄Π° Π½Π° Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π° ΠΈΠ»ΠΈ Π·Π°Π³ΡƒΠ±Π° Π½Π° ΠΌΡ€Π΅ΠΆΠ°. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠ²Π° Π½Π΅ влияС ΠΏΠΎ никакъв Π½Π°Ρ‡ΠΈΠ½ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅.

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΎΠ±Ρ€ΡŠΡ‰Π°ΠΌΠ΅ към Ρ‚Ρ€ΠΈΡ‚Π΅ Π½ΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΎΡ‚ Π΄Π²Π°Ρ‚Π°, сС Π½Π°Ρ€ΠΈΡ‡Π° спСкулация: заявката Π·Π° излишни Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° β€žΠΎΡ‚ΠΏΠ°Π΄Π½Π΅β€œ.

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

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

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

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

C*One

Π’Π°ΠΊΠ° сС Ρ€ΠΎΠ΄ΠΈ Π½ΠΎΠ²Π°Ρ‚Π° Π‘Π£Π‘Π” C*One, ΡΡŠΡΡ‚Π°Π²Π΅Π½Π° ΠΎΡ‚ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° сСрвСрни Π½ΠΎΠ΄ΠΈ:

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

NewSQL = NoSQL+ACID

Π‘ΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ ΠΎΡ‚ всички Ρ‚ΠΈΠΏΠΎΠ²Π΅ са част ΠΎΡ‚ ΠΎΠ±Ρ‰ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Cassandra Π·Π° комуникация ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си ΠΈ госип Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° информация Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° 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 мс. Π’ Java Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π° отзивчивост Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° 50 мс, Π·Π°Ρ€Π°Π΄ΠΈ сравнимата ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ Π½Π° ΠΏΠ°ΡƒΠ·ΠΈΡ‚Π΅, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ΠΈ ΠΎΡ‚ garbage collector. УспяхмС Π΄Π° постигнСм Ρ‚Π°ΠΊΠ°Π²Π° отзивчивост, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ G1 garbage collector, ΠΊΠΎΠΉΡ‚ΠΎ позволява Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Ρ†Π΅Π» Π·Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΏΠ°ΡƒΠ·ΠΈΡ‚Π΅ ΠΎΡ‚ GC. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, понякога, доста рядко, ΠΏΠ°ΡƒΠ·ΠΈΡ‚Π΅ Π½Π° сглобитСля Π½Π°Π΄Π²ΠΈΡˆΠ°Π²Π°Ρ‚ 50 мс, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Ρ„Π°Π»ΡˆΠΈΠ²ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π½Π° ΠΎΡ‚ΠΊΠ°Π·. Π—Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π΅ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π΅ ΡΡŠΠΎΠ±Ρ‰Π°Π²Π° Π·Π° ΠΎΡ‚ΠΊΠ°Π· Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ възСл ΠΏΡ€ΠΈ Π·Π°Π³ΡƒΠ±Π°Ρ‚Π° Π½Π° ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ heartbeat ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Π½Π΅Π³ΠΎ, Π° само Π°ΠΊΠΎ ΠΈΠ·Π³ΡƒΠ±ΠΈ няколко послСдоватСлни. Π’Π°ΠΊΠ° успяхмС Π΄Π° постигнСм ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π½Π° ΠΎΡ‚ΠΊΠ°Π·Π° Π½Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ възСла Π·Π° 200 мс.

Но Π±ΡŠΡ€Π·ΠΎΡ‚ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ коя Π½ΠΎΠ΄Π° Π΅ прСстанала Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ. НуТно Π΅ Π΄Π° сС ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ дСйствия.

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

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

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

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

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

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

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

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

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