Programování

Turso přepsal SQLite do Rustu a nad stejným jádrem staví Postgres, zatím jen ze zdroje

Databázový projekt Turso, který vznikl jako přepis SQLite do jazyka Rust, oznámil 16. července, že nad stejným jádrem staví i Postgres. Autoři to popisují jako „LLVM databází“: jedno jádro a víc jazykových rozhraní nad ním. Hotová databáze to zatím není – balíčky ke stažení neexistují a oznámení samo mluví o základu, ne o hotovém produktu.

· 5 zhlédnutí

Databázový projekt Turso vznikl jako přepis SQLite do jazyka Rust. 16. července jeho autoři oznámili, že nad stejným jádrem chtějí postavit i Postgres. Podrobnosti doplnil 29. července server The Register, kterému se k záměru vyjádřil ředitel firmy Glauber Costa.

Kresba Väinämöinena s mořskou obludou Iku-Turso
Väinämöinen drží v člunu mořskou obludu Iku-Turso, kresba z roku 1897. Podle téhle bytosti z Kalevaly dostal projekt jméno. Ilustrace: Hugo Simberg, Wikimedia Commons (volné dílo)

Od forku k přepisu

Costa a spoluzakladatel Pekka Enberg odešli z firmy ScyllaDB a v San Franciscu založili ChiselStrike. Potřebovali databázi pro cloudovou službu a sáhli po SQLite, který v roce 2000 napsal D. Richard Hipp. Naráželi ale na to, že Hipp drží záběr SQLite úmyslně malý a nepřijímá cizí příspěvky. Oznámení Tursa k tomu dodává, že uzavřená je i proslulá testovací sada SQLite.

ChiselStrike proto SQLite rozvětvil pod jménem libSQL. Drobnosti šlo doplňovat i tak, ale bohatší typový systém by znamenal sáhnout na samotné jádro. Firma se tedy pustila do úplného přepisu s krycím jménem Limbo. Mezitím se přejmenovala na Turso a Limbo převzalo jméno po ní; Turso je mořská obluda Iku-Turso z finské Kalevaly.

Dnešní Turso umí otevřít i vytvořit soubor SQLite. Oproti předloze přidává souběžné zápisy, bohatší typy a materializované pohledy, které se podle autorů aktualizují samy. Kód je pod licencí MIT a k 30. červenci má repozitář na GitHubu přes 23 tisíc hvězd. Oznámení uvádí přes 260 přispěvatelů – to číslo pochází od firmy a nezávisle jsme ho neověřovali.

SQLite je uvnitř virtuální stroj

Celý nápad stojí na jedné vlastnosti SQLite, kterou zvenčí není vidět. SQLite dotaz nevykonává přímo: přeloží ho do vlastního bajtkódu zvaného VDBE a ten pak spouští. Není to univerzální jazyk jako bajtkód Javy, instrukce mají databázový význam typu „najdi záznam v B-stromu“. Pořád je to ale bajtkód a Turso stejný návrh převzalo.

Aby autoři ukázali, že jejich verze toho bajtkódu zvládne i něco jiného než dotazy, napsali malý překladač z jazyka C do VDBE a přeložili jím Doom. Hra běží přímo v databázovém stroji: každý vykreslený snímek je jeden řádek výsledku a paměť zastupují binární data, ze kterých se čte a do kterých se zapisuje. Demo je na stránce oznámení a spustí se v prohlížeči.

Co znamená psát Postgres v Tursu

Spojit SQLite s Postgresem zkoušel kdekdo, obvykle překladem dotazů z jednoho dialektu do druhého. Turso jde jinudy. Postgres se rozebere do společné stromové podoby dotazu a ta se přeloží do téhož bajtkódu – jazykové rozhraní se tedy stává vyměnitelnou součástkou.

Rozdíly mezi oběma databázemi tím nemizí. Postgres drží řádky v haldových souborech s oddělenými indexy, verzuje záznamy a musí po sobě uklízet průchodem zvaným vacuum; SQLite skládá všechno do jednoho B-stromu. Podle oznámení jde ale o rozdíly v uspořádání dat na disku, ne v tom, co databáze dělá – a co v bajtkódu chybí, se do něj doplní.

Prototyp jménem pgmicro už je začleněný do hlavní větve. „Turso se stává LLVM databází. Jedno moderní a spolehlivé jádro, nad ním víc databázových rozhraní přeložených do něj,“ stojí v oznámení (přeloženo). Firma zmiňuje jako další možné kandidáty MySQL a Redis.

Motivem není nespokojenost s Postgresem. „Nemyslím si, že by na Postgresu bylo něco zásadně špatně. Kdyby bylo, nepřepisovali bychom ho,“ řekl Costa serveru The Register (přeloženo). Argumentem je architektura: nová databáze podle oznámení nemá držet vlastní proces pro každé připojení a má běžet i v prohlížeči nebo jako jediný soubor.

Co zatím není hotové

Oznámení samo píše, že jde o základ, ne o hotový produkt. Balíčky ke stažení nejsou žádné; kdo si to chce zkusit, musí si projekt přeložit ze zdrojového kódu příkazem cargo run v adresáři postgres/cli.

Úplná shoda s Postgresem se navíc neplánuje. Firma píše, že cílí na „dostatečnou“ kompatibilitu v základní funkčnosti, ne na sto procent, protože některé věci chce dělat jinak – materializované pohledy se v Tursu aktualizují průběžně a autoři nevidí důvod doplňovat kvůli shodě i variantu, která to nedělá. Síťový protokol a serverovou část slibují, takže by se stávající aplikace i klient psql měly připojit beze změny.

Dvě věci zůstávají otevřené. Procedurální jazyk PL/pgSQL firma nejspíš nenapíše přímo, ale postaví něco vlastního a k tomu vrstvu, která PL/pgSQL zpřístupní. U rozšíření Postgresu má zatím jen důkaz proveditelnosti: nahrávají se v kontejneru WebAssembly, což stojí výkon, a firma výslovně píše, že se touhle cestou vydat nemusí a některá rozšíření nepůjdou nikdy.

Termín zazněl jediný a je to slib, ne plán s daty: dost velkou část Postgresu na to, aby byl v praxi užitečný, chtějí autoři mít během pár měsíců.

Kde to stojí mezi ostatními

Databáze, která umí mluvit víc jazyky, není nová myšlenka. Nabízí se Spanner od Googlu a Cosmos od Microsoftu, oba ale podle Costy pracují ve vrstvení výš. Blíž má Turso podle The Register k projektu Apache DataFusion, rovněž psanému v Rustu. Rozdíl shrnul Costa tak, že Turso sedí na nejnižší možné úrovni, přesně jednu vrstvu nad úložným strojem.

Náš názor: na hodnocení je brzy. Zajímavé na oznámení není to, že někdo přepisuje Postgres – takových pokusů byla řada –, ale že se to tentokrát dělá nad jádrem, které už jednu velkou databázi obsluhuje a je veřejně k vyzkoušení. Jestli to vyjde, ukáže až chvíle, kdy půjde ta „dostatečná“ kompatibilita změřit na skutečné aplikaci.

Zdroje

Programování

Diskuse

Zatím tu nikdo nediskutuje.

Diskutovat mohou přihlášení čtenáři – přihlaste se nebo si založte účet.

← zpět na výpis