Projekty CBS i sqld rozwijają chmurowe i serwerowe wersje SQLite

Deweloperzy SQLite rozwijają eksperymentalny moduł VFS CBS (Cloud Backed SQLite), który umożliwia przechowywanie zawartości bazy danych nie w lokalnym pliku, ale w zewnętrznej chmurze. Do przechowywania wykorzystuje się specjalnie zoptymalizowany format bazy danych do przechowywania w chmurze, który pozwala na dynamiczne ładowanie danych z zewnętrznego składu w miarę potrzeb, bez wcześniejszego kopiowania całej bazy danych na system lokalny. Obecnie wspierane chmurowe usługi to Azure Blob Storage i Google Cloud Storage. Każda aplikacja obsługująca standardowy SQLite może zostać przeniesiona na CBS.

Moduł VFS może działać w trybie tła lub aktywnym. W trybie tła w systemie cały czas działa proces w tle, który umożliwia dostęp do zewnętrznej bazy danych tylko w trybie odczytu, ale wspiera wspólną pamięć podręczną, do której mogą równocześnie mieć dostęp różne procesy. W trybie aktywnym dozwolone jest odczytywanie i zapisywanie, ale tylko lokalna pamięć podręczna bieżącego procesu jest używana. W danym momencie tylko jeden klient może dokonywać zapisu, a inni klienci nie zobaczą zapisanych zmian, dopóki nie zażądają ich wyraźnie z chmury. Do rozdzielania różnych żądań zapisu stosuje się standardowy system blokad SQLite oparty na dzienniku WAL.

Deweloperzy mają dostęp do rozszerzonego C API oraz interfejsu wiersza poleceń, które pozwalają na wykonywanie takich operacji, jak tworzenie i czyszczenie zewnętrznej pamięci, ładowanie i wyładowywanie bazy danych z/na zewnętrzny magazyn, tworzenie kopii bazy danych w zewnętrznym magazynie, przeglądanie listy baz danych w chmurze oraz usuwanie nieużywanych bloków ze zewnętrznej chmury.

Oddzielnie, deweloperzy projektu libSQL (rozszerzony fork SQLite) ogłosili serwerową wersję SQLite — sqld, która umożliwia zorganizowanie pracy współdzielonej bazy danych, do której klienci podłączają się za pomocą protokołu PostgreSQL lub HTTP. Na przykład, do połączenia z sqld można używać istniejących bibliotek klienckich stworzonych dla baz danych PostgreSQL, a także interfejsu CLI psql. Do serwera sqld można także uzyskać dostęp za pomocą API opartego na protokole HTTP, co ułatwia integrację z aplikacjami internetowymi. Kod sqld został napisany w języku Rust i jest dystrybuowany na licencji MIT.

Obszary zastosowania sqld obejmują tworzenie kopii zapasowych, replikację do innych systemów oraz organizację dostępu do bazy danych SQlite w infrastrukturze bezserwerowej, w której brak jest stałego magazynu i nie można zapewnić prowadzenia bazy w lokalnym pliku. W systemach bezserwerowych baza danych, z którą pracuje sqld, może być replikowana z innych. serwerów. Aby zapewnić wysoką dostępność i odporność na awarie, wspierana jest integracja z mvSQLite (rozproszona wersja SQLite działająca na bazie FoundationDB). Istnieje tryb utrzymywania aktywnej kopii zapasowej, realizowany poprzez okresowe zapisywanie zrzutów stanu bazy danych oraz replikację zmian z dziennika WAL do chmury zgodnej z Amazon S3.

Dla aplikacji udostępniana jest biblioteka kompatybilna z SQLite, która może być ładowana poprzez LD_PRELOAD, aby przejść z przechowywania danych w lokalnym pliku na pracę z sqld. Możliwe jest ładowanie rozszerzeń do SQLite. Biblioteki klienckie zostały przygotowane dla TypeScript, JavaScript, Rust, Go i Pythona. Z bazą danych powiązaną z sqld można jednocześnie pracować za pomocą standardowych narzędzi SQLite, tzn. sqld działa jako warstwa zapewniająca dostęp sieciowy do bazy, replikację i wykonywanie kopii zapasowych. Na przykład: # Uruchamiamy serwer dla bazy danych SQLite foo.db: sqld -d foo.db -p 127.0.0.1:5432 —http-listen-addr=127.0.0.1:8000 # Odwołujemy się do bazy danych za pomocą narzędzi PostgreSQL: psql -q postgres://127.0.0.1 # Podłączamy się lokalnie do bazy danych przy użyciu narzędzi SQLite: sqlite3 foo.db # Odwołujemy się przez HTTP: curl -s -d "{\"statements\": [\"SELECT * from databases;\"] }" \ http://127.0.0.1:8000

Na koniec warto wspomnieć o projekcie LiteFS, rozwijanym przez firmę Fly.io. LiteFS to moduł FUSE do organizacji pracy z jedną wspólną bazą danych SQLite na wielu hostach. LiteFS replikuję stan bazy danych między wieloma systemami poprzez przechwytywanie operacji zapisu w pliku z bazą danych i transmisję tych operacji do innych systemów, wykorzystując podobieństwo do mechanizmu transakcji i zapis transakcji w osobnym pliku w formacie LTX. Kod LiteFS został napisany w języku Go i jest dystrybuowany na licencji Apache 2.0.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster