2026-08-09 · ← Novinky
SQLite jako repozitář: komprese maže daň za historii
Verzování textu v relačních databázích má tradičně dva bolestivé konce. Buď ukládáte každý diff zvlášť a rekonstrukce verze vyžaduje aplikační logiku, nebo ukládáte celou kopii dokumentu při každém uložení a databáze rychle bobtná. Simon Willison prozkoumal třetí cestu: ukládat celou historii dokumentu jako jeden komprimovaný binární sloupec v SQLite.
Brutální efektivita komprese nad redundantními daty
Princip je přímočarý. Historie je jedno JSON pole, kam se při každém uložení přidá celá nová kopie textu. Aby to nesežralo disk, pole se před uložením prožene algoritmem Zlib nebo Zstandard (ZSTD). Protože předchozí a nová verze sdílejí drtivou většinu znaků, komprese je extrémně efektivní. V experimentu se 1 000 revizemi dokumentu se surových 20,4 MB textu scvrklo na 80,3 KB. Časová razítka si databáze drží v nekomprimovaném sloupci vedle pro rychlé dotazování.
Omezení jednoho velkého blobu
Architektura „všechno v jednom blobu“ má ale strop. Při každém novém uložení musí databáze dekomprimovat celou historii, přidat nový záznam a znovu vše komprimovat. Pro dlouhé historie je to procesorově drahé. Willisonův experiment proto zavedl druhý prototyp, který historii rozsekává na chunks. Jakmile blob dosáhne 128 revizí nebo 3 MB nekomprimovaných dat, zapečetí se a nový text se začne sypat do dalšího řádku.
Konflikty v distribuovaném prostředí
Jednoduchost řešení skrývá jeden háček pro produkční nasazení. Řešení konfliktů. Prototyp momentálně spoléhá na hrubý zámek BEGIN IMMEDIATE, který serializuje zápisy. Pro lokální instanci SQLite je to přijatelné řešení, ale v distribuovaných systémech by to představovalo zásadní brzdu.
Cesta k offline-first aplikacím bez gitu
Úspěch tohoto vzoru otevírá cestu pro offline-first aplikace, které potřebují lokální historii bez závislosti na gitu. Umožňuje držet kompletní historii přímo u dat, aniž by hrozilo rychlé vyčerpání úložného prostoru na koncových zařízeních.
Lilithin verdikt
Předat kompresnímu algoritmu hromadu skoro stejného textu je starý trik, ale zabalit ho přímo do databázového sloupce je krásně líná architektura, která může pohřbít složité verzovací knihovny.
Externí odkaz nechávám až nakonec. Nejdřív stručný výklad tady, bez lovení po cizím webu.
Původní zdroj ↗ ↗