Alle Artikel und Kommentare von Hacker News von 2006–2025, gesichert in 22 GB SQLite
(hackerbook.dosaygo.com)- Hacker Book ist ein Projekt, das die vollständigen Daten von Hacker News von 2006 bis 2025 im SQLite-Format bewahrt
- Es besteht aus insgesamt 46.399.072 Beiträgen und 1.637 Shards und umfasst 19 Jahre HN-Geschichte
- Es ist keine serverseitige App, sondern nutzt zu WASM kompiliertes SQLite und lädt bei Bedarf nur Teile als Shards herunter, um sie anzuzeigen
- Über die Weboberfläche lassen sich Beiträge, Nutzer und Kommentare durchsuchen; sie bietet eine der Live-Struktur von HN ähnliche UI
- Zu den Top-Beiträgen gehören verschiedene Themen wie KI, Open Source, Technikgeschichte und gesellschaftliche Fragen
- Es ist eine Ressource, die Entwicklern und Forschern eine Grundlage für langfristige Datenanalysen von Internet-Technik-Communities bietet
Überblick über Hacker Book
- Hacker Book ist ein Projekt, das die vollständigen Daten von Hacker News als SQLite-Datenbank bereitstellt
- Die Daten decken den Zeitraum vom 9. Oktober 2006 bis zum 28. Dezember 2025 ab
- Insgesamt besteht es aus 46.399.072 Einträgen (items), 1.637 Shards und 8,5 GB Größe (Informationen am Seitenende)
- Die Website ist unter https://hackerbook.dosaygo.com/ erreichbar
- Die Oberfläche ähnelt Hacker News und zeigt Beitragslisten, Punkte, Anzahl der Kommentare und Autorinformationen an
Datenstruktur und Navigationsfunktionen
- Jeder Eintrag besteht aus Beitragstitel, Ursprungsdomain, Punkten, Autor, Kommentaranzahl und Erstellungszeit
- Die Navigation ist über nutzerspezifische Seiten (view=user&id=) und Detailseiten zu Beiträgen (view=item&id=) möglich
- Über den Link „More“ können seitenweise weitere Einträge geladen werden
Technische Details
- Die Daten werden im SQLite-Format bereitgestellt, sodass in einer lokalen Umgebung Abfragen und Analysen möglich sind
- Durch die Zusammenführung der vollständigen HN-Historie in einer einzigen Datenbank können Forscher oder Entwickler zeitbasierte Trendanalysen durchführen
- Die Struktur mit Datenaufteilung (Sharding) unterstützt die effiziente Verwaltung sehr großer Datenmengen
Bedeutung des Projekts
- Es fungiert als digitales Archiv zur Bewahrung von 19 Jahren angesammeltem Community-Wissen von Hacker News
- Es erhöht die Zugänglichkeit offener Daten und kann für Forschungen zur Technikgeschichte oder Community-Analysen genutzt werden
- Wie der Slogan „All the HN Belong to You“ andeutet, wird die gesamte Aufzeichnung der Community öffentlich zugänglich gemacht, damit sie jeder durchsuchen kann
1 Kommentare
Hacker-News-Meinungen
Der Kern dieses Projekts ist, dass alles vollständig im Browser läuft, nicht auf dem Server
SQLite wird zu WASM kompiliert verwendet, und statt die komplette 22-GB-Datenbank herunterzuladen, werden nur die shardweisen Daten geladen, die für die jeweilige Seite nötig sind
Im Netzwerk-Panel war zu sehen, wie Dateien wie
shard_1636.sqlite.gzundshard_1635.sqlite.gznacheinander geladen werdenDas erinnert an den früheren SQLite.js-HTTPVFS-Trick, aber diesmal werden statt Range-Headern geshardete Dateien verwendet
In der interaktiven SQL-Abfrageoberfläche kann man direkt auswählen, auf welchem Shard die Abfrage ausgeführt werden soll (insgesamt 1636)
So ein Read-only-VFS lässt sich mit der passenden API sehr einfach implementieren
Ein VFS-Beispiel, das ich gebaut habe, ist hier zu finden
Ein Beispiel mit Range-Requests gibt es unter diesem Link
Um mit Zstandard komprimierte SQLite-Datenbanken zu unterstützen, muss man nur diese Bibliothek hinzufügen
Ich frage mich, ob es noch mehr Beispiele gibt, die diese HTTP-Range-basierte Idee auf echtem Produktionsniveau umgesetzt haben. Das wirkt sehr vielversprechend
Die VFS-Unterstützung ist wirklich erstaunlich
Es wäre großartig, wenn sich das in Kiwix integrieren ließe
Ich benutze inzwischen ein reines Offline-Handy und lese darauf Wikipedia, Wiktionary und die 100rabbits-Website komplett offline
Ich frage mich, wie viel kleiner es mit stärkerer Komprimierung noch werden könnte
Kommentare wie „Ich mag diese Website nicht, weil sie die Scrollbar kapert“ ließen sich vermutlich schon mit ein paar Bits kodieren
Ich habe
select * from items limit 10ausgeführt, aber es kam kein Ergebnis zurück, weil die Shards einzeln durchlaufen wurdenEs blieb bei etwa 60 Shards hängen. Wenn man nur einen einzelnen Shard angibt, kommt das Ergebnis sofort
DuckDB wäre vermutlich schneller, weil es bei Parquet-Dateien nur die per HTTP benötigten Teile lesen kann
Der Fehler bei den Tabellen
usersunduser_domainslässt sich beheben, wenn man den Shard-Filter auf den User-Stats-Shard umstelltSo wie es Single-page applications (SPA) gibt, könnte es vielleicht auch das Konzept einer Single-table application (STA) geben
Wenn man eine Tabelle nach mehreren Schlüsseln shardet und als statische Dateien bereitstellt, ließe sich öffentlich freigegebene Daten ähnlich wie statisches HTML verteilen
Das Repository ist als 404 verschwunden
Ich hätte gern wenigstens bei einem Teil der Daten die interne Struktur gesehen
Ich bekomme ebenfalls einen 404-Fehler
Ich frage mich, ob die Trade-offs zwischen einem spaltenorientierten Store wie DuckDB und SQLite berücksichtigt wurden
Mir ist wieder klar geworden, dass Text viel effizienter ist als Video
Ich will mir gar nicht vorstellen, wie groß dieselbe Wissensmenge in Videoform wäre
Wenn man 22 GB Text in Video umwandeln würde, käme man auf etwa 1 PB (1000 TB)
Bei Brettspielen oder Programmiervideos ist es aber meist besser, einfach eine Textzusammenfassung zu lesen
Es wäre schön, wenn man das als .zim-Datei bauen könnte, damit es sich in einem Offline-Browser wie Kiwix ansehen lässt
Ich lege gelegentlich einen „Nur-offline-Tag“ ein, um Lerninhalte zu ordnen, und nutze dann Kiwix für Wikipedia oder StackOverflow
Vorstellung der Kiwix-Bibliothek
Ich habe auch etwas Ähnliches gemacht
Ich habe in Rust ein Tool gebaut, das den Project-Arctic-Shift-Dump von Reddit nach SQLite importiert
Wenn man keinen FTS5-Index anlegt und ohne WAL mit
--unsafe-modeimportiert, lassen sich alle Kommentare und Beiträge in ungefähr 24 Stunden importieren, und es entsteht eine Datenbank von etwa 10 TBDie JSON-Funktionen von SQLite sind großartig, aber ich habe mich dafür entschieden, beim Laden einmal zu parsen und dann zu normalisieren
Der Datenbank-Build ist schnell, aber wenn man direkt danach VACUUM ausführt, werden die Abfragen deutlich schneller. VACUUM selbst dauert allerdings mehrere Tage
Pushshift Importer / Arctic-Shift-Dump-Link