>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicherheit
Rust

SQLite komprimieren ohne Schmerzen: Die Magie von sqlite-zstd

1.681 Sterne

Stellen Sie sich vor: Ihre App mit einer SQLite-Datenbank ist auf Gigabytes angewachsen, Backups dauern ewig und I/O-Operationen bremsen alles aus. Klingt bekannt? Die sqlite-zstd-Erweiterung bietet eine elegante Lösung — zeilenbasierte Komprimierung bei erhaltenem wahlfreiem Datenzugriff.

Was ist das?

sqlite-zstd ist eine SQLite-Erweiterung, die in Rust geschrieben wurde und transparente zeilenbasierte Datenkomprimierung mit dem Zstandard (zstd) Algorithmus hinzufügt. Im Gegensatz zur Komprimierung der gesamten Datenbank auf einmal ermöglicht dieser Ansatz:

  • Einsparung von bis zu 80% des Speicherplatzes (laut dem Autor)
  • Erhalt des wahlfreien Datenzugriffs
  • Minimale Auswirkungen auf die Performance

Größenvergleich

Für wen ist das gedacht?

Das Projekt ist besonders nützlich für:

  1. Mobile Entwickler, wo jedes Megabyte zählt
  2. Services mit großen Logs oder historischen Daten
  3. Anwendungen, die mit JSON-/Textdaten in SQLite arbeiten
  4. Entwickler eingebetteter Systeme mit begrenztem Speicher

Hauptfunktionen

1. Transparente Komprimierung

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

Danach werden alle Operationen auf der Tabelle logs automatisch Daten in der Spalte data komprimieren/dekomprimieren. Ihr Code wird die Änderungen nicht einmal bemerken!

2. Inkrementelle Wartung

SELECT zstd_incremental_maintenance(60, 0.5);

Diese Funktion ermöglicht es, Daten schrittweise zu komprimieren, ohne die Datenbank lange zu sperren. Sie können angeben, wie lange gearbeitet werden soll und wie viel Zeit für andere Operationen übrig bleiben soll.

3. Wörterbuch-Unterstützung

Das Projekt kann Wörterbücher für eine bessere Komprimierung erstellen und verwenden:

SELECT zstd_train_dict(data, 100000, 1000) FROM logs

Dies ist besonders effektiv für strukturierte Daten (z. B. JSON mit sich wiederholenden Schlüsseln).

Wie es unter der Haube funktioniert

  1. Für jede komprimierbare Tabelle wird eine versteckte _table_zstd Tabelle erstellt
  2. Die ursprüngliche Tabelle wird zu einer VIEW, die Daten transparent komprimiert/dekomprimiert
  3. Bei INSERT/UPDATE werden Daten automatisch komprimiert
  4. Bei SELECT werden sie dekomprimiert

Praktische Anwendungsfälle

Beispiel 1: Anwendungslogs

# 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"}')
""")

Beispiel 2: Speicherung von JSON-API-Antworten

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

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

Einschränkungen

  • Noch nicht produktionsreif (nach Meinung des Autors)
  • Unterstützt kein ATTACH für komprimierte Datenbanken
  • Eingeschränkte DDL-Operations-Unterstützung
  • Nur für TEXT-/BLOB-Spalten

sqlite-zstd ist:

✅ Eine einfache Lösung zur Reduzierung der SQLite-Datenbankgröße ✅ Minimale Änderungen am bestehenden Code ✅ Flexible Kontrolle über den Komprimierungsprozess

Probieren Sie es aus, wenn:

  • Ihre SQLite-Datenbank auf eine unvernünftige Größe angewachsen ist
  • Sie viele Text-/Binärdaten speichern müssen
  • Sie bereit für Experimente sind (aber mit Backups!)

Das Projekt wird aktiv weiterentwickelt und hat bereits fast 1,6k Sterne auf GitHub gesammelt. Sie möchten Speicherplatz sparen? Jetzt ist der perfekte Zeitpunkt, sqlite-zstd zu integrieren!

Ähnliche Projekte