- 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.comherunterladen - Auf Unix-Systemen
chmod +xausfü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 inredbean-3.0.0-cosmos.comeingefügt wird- Gebaut werden kann auch mit dem enthaltenen Python-3.6+-Skript
zipitup.py
- Gebaut werden kann auch mit dem enthaltenen Python-3.6+-Skript
- Während der Entwicklung kann mit
redbean-3.0.0-cosmos.com -D filesdie App aus dem Unterverzeichnisfilesbereitgestellt 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
- Ein Template-System könnte helfen, String-Verkettung und
1 Kommentare
Hacker-News-Kommentare
Wirklich cool. Ich habe hier einen animierten GIF-Screenshot hochgeladen: https://simonwillison.net/2025/Feb/6/sqlite-page-explorer/
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
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...
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.
titleangezeigt, 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.