- 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=) và 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
Ý 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
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ộtNó đ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
usersvàuser_domainscó thể được xử lý bằng cách đổi bộ lọc shard sang shard thống kê người dùngGiố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
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
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
Đ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
Nếu đổi 22GB văn bản sang video thì sẽ vào khoảng 1PB (1000TB)
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
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-modekhô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 10TBTí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