16 ポイント 投稿者 GN⁺ 2025-12-31 | 1件のコメント | WhatsAppで共有
  • 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件のコメント

 
GN⁺ 2025-12-31
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のサイトを全部オフラインで見ています

  • さらに圧縮したらどれくらい小さくなるのか気になります
    「このウェブサイトはスクロールバーを乗っ取るから嫌いだ」みたいなコメントは、数ビットでもエンコードできそうです

    • Brotliのハードコード辞書のようにするのも不自然ではなさそうです(関連リンク
    • 自分のコメントを全部抜けば5ビットで十分そうです
  • select * from items limit 10を実行してみましたが、shardを1つずつ巡回するせいで結果が返ってきません
    60個のshardまで進んだところで止まりました。shardを1つだけ指定すると即座に結果が出ます
    DuckDBならparquetファイルの必要な部分だけをHTTPで読めるので、もっと速そうです
    usersuser_domains テーブルのエラーは、shardフィルタをuser stats shardに切り替えると解決します

    • おかしいですね。VFSならこういう動作にはならないはずです。たぶんVFSではないのかもしれません
  • Single-page application(SPA) のように、Single-table application(STA) という概念が生まれるかもしれません
    テーブルを複数のキーでshardして静的ファイルとして配信すれば、公開できるデータなら静的HTMLのように配布できます

    • Baked Dataアーキテクチャパターンがこれに似ています
    • 「single table」ではなく「single database」のことでしたか? 関係のないアプリを作るのは難しいですが、Redditは「things」という巨大な単一テーブルで運用していました
  • リポジトリが404で消えました
    一部のデータだけでも内部構造を見たかったので残念です

    • 本当にあっという間に落とされました。最近のHNデータセットを探しているのですが、ほとんど見つかりません
  • 私も404エラーが出ます
    DuckDBのようなカラムナストアとSQLiteのトレードオフを検討したのか気になります

    • たぶんMSがリポジトリを下げたのかもしれません。他のリポジトリは無事です
    • 私はそのままSQLiteに直行しました。DuckDBが何なのかあまり知りません
    • DuckDBのほうが圧縮はうまいでしょうが、SQLiteの普遍性を考えると標準的な選択として十分です
    • SQLiteは単一ファイルでDBを扱えるので、アーカイブに向いています
  • テキストが動画よりはるかに効率的だと改めて感じました
    同じ量の知識を動画に詰め込むとしたら、どれほど大きくなるのか想像もつきません

    • YouTubeは20分の動画に有用な単語が100個くらいしか入っておらず、クリックを誘うばかりです。非効率がひどいです
    • 1080p60の動画は毎秒5Mbpsで、毎秒12万語に相当します。平均話速150wpmで計算すると、テキストは5万倍効率的です
      22GBのテキストを動画にすると、およそ1PB(1000TB)になります
    • 最近はvideo LLMでテキストベースの動画や図表を自動生成することもできます
      ボードゲームやプログラミング動画は、普通にテキストで要約して読むほうがよいです
  • これを**.zimファイル**にして、Kiwixのようなオフラインブラウザで見られるとよさそうです
    私はときどき「オフライン専用日」を決めて学習内容を整理していて、KiwixでWikipediaやStackOverflowを参照しています
    Kiwixライブラリ紹介

    • このようなコンテンツが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リンク

    • SQLiteのauto_vacuumを使えば、DB全体を作り直さなくても空き領域を回収できます