1 Punkte von GN⁺ 2025-02-08 | 1 Kommentare | Auf WhatsApp teilen
  • SQLite Page Explorer ist eine kleine GUI-Anwendung, mit der sich SQLite-Datenbanken so erkunden lassen, wie SQLite sie sieht: auf Ebene der Datenträgerseiten
  • Statt der Schema-Ebene mit Tabellen, Zeilen und SQL, mit der Entwickler normalerweise arbeiten, zeigt es die Seitenebene, sodass sich die tatsächliche Datenträgerstruktur von Indizes und die Speichereffizienz untersuchen lassen
  • Mit redbean, cosmopolitan und αcτµαlly pδrταblε εxεcµταblε wird es als 6,5-MB-Einzeldatei ausgeliefert und läuft nativ auf Windows, Linux, MacOS, verschiedenen BSDs sowie auf ARM64 und x64
  • Die ausführbare Datei ist zugleich auch eine zip-Datei, die Lua-Code, Parser für binäre Datenbankformate und mehr enthält; zieht man eine Datenbankdatei darauf oder startet sie in der Konsole, öffnet sich die App in einem Browser-Tab
  • Ausführbare Dateien im APE-Format können bei der Virenerkennung von Browsern oder Betriebssystemen Fehlalarme auslösen, und bei großen Datenbanken über 500 MB kann das Laden der obersten Ansicht langsam sein

GUI zum direkten Betrachten von SQLite-Seiten

  • SQLite Page Explorer ist eine kleine GUI-Anwendung, mit der sich SQLite-Datenbanken „page by page“ erkunden lassen
  • SQLite und die meisten Datenbanken speichern Daten üblicherweise in 4-KB-großen Datenträgerblock-Seiten, eine Struktur zur Beschleunigung von Lese- und Schreibvorgängen
  • Die normale Arbeit von Entwicklern findet auf der Schema-Ebene mit Tabellen, Zeilen und SQL statt, aber dieses Tool ermöglicht einen Blick auf die Seitenebene, wie SQLite sie sieht

Was sich bei der Erkundung auf Seitenebene sehen lässt

  • Man kann sehen, wie Indizes auf dem Datenträger tatsächlich aussehen
    • Indizes werden im Grunde wie eigene kleine Tabellen gespeichert
  • Man kann untersuchen, wie sich Daten kompakter speichern lassen, was dazu beitragen kann, Abfragen und Anwendungen schneller zu machen
  • Es hilft dabei, Probleme und Ineffizienzen zu finden, die auf Schema-Ebene möglicherweise nicht sichtbar sind
  • Man erhält ein Gefühl für B-Bäume, eine wichtige Datenstruktur, die Dateisystemen und Datenbanken zugrunde liegt

Als Einzeldatei überall ausführbar

  • Es wird mit redbean, cosmopolitan und αcτµαlly pδrταblε εxεcµταblε als einzelne 6,5-MB-Datei verteilt
  • Es läuft auf Windows, Linux, MacOS und verschiedenen BSDs und unterstützt sowohl ARM64 als auch x64
  • Die ausführbare Datei ist zugleich auch eine zip-Datei, die den Lua-Code zum Ausführen der App, Parser für binäre Datenbankformate und mehr enthält

Installation und Ausführung

  • Auf der Release-Seite sqlite-page-explorer.com herunterladen
  • Auf Unix-Systemen chmod +x ausführen
  • Die Datenbankdatei auf die ausführbare Datei ziehen oder in der Konsole so starten
    • sqlite-page-explorer.com mySqliteDatabase.db
  • Die App öffnet sich in einem Browser-Tab
  • Nach der Nutzung in der Konsole zweimal Ctrl-C drücken

Hinweise und Entwicklungsweise

  • APE-Dateien können bei der Virenerkennung von Browsern oder Betriebssystemen Fehlalarme auslösen
    • Projekte wie llamafile nutzen dieselbe Polyglot-Binärtechnik
    • Bei aus dem Internet heruntergeladenen Dateien ist die übliche Vorsicht geboten
  • Bei großen Datenbanken über 500 MB kann das Laden der obersten Ansicht, bei dem alle Seiten gelesen werden, langsam sein
  • Der Build funktioniert, indem der Inhalt von files/ als zip in redbean-3.0.0-cosmos.com eingefügt wird
    • Gebaut werden kann auch mit dem enthaltenen Python-3.6+-Skript zipitup.py
  • Während der Entwicklung kann mit redbean-3.0.0-cosmos.com -D files die App aus dem Unterverzeichnis files bereitgestellt werden, ohne jedes Mal das zip neu zu erstellen
  • Das Projekt war Teil eines redbean-Experiments und der ersten Nutzung von Lua, daher gibt es noch Raum für Aufräumarbeiten im Code
    • Ein Template-System könnte helfen, String-Verkettung und Write()-Aufrufe zu reduzieren
    • Es gibt Ideen für Verbesserungen wie das automatische Beenden der Konsole beim Schließen des letzten Tabs oder ein Anhalten bei etwa 10.000 Seiten in riesigen Datenbanken vor einer Benutzerbestätigung
    • PRs sind willkommen

1 Kommentare

 
GN⁺ 2025-02-08
Hacker-News-Kommentare
  • Wirklich cool. Ich habe hier einen animierten GIF-Screenshot hochgeladen: https://simonwillison.net/2025/Feb/6/sqlite-page-explorer/

    • Eine Ehre :) Beim Bauen dachte ich mir: „Das ist etwas, das SimonW gefallen könnte.“ Danke, dass du so viele großartige LLM-Experimente und Texte teilst.
  • Cool! Es ist überraschend einfach, mit der SQLite-Dateiformat-Dokumentation daneben selbst anzufangen, Code zum Parsen von SQLite-Dateien zu schreiben.
    Es ist ähnlich zu dem, was dieses Projekt macht, und ich empfehle es sehr wegen der Gründe im Abschnitt „Why?“ der README.
    https://www.sqlite.org/fileformat.html

    • Stimmt, das Dateiformat ist leicht zu lesen! Ich habe mich einmal hingesetzt und in ein paar Stunden sogar einen Reader implementiert.
      Es gibt auch ein paar Visualisierungs-Tools, aber sie haben viel weniger Funktionen als die Software im Ausgangspost: https://www.nayuki.io/page/sqlite-database-file-visualizatio...
    • Ich habe das zufällig heute benutzt und es war nützlich.
  • Wirklich beeindruckend! Da ich mich früher schon mit den SQLite-Interna beschäftigt habe, weiß ich, dass solche Arbeit und solche Experimente alles andere als eine Kleinigkeit sind.
    In diesem Zusammenhang habe ich kürzlich sqlite-repr [1] gesehen, das mit Dioxus gebaut wurde und einen interessanten Ansatz zur SQLite-Visualisierung zeigt.
    [1] https://torymur.github.io/sqlite-repr/

  • So etwas habe ich vor über zehn Jahren beim Bau eines Security-Tools gemacht. Wenn man das so macht, schätzt man die dicht durchdachte Engine noch mehr.
    Ich dachte immer, schon ein Explorer oder nur eine Basisbibliothek dafür wäre interessant, deshalb freut es mich besonders, das unter MIT-Lizenz veröffentlicht zu sehen.

  • Sieht cool aus, gut gemacht.
    Auf dem ersten Bildschirm wäre eine Farblegende hilfreich. Anfangs wusste ich nicht, was die Farben bedeuten.
    Bei großen Datenbanken scheint es etwas zu kämpfen. Bei meiner mit 3,6 GB und 942719 Seiten wäre eine paginierte Anzeige der Seiten wohl sinnvoll.

    • Wenn man mit der Maus darüberfährt, wird der Seitentyp im Attribut title angezeigt, daher kann man das Farbschema schon erkennen, aber völlig eindeutig ist es nicht.
      Es stimmt auch, dass große Datenbanken langsam werden. Die Seiten werden „serverseitig“ durchlaufen, daher dauert es bei Hunderttausenden etwas.
      Ideal wäre wohl eine API für live scrollbare Seitenbereiche, aber auch etwas Einfaches wie „die nächsten 10.000 Seiten anzeigen“ wäre möglich.
  • Gutes Projekt, aber beim Ausführen der Binärdatei bekomme ich den Fehler "failed to run lua code: /index.lua:3: module 'utils' not found:".

  • Als jemand, der nicht diszipliniert genug ist, Vorlesungen oder Kurse bis zum Ende durchzuziehen, war das wirklich großartig, um visuell zu verstehen, was intern passiert und wie man Daten effizienter strukturieren kann.

  • Ich habe kürzlich einen Artikel geschrieben, der das SQLite-Dateiformat erklärt, und darin auch hilfreiche Diagramme aufgenommen. Das könnte nützlich sein.
    https://blog.jabid.in/2024/11/24/sqlite.html

  • Im SQLite-Quellcode ist ein CLI-Tool namens showdb enthalten, mit dem man gut in Datenbankdateien hineinschauen kann.

  • Cool. Ich lerne gerade Datenbanken, und das ist sehr hilfreich.