3 Punkte von GN⁺ 2024-11-16 | 1 Kommentare | Auf WhatsApp teilen

Visualisierung von SQLite-Indizes: Struktur

  • Bedeutung von Indizes: SQLite ist ein DBMS, das in Browsern, mobilen Apps und Betriebssystemen weit verbreitet ist, und eignet sich gut dafür, Indexstrukturen zu verstehen und ihre Speicherung auf Festplatte und im Speicher zu untersuchen.

Knoten- und Seitenstruktur

  • B-Baum-Struktur: Die Indizes von SQLite werden in einer B-Baum-Struktur gespeichert, wobei jeder Knoten mehrere Kinder hat.
  • Seiten und Zellen: Seiten speichern Zelldaten und enthalten einen Link zur rechten Kindseite. Zellen enthalten Indexdaten, rowId und einen Link zur linken Kindseite.

Analyse des SQLite-Quellcodes

  • Codebeispiel: Schreiben einer Funktion zur Indexanalyse. Zum Beispiel liest die Funktion sqlite3DebugBtreeIndexDump den Inhalt des ausgewählten Index und gibt ihn aus.
  • Verwendung von Docker: Mit Docker kann der Index-Dump getestet werden.

Visualisierung von Indizes

  • Visualisierungstool: Es wurde versucht, die Indexstruktur mit der Bibliothek d3-org-tree zu visualisieren, aber eine Darstellung der Struktur als Text ist einfacher.
  • PHP ImageMagick: Mit der PHP-Erweiterung ImageMagick werden Bilder erzeugt, bei denen sich Design und Abstände steuern lassen.

Verschiedene Indexbeispiele

  • Basisindex: Ein einfacher Index, der aus einem Datensatz besteht.
  • Unterschiedliche Anzahlen von Datensätzen: Indizes mit 1.000 und 1.000.000 Datensätzen.
  • Vergleich der Sortierrichtung: Vergleich von Indizes mit den Sortierrichtungen ASC und DESC.
  • Ausdrucksbasierte Daten: Erzeugen eines Index mit Ausdrücken.
  • Eindeutiger Index mit NULL-Werten: SQLite unterstützt eindeutige Indizes mit NULL-Werten.
  • Partieller Index: Erzeugen eines Index durch Herausfiltern von NULL-Werten.
  • Mehrspaltiger Index: Erzeugen eines Index, der mehrere Spalten umfasst.

Indexoptimierung

  • VACUUM und REINDEX: Befehle, die zur Optimierung bestehender Indizes verwendet werden.
  • Textdaten: Kurze Zeichenketten werden direkt in der Indexzelle gespeichert, lange Texte werden separat gespeichert.
  • Gleitkommadaten: Erzeugen eines Index, der Gleitkommadaten enthält.

Fazit

  • Verständnis der Indexstruktur: Verständnis der Indexstruktur von SQLite sowie der Datenspeicherung und des Datenzugriffs im B-Baum.
  • Bedeutung der Visualisierung: Durch die Visualisierung konnten verschiedene Indizes analysiert und verglichen werden.
  • Ausblick: Geplant sind die Visualisierung indexbasierter Suche und die Untersuchung interessanter SQL-Abfragen.

1 Kommentare

 
GN⁺ 2024-11-16
Hacker-News-Kommentar
  • Jede Zeile einer SQLite-Tabelle hat grundsätzlich eine eindeutige rowId, die wie ein Primärschlüssel funktioniert, wenn sie nicht explizit definiert wurde

    • Tatsächlich wird selbst dann rowId verwendet, wenn es einen Primärschlüssel gibt
    • Es wäre gut, den Primärschlüsselindex von WITHOUT ROWID-Tabellen zu visualisieren
    • Die beiden Indizes sehen ähnlich aus, aber der zweite Index mit weniger Seiten könnte schneller sein
    • Weniger Knoten bedeuten nicht zwangsläufig „schneller“
    • Am wichtigsten ist die Höhe des Baums
    • Zweitwichtig ist, was passiert, wenn im Index ein Wert gefunden wurde
    • Ob der Rest aus einer separaten Tabelle (rowid) geladen werden muss oder die Daten bereits vorhanden sind (ohne ROWID), ist besonders bei Bereichsabfragen wichtig
  • Ich wollte sehen, wie ein Datenbankmanagementsystem (DBMS) Indizes auf Festplatte und im Speicher speichert und abruft

    • SQLite wurde als Versuchsobjekt ausgewählt
    • SQLite hat einige Eigenheiten darin, wie es alles verarbeitet
    • Das gilt besonders für die Abfrageverarbeitung
    • SQLite bevorzugt tendenziell Einfachheit gegenüber Performance und ist daher anders implementiert als andere Datenbanken
    • SQLite konkurriert nicht mit anderen Datenbanken
    • Es konkurriert mit JSON- und XML-Dateien sowie mit persistenter Speicherung
    • Das bedeutet, dass die Art, wie SQLite irgendetwas implementiert, kaum zeigt, wie echte Datenbanken tatsächlich funktionieren
  • Die Website ist sehr gut lesbar, deshalb möchte ich sie lesen

  • „indexes“ wird sowohl als Verbform in der 3. Person Singular Präsens von „to index“ als auch als Plural des Substantivs „index“ verwendet

    • „indices“ dagegen ist die traditionelle Pluralform und wird besonders häufig in Mathematik und Naturwissenschaften verwendet
    • Im allgemeinen Englisch ist „indexes“ üblich, im technischen Bereich wird jedoch oft „indices“ bevorzugt, um sprachliche Präzision zu wahren
    • Die Verwendung von „indices“ erhöht die Klarheit, weil sie zwischen dem Indexierungsvorgang und dem Plural von Index unterscheidet
  • Es wäre gut zu sehen, wie PostgreSQL dieselbe Aufgabe ausführt, das zu vergleichen und dazu Notizen zu hinterlassen

  • Man könnte TGF für yEd erzeugen, um mit weniger Aufwand mehr verschiedene Layouts zu erhalten