Přeskočit na obsah
Magazín Chatujme.cz
Programování · čtení na 4 min

Turso přepsal SQLite do Rustu, nad stejným jádrem teď 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.

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

Diskuse

Zatím tu nikdo nediskutuje. Můžete být první.

Napsat příspěvek

Diskutovat můžete i bez účtu. S registrací se ale příspěvek zveřejní hned a nemusíte pokaždé vyplňovat jméno. Účet už máte? Přihlaste se.

Nezveřejňujeme ho, slouží jen redakci.

Podporuje zápis Texy: **tučně**, *kurzíva*, odrážky, odkazy.

Dál k tématu

Programování

Pád ripgrepu ukazuje na chybu v jádře Linuxu. Model od OpenAI odmítl s laděním pomoct

Vývojář nahlásil 26. července, že ripgrep sestavený proti knihovně musl občas spadne při hledání v obřím stromu adresářů. O dva dny později zveřejnil analýzu, podle které za pádem stojí souběh ve správě paměti jádra Linuxu: vlákno přestane vidět bajt, který samo o deset instrukcí dřív zapsalo. Potvrzení od vývojářů jádra zatím není.

Programování

Na kontrolu do Debianu čeká 36 balíčků, nejstarší tři týdny. Fronta je veřejně vidět

Než se nový balíček dostane do Debianu, musí někdo ručně ověřit, že jeho licence odpovídají pravidlům svobodného softwaru. Od letošního února má tahle fronta veřejný přehled, do kterého vidí kdokoli – dřív podle jeho autorů takový pohled zvenčí nebyl. Podíval jsem se, co v něm dnes stojí: 36 balíčků čeká na kontrolu, nejstarší z nich 21 dní, a za týden od 22. do 29. července jím prošlo 89 kontrol.

Programování

MCP se stal bezstavovým: zmizel úvodní handshake i hlavička se session

Protokol MCP, kterým jazykové modely sahají na cizí nástroje a data, vyšel 28. července v nové verzi. Podstatná změna je jediná, zato hluboká: zmizel úvodní handshake a hlavička s identifikátorem relace, takže každý požadavek nese všechno potřebné sám. Server si tedy nemusí nic pamatovat mezi voláními a provozovatel ho může postavit za obyčejný load balancer. Starší verze podle autorů fungují dál nejméně rok.

Programování

Unity ohlásilo verzi 7 na rok 2027. Slib, že se nic nerozbije, má výjimky

Unity ohlásilo 21. července na konferenci Unite Seoul plán sedmé generace svého herního nástroje. Beta má být v prosinci, vydání v prvním čtvrtletí 2027. Firma slibuje, že se projekty z šestky přenesou bez přestavby; její vlastní příručka k novému běhovému prostředí přitom vyjmenovává změny, které starý kód rozbijí.