- Hacker Bookは、2006年から2025年までのHacker News全データをSQLite形式で保存したプロジェクト
- 合計46,399,072件の投稿、1,637個のシャードで構成され、HNの19年分の記録を含む
- サーバーサイドアプリではなく、WASMにコンパイルされたSQLiteを利用し、必要に応じて一部だけをシャード単位でダウンロードして表示する方式
- Webインターフェースを通じて投稿、ユーザー、コメントを探索でき、HNのリアルタイム構造に似たUIを提供
- 上位投稿にはAI、オープンソース、技術史、社会問題など多様なテーマが含まれている
- 開発者や研究者にとって、インターネット技術コミュニティの長期的なデータ分析基盤を提供する資料
Hacker Bookの概要
- Hacker Bookは、Hacker Newsの全データをSQLiteデータベースとして提供するプロジェクト
- データは2006年10月9日から2025年12月28日までの期間を含む
- 合計46,399,072件の項目(items)、1,637個のシャード(shards)、8.5GBの容量で構成(ページ下部の情報)
- Webサイトはhttps://hackerbook.dosaygo.com/ でアクセス可能
- インターフェースはHacker Newsに似た形式で、投稿一覧、ポイント、コメント数、投稿者情報を表示
データ構造と探索機能
- 各項目は投稿タイトル、出典ドメイン、ポイント、投稿者、コメント数、投稿時刻で構成
- ユーザー別ページ(view=user&id=) と 投稿別詳細ページ(view=item&id=) を通じて探索可能
- 「More」リンクを通じて、ページ単位で追加項目を読み込める
技術的詳細
- データはSQLiteフォーマットで提供され、ローカル環境でクエリと分析が可能
- HNの全記録を単一のデータベースに統合し、研究者や開発者が時間帯ごとのトレンド分析を行える
- **データ分割(sharding)**構造により、大容量データの効率的な管理を支援
プロジェクトの意義
- Hacker Newsに19年間蓄積されたコミュニティ知識を保存するデジタルアーカイブとして機能
- オープンデータへのアクセス性を高め、技術史研究やコミュニティ分析に活用可能
- **「All the HN Belong to You」**というスローガンのように、コミュニティ全体の記録を誰でも探索できるよう公開
1件のコメント
Hacker Newsの意見
このプロジェクトの核心は、サーバーではなくブラウザ内ですべて実行される点です
SQLiteをWASMにコンパイルして使い、22GBのDB全体を受け取る代わりに、ページに必要なshard単位のデータだけを取得する方式です
ネットワークパネルで
shard_1636.sqlite.gz,shard_1635.sqlite.gzのようなファイルが順番に読み込まれるのを確認しました昔のSQLite.js HTTPVFSトリックを思い出させますが、今回はrange headerの代わりにshardedファイルを使っています
インタラクティブSQLクエリインターフェースでは、どのshardにクエリを実行するかを直接選べます(全1636個)
このようなread-only VFSは、適切なAPIさえあればとても簡単に実装できます
私が作ったVFSの例はこちらにあります
range requestを使う例はこのリンクを参照
Zstandardで圧縮されたSQLite DBをサポートするには、このライブラリを1つ追加するだけで済みます
このようなHTTP rangeベースのアイデアを、実際に本番レベルで実装した事例が他にもあるのか気になります。かなり可能性がありそうです
VFSサポートは本当に驚きです
これをKiwixに統合できたらよさそうです
私は最近オフライン専用のスマホを使っていて、Wikipedia、Wiktionary、100rabbitsのサイトを全部オフラインで見ています
さらに圧縮したらどれくらい小さくなるのか気になります
「このウェブサイトはスクロールバーを乗っ取るから嫌いだ」みたいなコメントは、数ビットでもエンコードできそうです
select * from items limit 10を実行してみましたが、shardを1つずつ巡回するせいで結果が返ってきません60個のshardまで進んだところで止まりました。shardを1つだけ指定すると即座に結果が出ます
DuckDBならparquetファイルの必要な部分だけをHTTPで読めるので、もっと速そうです
usersとuser_domainsテーブルのエラーは、shardフィルタをuser stats shardに切り替えると解決しますSingle-page application(SPA) のように、Single-table application(STA) という概念が生まれるかもしれません
テーブルを複数のキーでshardして静的ファイルとして配信すれば、公開できるデータなら静的HTMLのように配布できます
リポジトリが404で消えました
一部のデータだけでも内部構造を見たかったので残念です
私も404エラーが出ます
DuckDBのようなカラムナストアとSQLiteのトレードオフを検討したのか気になります
テキストが動画よりはるかに効率的だと改めて感じました
同じ量の知識を動画に詰め込むとしたら、どれほど大きくなるのか想像もつきません
22GBのテキストを動画にすると、およそ1PB(1000TB)になります
ボードゲームやプログラミング動画は、普通にテキストで要約して読むほうがよいです
これを**.zimファイル**にして、Kiwixのようなオフラインブラウザで見られるとよさそうです
私はときどき「オフライン専用日」を決めて学習内容を整理していて、KiwixでWikipediaやStackOverflowを参照しています
Kiwixライブラリ紹介
私も似たようなことをやってみました
RedditのProject Arctic Shift dumpをSQLiteに取り込むツールをRustで作ってみました
FTS5インデックスを作らず、WALなしで
--unsafe-modeを使って取り込むと、全コメントと投稿を約24時間で取り込めて、約10TBのDBが生成されますSQLiteのJSON機能は素晴らしいですが、私はロード時に1回だけパースして正規化する方を選びました
DBのビルドは速いですが、VACUUMをすぐ実行するとクエリ速度がかなり速くなります。ただしVACUUMには数日かかります
Pushshift Importer / Arctic Shift dumpリンク