ДоступСн встраиваСмый Π΄Π²ΠΈΠΆΠΎΠΊ хранСния TidesDB 1.0, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° TidesDB, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ для хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ обособлСнно запускаСмый Π΄Π²ΠΈΠΆΠΎΠΊ ΠΈΠ»ΠΈ для встраивания Π² прилоТСния. Из ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… возмоТностСй отмСчаСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ оптимизация для эффСктивного хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Flash-накопитСлях ΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Код написан Π½Π° языкС Π‘ΠΈ ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MPL 2.0. Обвязки ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ для языков C++, Go, Java, Python, Rust, Lua ΠΈ JavaScript.

Для хранСния Π΄Π°Π½Π½Ρ‹Ρ… задСйствована структура LSM-tree (ΠΆΡƒΡ€Π½Π°Π»ΡŒΠ½ΠΎ-структурированноС Π΄Π΅Ρ€Π΅Π²ΠΎ со слияниСм), ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ, Π½ΠΎ ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи ΠΈ измСнСния Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ запись ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСмСйство столбцов Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся запись. Для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ускорСния чтСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ индСксы ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π΅ bloom-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² (ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²ΠΎ мноТСство, допуская Π»ΠΎΠΆΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта, Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ пропуск ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта).

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ сСмСйства столбцов, ΠΈ ΠΏΡ€ΠΈ нСобходимости Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π”Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ хранится Π² сТатом Π²ΠΈΠ΄Π΅ с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сТатия Π² привязкС ΠΊ сСмСйству столбцов. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ выставлСниС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… сСмСйств столбцов ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Π‘Π”.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ возмоТности:

  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сСмСйств столбцов (Column Families) β€” ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡/значСния. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сСмСйства столбцов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ свои memtable, SSTable ΠΈ WAL-Π»ΠΎΠ³.
  • ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с сСмСйствами столбцов.
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²ΠΏΠ΅Ρ€Ρ‘Π΄ ΠΈΠ»ΠΈ Π½Π°Π·Π°Π΄ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ сортировки.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° добавлСния своих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сравнСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. НаличиС встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сравнСния memcmp, string ΠΈ numeric.
  • Π’Π΅Π΄Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (WAL, Write-Ahead Log) ΠΈ автоматичСскоС восстановлСниС memtable (Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти) ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π° ΠΏΡ€ΠΈ запускС.
  • ИспользованиС Bloom-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŽ Π·Π° счёт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ наличия ΠΊΠ»ΡŽΡ‡Π° Π΄ΠΎ чтСния ΠΈΠ· SSTable (постоянноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅).
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Snappy, LZ4 ΠΈ ZSTD для сТатия записСй Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ SSTable ΠΈ WAL-Π»ΠΎΠ³Π΅.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ опрСдСлСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ записСй (TTL) ΠΈ автоматичСского ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ просрочСнных записСй.
  • Π’Ρ€ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° синхронизации Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠžΠ—Π£ с постоянным Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ: NONE (самый быстрый), BACKGROUND (сбалансированный), FULL (Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ).
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ настройки Ρ€Π°Π·ΠΌΠ΅Ρ€Π° memtable, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сТатия, bloom-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², Ρ€Π΅ΠΆΠΈΠΌΠ° синхронизации ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сСмСйства столбцов.
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ C API, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ 0 ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ -1 ΠΏΡ€ΠΈ ошибкС.
  • ИспользованиС SBHA (Sorted Binary Hash Array) для быстрого поиска Π΄Π°Π½Π½Ρ‹Ρ… Π² SSTable, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ смСщСния Π±Π»ΠΎΠΊΠΎΠ² с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ сканирования.
  • ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ пСрСносимый Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ прСдставлСния Π±Π°Π·Ρ‹, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ вСрсионированиС.
  • ВстроСнныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ контроля цСлостности, опрСдСлСния ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ восстановлСния.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ