- Einführung in einen Ansatz, bei dem mit den JSON-Funktionen von SQLite das ursprüngliche JSON-Dokument unverändert gespeichert und benötigte Felder über virtuelle generierte Spalten (virtual generated columns) extrahiert und indiziert werden
- Mit der Funktion
json_extract lassen sich Daten innerhalb von JSON wie Spalten behandeln, sodass Abfragen mit B-Tree-Indexgeschwindigkeit ausgeführt werden können
- Wenn neue Abfragemuster benötigt werden, lässt sich das Schema durch das Hinzufügen von Spalten und Indizes ohne Datenmigration erweitern
- Dieser Ansatz vereint die Flexibilität schemafreier Daten mit der Performance relationaler Datenbanken
- Hervorgehoben als praxisnahes Muster mit schlanker Struktur und hoher Performance für Entwickler, die SQLite einsetzen
Kombination von SQLite und JSON-Funktionen
- SQLite unterstützt JSON-Funktionen und -Operatoren, wodurch JSON-Daten direkt gespeichert und verarbeitet werden können
- Das JSON-Dokument wird unverändert in einer Spalte gespeichert, und nur die benötigten Informationen werden in virtuelle Spalten extrahiert
- Dieser Ansatz ermöglicht einen flexiblen Umgang mit Daten ohne festes Schema
- Das Team von DB Pro hat SQLite in den letzten Monaten intensiv genutzt und diese Funktionalität in der Praxis validiert
- SQLite kann bei passender Konfiguration auch in Produktionsumgebungen zuverlässig eingesetzt werden
Virtuelle generierte Spalten (Generated Columns)
- Mit
json_extract werden bestimmte Werte innerhalb von JSON als virtuelle generierte Spalten definiert
- Diese Spalten speichern die eigentlichen Daten nicht, sondern werden zum Zeitpunkt der Abfrage berechnet und stehen sofort zur Verfügung
- Es sind kein separates Backfill und keine Datenkopien nötig
- So lässt sich zum Beispiel eine Struktur umsetzen, bei der bestimmte Felder aus JSON extrahiert und wie normale Spalten verwendet werden
Indizes hinzufügen und Performance steigern
- Fügt man den virtuellen Spalten Indizes hinzu, können auch JSON-Daten mit B-Tree-Indexgeschwindigkeit durchsucht werden, genau wie normale Spalten
- Virtuelle Spalten mit Index bieten dieselbe Performance wie Spalten in relationalen Datenbanken
- Dieser Ansatz ermöglicht schnelle Suchen auch bei größeren JSON-Datenmengen
Neue Abfragemuster hinzufügen
- Wenn später Suchen über neue Felder nötig werden, reicht es aus, eine neue virtuelle Spalte und einen Index hinzuzufügen
- Beispiel: Extraktion des Felds
user_id und Erzeugung eines Indexes dafür
- Bestehende Datenzeilen müssen weder geändert noch migriert werden
- So entsteht sofortige Erweiterbarkeit für Abfragen, ohne die Datenstruktur ändern zu müssen
Vorteile und Bedeutung des Musters
- Dieses Muster verbindet die Flexibilität schemafreier JSON-Speicherung mit der Index-Performance relationaler Datenbanken
- In der frühen Entwurfsphase muss die Indexierungsstrategie nicht vorab vollständig festgelegt werden
- Stattdessen können Spalten und Indizes bei Bedarf ergänzt und gezielt optimiert werden
- Für Entwickler, die SQLite nutzen, wird es als einfacher und zugleich leistungsstarker Ansatz zur Datenverarbeitung vorgestellt
- DB Pro kündigt weitere Beiträge zu den verschiedenen Funktionen von SQLite an
Noch keine Kommentare.