16 điểm bởi GN⁺ 2025-12-31 | 1 bình luận | Chia sẻ qua WhatsApp
  • Hacker Book là một dự án lưu trữ toàn bộ dữ liệu Hacker News ở định dạng SQLite từ năm 2006 đến 2025
  • Gồm tổng cộng 46.399.072 bài đăng, 1.637 shard, bao phủ 19 năm lịch sử của HN
  • Không phải ứng dụng server-side mà sử dụng SQLite được biên dịch sang WASM, rồi chỉ tải xuống một phần theo shard khi cần để hiển thị
  • Có thể duyệt bài đăng, người dùng, bình luận qua giao diện web, với UI tương tự cấu trúc thời gian thực của HN
  • Các bài viết nổi bật gồm nhiều chủ đề như AI, mã nguồn mở, lịch sử công nghệ, vấn đề xã hội
  • Đây là nguồn dữ liệu giúp nhà phát triển và nhà nghiên cứu phân tích dài hạn cộng đồng công nghệ trên Internet

Tổng quan về Hacker Book

  • Hacker Book là dự án cung cấp toàn bộ dữ liệu của Hacker News dưới dạng cơ sở dữ liệu SQLite
    • Dữ liệu bao phủ giai đoạn từ 9/10/2006 đến 28/12/2025
    • Gồm tổng cộng 46.399.072 mục (items), 1.637 shard, dung lượng 8,5GB (theo thông tin ở cuối trang)
  • Có thể truy cập website tại https://hackerbook.dosaygo.com/
    • Giao diện có cấu trúc tương tự Hacker News, hiển thị danh sách bài viết, điểm, số bình luận, thông tin tác giả

Cấu trúc dữ liệu và tính năng duyệt

  • Mỗi mục gồm tiêu đề bài viết, domain nguồn, điểm, tác giả, số bình luận, thời gian đăng
  • Có thể duyệt qua trang theo người dùng (view=user&id=)trang chi tiết theo bài viết (view=item&id=)
  • Có thể tải thêm mục theo từng trang thông qua liên kết ‘More’

Chi tiết kỹ thuật

  • Dữ liệu được cung cấp ở định dạng SQLite, cho phép truy vấn và phân tích trong môi trường cục bộ
  • Toàn bộ lịch sử của HN được hợp nhất vào một cơ sở dữ liệu duy nhất, giúp nhà nghiên cứu hoặc nhà phát triển thực hiện phân tích xu hướng theo thời gian
  • Cấu trúc phân mảnh dữ liệu (sharding) hỗ trợ quản lý hiệu quả tập dữ liệu lớn

Ý nghĩa của dự án

  • Đóng vai trò như một kho lưu trữ số nhằm bảo tồn 19 năm tri thức cộng đồng tích lũy trên Hacker News
  • Tăng khả năng tiếp cận dữ liệu mở, có thể dùng cho nghiên cứu lịch sử công nghệ hoặc phân tích cộng đồng
  • Được công khai để bất kỳ ai cũng có thể khám phá toàn bộ lịch sử cộng đồng, đúng như khẩu hiệu “All the HN Belong to You”

1 bình luận

 
GN⁺ 2025-12-31
Ý kiến trên Hacker News
  • Điểm cốt lõi của dự án này là mọi thứ đều chạy hoàn toàn trong trình duyệt, không phải trên máy chủ
    SQLite được biên dịch sang WASM để sử dụng, và thay vì tải toàn bộ DB 22GB thì chỉ lấy dữ liệu theo từng shard cần cho trang
    Có thể xác nhận trong bảng mạng rằng các tệp như shard_1636.sqlite.gz, shard_1635.sqlite.gz được tải tuần tự
    Nó gợi nhớ đến mẹo SQLite.js HTTPVFS trước đây, nhưng lần này dùng tệp sharded thay vì range header
    Trong giao diện truy vấn SQL tương tác, bạn có thể tự chọn chạy truy vấn trên shard nào (tổng cộng 1636 shard)

    • Loại read-only VFS này có thể được triển khai rất đơn giản nếu có API phù hợp
      Ví dụ VFS tôi làm có ở đây
      Ví dụ dùng range request xem ở liên kết này
      Nếu muốn hỗ trợ SQLite DB nén bằng Zstandard thì chỉ cần thêm thư viện này

    • Tôi tò mò không biết đã có trường hợp nào hiện thực hóa ý tưởng dựa trên HTTP range này ở mức production thực tế chưa. Trông có vẻ rất tiềm năng

    • Hỗ trợ VFS thực sự đáng kinh ngạc

  • Sẽ thật tuyệt nếu có thể tích hợp cái này vào Kiwix
    Dạo này tôi dùng điện thoại chỉ dành cho ngoại tuyến, nên đang xem Wikipedia, Wiktionary và các trang của 100rabbits hoàn toàn ngoại tuyến

  • Tôi tò mò không biết nếu nén thêm thì nó sẽ nhỏ đi bao nhiêu
    Những bình luận kiểu “tôi ghét trang web này vì nó cướp thanh cuộn” có lẽ có thể mã hóa chỉ bằng vài bit

    • Làm kiểu như từ điển hardcode của Brotli cũng không phải ý tệ (liên kết liên quan)
    • Nếu bỏ hết bình luận của tôi ra thì chắc 5 bit là đủ
  • Tôi đã chạy select * from items limit 10, nhưng kết quả không trả về vì nó phải duyệt từng shard một
    Nó đi đến khoảng 60 shard rồi dừng. Nếu chỉ định một shard thì kết quả ra ngay
    DuckDB có thể đọc phần cần thiết của tệp parquet qua HTTP nên có vẻ sẽ nhanh hơn
    Lỗi ở bảng usersuser_domains có thể được xử lý bằng cách đổi bộ lọc shard sang shard thống kê người dùng

    • Lạ thật. Nếu là VFS thì không nên có hành vi như vậy. Có lẽ nó không phải VFS
  • Giống như Single-page application (SPA), có thể sẽ xuất hiện khái niệm Single-table application (STA)
    Nếu shard bảng theo nhiều khóa và phục vụ dưới dạng tệp tĩnh, thì với dữ liệu có thể công khai, nó có thể được triển khai giống như HTML tĩnh

    • Mẫu kiến trúc Baked Data khá giống với ý này
    • Ý bạn là “single database” chứ không phải “single table” sao? Khó làm ứng dụng mà không có quan hệ, nhưng Reddit từng vận hành bằng một bảng đơn khổng lồ tên là “things”
  • Kho lưu trữ đã biến mất với lỗi 404
    Tôi khá tiếc vì muốn xem cấu trúc bên trong, dù chỉ với một phần dữ liệu

    • Bị gỡ xuống nhanh thật. Tôi đang tìm bộ dữ liệu HN gần đây mà hầu như không kiếm ra được
  • Tôi cũng gặp lỗi 404
    Không biết họ có cân nhắc trade-off giữa SQLite và kho lưu trữ dạng cột như DuckDB không

    • Có lẽ MS đã gỡ kho lưu trữ xuống, các kho khác vẫn bình thường
    • Tôi chỉ đi thẳng với SQLite thôi. Tôi không biết rõ DuckDB là gì
    • DuckDB có thể nén tốt hơn, nhưng xét đến tính phổ biến của SQLite thì đây vẫn là lựa chọn tiêu chuẩn hoàn toàn ổn
    • SQLite có thể xử lý DB dưới dạng một tệp duy nhất nên hữu ích cho lưu trữ lâu dài
  • Điều này lại nhắc tôi rằng văn bản hiệu quả hơn video rất nhiều
    Nếu chứa cùng một lượng kiến thức bằng video thì tôi không dám tưởng tượng nó sẽ lớn đến mức nào

    • YouTube nhét khoảng 100 từ hữu ích vào một video 20 phút rồi câu click. Mức độ kém hiệu quả thật nghiêm trọng
    • Video 1080p60 ở mức 5Mbps tương đương 120 nghìn từ mỗi giây. Với tốc độ nói trung bình 150 wpm, văn bản hiệu quả hơn 50 nghìn lần
      Nếu đổi 22GB văn bản sang video thì sẽ vào khoảng 1PB (1000TB)
    • Giờ đây cũng có thể dùng video LLM để tự động tạo video hoặc sơ đồ từ văn bản
      Với video về board game hay lập trình, tốt hơn là cứ tóm tắt bằng văn bản rồi đọc
  • Sẽ hay nếu có thể tạo thứ này thành tệp .zim để xem trong trình duyệt ngoại tuyến như Kiwix
    Thỉnh thoảng tôi đặt ra “ngày chỉ dùng ngoại tuyến” để sắp xếp lại những gì đã học, và dùng Kiwix để tham khảo Wikipedia hay StackOverflow
    Giới thiệu thư viện Kiwix

    • Nếu loại nội dung này có thể được duyệt trực tiếp trong ứng dụng Kiwix thì thật tuyệt
  • Tôi cũng đã thử làm thứ tương tự
    Tôi từng viết một công cụ bằng Rust để nhập Project Arctic Shift dump của Reddit vào SQLite
    Nếu không tạo chỉ mục FTS5 và nhập với --unsafe-mode không dùng WAL, thì có thể nhập toàn bộ bình luận và bài đăng trong khoảng 24 giờ và tạo ra DB khoảng 10TB
    Tính năng JSON của SQLite rất tuyệt, nhưng tôi chọn cách phân tích một lần khi nạp rồi chuẩn hóa
    Việc build DB khá nhanh, nhưng nếu chạy VACUUM ngay sau đó thì tốc độ truy vấn sẽ nhanh hơn nhiều. Tuy nhiên VACUUM mất vài ngày
    Pushshift Importer / liên kết dump Arctic Shift

    • Có thể dùng auto_vacuum của SQLite để thu hồi dung lượng mà không cần build lại toàn bộ DB