>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Beveiliging
Rust

SQLite comprimeren zonder pijn: De magie van sqlite-zstd

1.681 sterren

Stel je dit voor: je app met een SQLite database is gegroeid tot gigabytes, backups duren eindeloos, en I/O-operaties vertragen alles. Herkenbaar? De sqlite-zstd extensie biedt een elegante oplossing — rij-niveau compressie terwijl willekeurige datatoegang behouden blijft.

Wat is dit ding?

sqlite-zstd is een SQLite extensie geschreven in Rust die transparante rij-niveau data compressie toevoegt met behulp van het Zstandard (zstd) algoritme. In tegenstelling tot het comprimeren van de hele database in één keer, maakt deze aanpak het volgende mogelijk:

  • Tot 80% ruimte besparen (volgens de auteur)
  • Willekeurige toegang tot data behouden
  • Prestatie-impact minimaliseren

Size comparison

Voor wie is dit?

Het project is vooral nuttig voor:

  1. Mobile ontwikkelaars, waar elke megabyte telt
  2. Services met grote logs of historische data
  3. Applicaties die werken met JSON/tekst data in SQLite
  4. Ontwikkelaars van embedded systems met beperkte opslag

Belangrijkste functies

1. Transparante compressie

SELECT zstd_enable_transparent('{"table": "logs", "column": "data", "compression_level": 19}')

Hierna worden alle bewerkingen op de logs tabel automatisch data comprimeren/decomprimeren in de data kolom. Je code merkt de veranderingen niet eens!

2. Incrementele onderhoud

SELECT zstd_incremental_maintenance(60, 0.5);

Met deze functie kun je data geleidelijk comprimeren zonder de database lang te vergrendelen. Je kunt specificeren hoe lang er gewerkt moet worden en hoeveel tijd er overblijft voor andere bewerkingen.

3. Ondersteuning voor dictionaries

Het project kan dictionaries aanmaken en gebruiken voor betere compressie:

SELECT zstd_train_dict(data, 100000, 1000) FROM logs

Dit is vooral effectief voor gestructureerde data (bijv. JSON met herhalende keys).

Hoe het werkt onder de motorkap

  1. Er wordt een verborgen _table_zstd tabel aangemaakt voor elke comprimeerbare tabel
  2. De originele tabel wordt een VIEW die transparant data comprimeert/decomprimeert
  3. Bij INSERT/UPDATE wordt data automatisch gecomprimeerd
  4. Bij SELECT wordt het gedecomprimeerd

Praktische gebruiksscenario's

Voorbeeld 1: Applicatielogs

# Python пример с Datasette
import sqlite3
import sqlite_zstd

conn = sqlite3.connect('logs.db')
sqlite_zstd.load(conn)

# Включаем сжатие для колонки с логами
conn.execute("""
    SELECT zstd_enable_transparent('{"table": "logs", "column": "message"}')
""")

Voorbeeld 2: JSON API responses opslaan

// Rust пример
let conn: rusqlite::Connection;
sqlite_zstd::load(&conn)?;

conn.execute(
    "SELECT zstd_enable_transparent('{\"table\": \"cache\", \"column\": \"json\"}')',
    [],
)?;

Beperkingen

  • Nog niet productierijp (volgens de auteur)
  • Ondersteunt geen ATTACH voor gecomprimeerde databases
  • Beperkte ondersteuning voor DDL-bewerkingen
  • Alleen voor TEXT/BLOB kolommen

sqlite-zstd is:

✅ Een eenvoudige oplossing voor het verkleinen van SQLite databasegrootte ✅ Minimale wijzigingen in bestaande code ✅ Flexibele controle over het compressieproces

Probeer het als:

  • Je SQLite database is gegroeid tot een onredelijke grootte
  • Je veel tekst/binaire data moet opslaan
  • Je klaar bent voor experimenteren (maar met backups!)

Het project ontwikkelt actief en heeft inmiddels bijna 1.6k sterren verzameld op GitHub. Ruimte besparen? Nu is het perfecte moment om sqlite-zstd te integreren!

Gerelateerde projecten