ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ CBS ΠΈ sqld Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ ΠΈ сСрвСрный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ SQLite

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ SQLite Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ VFS-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ CBS (Cloud Backed SQLite), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ содСрТимоС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π² локальном Ρ„Π°ΠΉΠ»Π΅, Π° Π²ΠΎ внСшнСм ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Для хранСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ для внСшнСго хранСния Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π±Π°Π·Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· внСшнСго Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° динамичСски ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ копирования всСй Π‘Π” Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ систСму. Из ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π² настоящСС врСмя ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Azure Blob Storage ΠΈ Google Cloud Storage. На использованиС CBS ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Ρ‹ Π»ΡŽΠ±Ρ‹Π΅ прилоТСния, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ SQLite.

VFS-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π’ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π² систСмС постоянно выполняСтся Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ процСсс, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ внСшнСй Π‘Π” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ чтСния, Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ кэш, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ совмСстно ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ процСссы. Π’ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ допускаСтся Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ кэш Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ процСсса. Π’ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ запись, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π½Π΅ увидят записанныС измСнСния, ΠΏΠΎΠΊΠ° явно Π½Π΅ запросят ΠΈΡ… ΠΈΠ· ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Для раздСлСния Ρ€Π°Π·Π½Ρ‹Ρ… запросов Π½Π° запись примСняСтся типовая систСма Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ SQLite Π½Π° основС WAL-Π»ΠΎΠ³Π°.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ прСдоставляСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ C API ΠΈ интСрфСйс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ созданиС ΠΈ очистка внСшнСго Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° Π‘Π” Π²/ΠΈΠ· внСшнСго Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, созданиС ΠΊΠΎΠΏΠΈΠΈ Π‘Π” Π½Π° внСшнСм Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, просмотр списка Π‘Π” Π² ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² ΠΈΠ· ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° libSQL (Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΊ SQLite) анонсирован сСрвСрный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ SQLite — sqld, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π‘Π£Π‘Π”, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° PostgreSQL ΠΈΠ»ΠΈ HTTP. НапримСр, для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ sqld ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ клиСнтскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, созданныС для Π‘Π£Π‘Π” PostgreSQL, ΠΈ, срСди ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, CLI-интСрфСйс psql. К сСрвСру sqld Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ API Π½Π° Π±Π°Π·Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° HTTP, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с web-прилоТСниями. Код sqld написан Π½Π° языкС Rust ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT.

Π’ качСствС областСй примСнСния sqld отмСчаСтся Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, рСпликация Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ систСмы ΠΈ организация доступа ΠΊ Π‘Π” SQlite Π² бСссСрвСрных инфраструктурах, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ отсутствуСт постоянноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π² локальном Ρ„Π°ΠΉΠ»Π΅. Π’ бСссСрвСрных систСмах, Π‘Π”, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ sqld, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΡ… сСрвСров. Для обСспСчСния высокой доступности ΠΈ устойчивости ΠΊ сбоям поддСрТиваСтся интСграция с mvSQLite (распрСдСлённый Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ SQLite, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ… FoundationDB). Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Ρ€Π΅ΠΆΠΈΠΌ поддСрТания Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π· пСриодичСскоС сохранСниС ΡΠ½Π°ΠΏΡˆΠΎΡ‚ΠΎΠ² с состояниСм Π‘Π” ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· WAL-Π»ΠΎΠ³Π° Π² ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, совмСстимоС с Amazon S3.

Для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ прСдоставляСтся совмСстимая с SQLite Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· LD_PRELOAD для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° с хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² локальном Ρ„Π°ΠΉΠ»Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‡Π΅Ρ€Π΅Π· sqld. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ΠΊ SQLite. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ для TypeScript, JavaScript, Rust, Go ΠΈ Python. C Π‘Π”, привязанной ΠΊ sqld, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡˆΡ‚Π°Ρ‚Π½ΠΎΠ³ΠΎ инструмСнтария SQLite, Ρ‚.Π΅. sqld выступаСт ΠΊΠ°ΠΊ надстройка для прСдоставлСния сСтСвого доступа ΠΊ Π‘Π”, Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования. НапримСр: # ЗапускаСм сСрвСр для SQLite Π‘Π” foo.db: sqld -d foo.db -p 127.0.0.1:5432 —http-listen-addr=127.0.0.1:8000 # ΠžΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌΡΡ ΠΊ Π‘Π” ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ PostgreSQL: psql -q postgres://127.0.0.1 # ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ локально ΠΊ Π‘Π” ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ инструмСнтария SQLite: sqlite3 foo.db # ΠžΠ±Ρ€Π°Ρ‰Π°Π΅ΠΌΡΡ Ρ‡Π΅Ρ€Π΅Π· HTTP: curl -s -d «{\»statements\»: [\»SELECT * from databases;\»] }» \ http://127.0.0.1:8000

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ LiteFS, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Fly.io. LiteFS прСдставляСт собой FUSE-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Ρ‰Π΅ΠΉ Π‘Π” SQLite Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… хостах. LiteFS Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ состояниС Π‘Π” ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими систСмами Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи Π² Ρ„Π°ΠΉΠ» с Π‘Π”, ΠΈ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ систСмы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ сохранСниС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ LTX. Код LiteFS написан Π½Π° языкС Go ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0.

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

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