ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Π΅ ΠΏΡΡΠ²ΠΈΡΡ ΡΡΠ°Π±ΠΈΠ»Π΅Π½ ΡΠ΅Π»ΠΈΠ· Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° TidesDB, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·Π²ΠΈΠ²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π²ΡΠ² ΡΠΎΡΠΌΠ°Ρ ΠΊΠ»ΡΡ/ΡΡΠΎΠΉΠ½ΠΎΡΡ. ΠΡΠΎΠ΅ΠΊΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π΅Π½ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π» ΠΈΠ»ΠΈ Π·Π° Π²Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ»ΡΡΠΎΠ²ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ACID ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π·Π° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π½Π° Flash Π½ΠΎΡΠΈΡΠ΅Π»ΠΈ ΠΈ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ. ΠΠΎΠ΄ΡΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·Π° MPL 2.0. ΠΠ±Π²ΠΈΠ²ΠΊΠΈΡΠ΅ ΡΠ° ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ Π·Π° C++, Go, Java, Python, Rust, Lua ΠΈ JavaScript.
ΠΠ° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΡΡΠΊΡΡΡΠ° LSM-Π΄ΡΡΠ²ΠΎ (ΠΆΡΡΠ½Π°Π»Π½ΠΎ-ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΎ Π΄ΡΡΠ²ΠΎ ΡΡΡ ΡΠ»ΠΈΠ²Π°Π½Π΅), ΠΎΡΠΈΠ³ΡΡΡΠ²Π°ΡΠ° Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π΅ ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½Π΅, Π½ΠΎ ΠΈ ΠΏΡΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π·Π°ΠΏΠΈΡ ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΠ΅ΡΠ΅Π½Π΅ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°Ρ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ ΠΈ ΡΠ΅ΡΠ΅Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ, Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ ΠΏΠΎ Π·Π°ΠΏΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠ°Ρ ΡΠ°ΠΌΠΎ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° ΠΎΡ ΠΊΠΎΠ»ΠΎΠ½ΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π·Π°ΠΏΠΈΡ. ΠΠ° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅Π½Π΅ΡΠΎ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ ΠΈ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° 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, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π°.offset Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ΡΠ΅ Ρ ΠΊΠ»ΡΡΠΎΠ²Π΅ Π±Π΅Π· ΠΏΡΠ»Π½ΠΎ ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅.
- ΠΠΎΠΌΠΏΠ°ΠΊΡΠ΅Π½ ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌ Π±ΠΈΠ½Π°ΡΠ΅Π½ ΡΠΎΡΠΌΠ°Ρ Π½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π±Π°Π·Π°ΡΠ°, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅.
- ΠΠ³ΡΠ°Π΄Π΅Π½ΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΡΠ΅Π»ΠΎΡΡΡΠ°, ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈ Π² Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΈ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
