- Hacker Book เป็นโปรเจ็กต์ที่ เก็บรักษาข้อมูลทั้งหมดของ Hacker News ในรูปแบบ SQLite ตั้งแต่ปี 2006 ถึง 2025
- ประกอบด้วย โพสต์ทั้งหมด 46,399,072 รายการ และ 1,637 ชาร์ด ครอบคลุม บันทึกของ HN ตลอด 19 ปี
- ไม่ใช่แอปฝั่งเซิร์ฟเวอร์ แต่ใช้ SQLite ที่คอมไพล์เป็น WASM และเมื่อจำเป็นจะ ดาวน์โหลดเฉพาะบางชาร์ด มาแสดงผล
- สามารถสำรวจ โพสต์ ผู้ใช้ และคอมเมนต์ ผ่านเว็บอินเทอร์เฟซได้ พร้อม UI ที่คล้ายกับโครงสร้างแบบเรียลไทม์ของ HN
- โพสต์ยอดนิยมครอบคลุมหัวข้อหลากหลาย เช่น AI, โอเพนซอร์ส, ประวัติศาสตร์เทคโนโลยี, ประเด็นสังคม
- เป็นแหล่งข้อมูลที่มอบ พื้นฐานสำหรับการวิเคราะห์ข้อมูลระยะยาวของชุมชนเทคโนโลยีบนอินเทอร์เน็ต ให้แก่นักพัฒนาและนักวิจัย
ภาพรวมของ Hacker Book
- Hacker Book เป็นโปรเจ็กต์ที่ให้ข้อมูลทั้งหมดของ Hacker News ในรูปแบบ ฐานข้อมูล SQLite
- ข้อมูลครอบคลุมช่วงเวลา 9 ตุลาคม 2006 ถึง 28 ธันวาคม 2025
- ประกอบด้วย รายการทั้งหมด 46,399,072 รายการ (items), 1,637 ชาร์ด (shards), และมี ขนาด 8.5GB (ข้อมูลที่ส่วนล่างของหน้า)
- สามารถเข้าถึงเว็บไซต์ได้ที่ 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 และแทนที่จะดาวน์โหลด DB ทั้งก้อน 22GB ก็จะดึงมาเฉพาะ ข้อมูลระดับ shard ที่จำเป็นต่อหน้าเท่านั้น
ผมยืนยันได้จากใน network panel ว่ามีการโหลดไฟล์อย่าง
shard_1636.sqlite.gz,shard_1635.sqlite.gzตามลำดับมันทำให้นึกถึง ทริก SQLite.js HTTPVFS แบบเก่า แต่คราวนี้ใช้ ไฟล์แบบ sharded แทน range header
ใน อินเทอร์เฟซสำหรับรัน SQL query แบบโต้ตอบ คุณสามารถเลือกได้เองว่าจะรัน query กับ shard ไหน (ทั้งหมด 1636 shard)
VFS แบบ read-only ลักษณะนี้ทำได้ค่อนข้างง่ายมากถ้ามี API ที่เหมาะสม
ตัวอย่าง VFS ที่ผมทำไว้ดูได้ ที่นี่
ตัวอย่างที่ใช้ range request ดูได้จากลิงก์นี้
ถ้าจะรองรับ SQLite DB ที่บีบอัดด้วย Zstandard ก็แค่เพิ่ม ไลบรารีนี้ เข้าไปตัวเดียวพอ
ผมสงสัยว่ามีตัวอย่างการเอาไอเดียแบบ HTTP range based นี้ไปทำถึงระดับ production จริง ๆ อีกไหม ดูมีศักยภาพมาก
การรองรับ VFS น่าทึ่งจริง ๆ
ถ้ารวมสิ่งนี้เข้ากับ Kiwix ได้ก็น่าจะดีมาก
ช่วงนี้ผมใช้ โทรศัพท์แบบออฟไลน์ล้วน อยู่ เลยดูทั้ง Wikipedia, Wiktionary และเว็บไซต์ของ 100rabbits แบบออฟไลน์ทั้งหมด
สงสัยว่าถ้าบีบอัดเพิ่มจะเล็กลงได้อีกแค่ไหน
คอมเมนต์อย่าง “เว็บไซต์นี้แย่งควบคุม scrollbar เลยไม่ชอบ” น่าจะเข้ารหัสได้ด้วยไม่กี่บิต
ผมลองรัน
select * from items limit 10แล้ว แต่ผลลัพธ์ไม่กลับมาเพราะมันไล่วน shard ทีละก้อนไปถึงราว 60 shard แล้วก็หยุด ถ้าระบุแค่ shard เดียวผลจะออกมาทันที
DuckDB น่าจะเร็วกว่าเพราะอ่านเฉพาะส่วนที่ต้องการของไฟล์ parquet ผ่าน HTTP ได้
ข้อผิดพลาดของตาราง
usersกับuser_domainsแก้ได้โดยเปลี่ยน shard filter ไปเป็น user stats shardเหมือนกับ Single-page application (SPA) เราอาจได้แนวคิด Single-table application (STA) ก็ได้
ถ้า shard ตารางด้วยคีย์หลายแบบแล้วเสิร์ฟเป็นไฟล์ static ข้อมูลที่เปิดเผยได้ก็อาจแจกจ่ายได้เหมือน HTML แบบ static
รีโพซิทอรีกลายเป็น 404 หายไปแล้ว
เสียดาย อยากดูโครงสร้างภายในบ้างแม้จะมีแค่บางส่วนของข้อมูลก็ตาม
ของผมก็ขึ้น 404 เหมือนกัน
สงสัยว่าเขาได้พิจารณา trade-off ระหว่างคอลัมน์สโตร์แบบ DuckDB กับ SQLite บ้างไหม
ยิ่งทำให้รู้สึกว่า ข้อความมีประสิทธิภาพกว่าวิดีโอมาก
ถ้าจะบรรจุความรู้ปริมาณเท่ากันเป็นวิดีโอ ขนาดจะใหญ่แค่ไหนนึกไม่ออกเลย
ถ้าเอาข้อความ 22GB ไปแปลงเป็นวิดีโอจะได้ประมาณ 1PB (1000TB)
แต่วิดีโอเกี่ยวกับบอร์ดเกมหรือการเขียนโปรแกรม แค่อ่านสรุปแบบข้อความก็ดีกว่า
อยากให้ทำสิ่งนี้เป็นไฟล์ .zim เพื่อเปิดในเบราว์เซอร์ออฟไลน์อย่าง Kiwix ได้
ผมชอบกำหนด “วันออฟไลน์ล้วน” เป็นบางครั้งเพื่อจัดระเบียบสิ่งที่เรียนรู้ และใช้ Kiwix อ้างอิง Wikipedia หรือ StackOverflow
แนะนำไลบรารี Kiwix
ผมก็เคยทำอะไรคล้าย ๆ กัน
ผมทำเครื่องมือด้วย Rust สำหรับนำเข้า Project Arctic Shift dump ของ Reddit ลง SQLite
ถ้าไม่สร้างดัชนี FTS5 และนำเข้าแบบไม่มี WAL ด้วย
--unsafe-modeจะนำเข้าคอมเมนต์และโพสต์ทั้งหมดได้ในเวลาราว 24 ชั่วโมง และได้ DB ขนาดประมาณ 10TBความสามารถ JSON ของ SQLite นั้นยอดเยี่ยม แต่ผมเลือก parse แค่ครั้งเดียวตอนโหลดแล้ว normalize ไปเลย
การ build DB เร็วก็จริง แต่ถ้ารัน VACUUM ทันที ความเร็ว query จะดีขึ้นมาก แม้ว่า VACUUM จะใช้เวลาหลายวัน
Pushshift Importer / ลิงก์ dump ของ Arctic Shift