HN เปิดตัว: เครื่องมือสำรวจหน้าดิสก์ของ SQLite
(github.com/QuadrupleA)- SQLite Page Explorer เป็นแอป GUI ขนาดเล็กที่ใช้สำรวจฐานข้อมูล SQLite ในแบบที่ SQLite มองเห็นจริง คือ ในระดับหน้าดิสก์
- แทนที่จะเป็นระดับ สคีมา แบบที่นักพัฒนามักใช้งานกัน เช่น ตาราง แถว หรือ SQL เครื่องมือนี้จะแสดงระดับหน้า ทำให้สามารถดูโครงสร้างบนดิสก์จริงของดัชนีและประสิทธิภาพการจัดเก็บได้
- ใช้ redbean, cosmopolitan, αcτµαlly pδrταblε εxεcµταblε เพื่อให้รันแบบเนทีฟได้เป็น ไฟล์ปฏิบัติการเดี่ยวขนาด 6.5MB บน Windows, Linux, MacOS, BSD หลายตัว, ARM64 และ x64
- ไฟล์ปฏิบัติการนี้ยังเป็น ไฟล์ zip ที่บรรจุโค้ด Lua และตัวแยกวิเคราะห์ฟอร์แมตไบนารีของฐานข้อมูลด้วย และเมื่อลากไฟล์ฐานข้อมูลมาวางหรือรันจากคอนโซล แอปจะเปิดขึ้นในแท็บเบราว์เซอร์
- ไฟล์ปฏิบัติการแบบ APE อาจทำให้เกิด การตรวจจับผิดพลาด จากเบราว์เซอร์หรือระบบปฏิบัติการ และฐานข้อมูลขนาดใหญ่เกิน 500MB อาจโหลดมุมมองระดับบนสุดได้ช้า
GUI สำหรับดูหน้า SQLite โดยตรง
- SQLite Page Explorer เป็นแอป GUI ขนาดเล็กสำหรับสำรวจฐานข้อมูล SQLite แบบ “page by page”
- SQLite และฐานข้อมูลส่วนใหญ่จะเก็บข้อมูลไว้ในหน้าบล็อกดิสก์ขนาด 4KB โดยทั่วไป ซึ่งเป็นโครงสร้างเพื่อให้การอ่านและเขียนทำได้รวดเร็ว
- งานของนักพัฒนาโดยทั่วไปมักเกิดขึ้นในระดับ สคีมา เช่น ตาราง แถว และ SQL แต่เครื่องมือนี้เปิดให้มองลงไปถึงระดับ หน้า อย่างที่ SQLite เห็น
สิ่งที่ดูได้จากการสำรวจระดับหน้า
- สามารถดูได้ว่าดัชนีมีหน้าตาบนดิสก์จริงอย่างไร
- โดยพื้นฐานแล้วดัชนีถูกเก็บเป็นเหมือนตารางขนาดเล็กแยกต่างหาก
- สามารถสำรวจวิธีเก็บข้อมูลให้ กะทัดรัดขึ้น และอาจนำไปสู่การทำให้คิวรีและแอปพลิเคชันทำงานเร็วขึ้น
- ช่วยค้นหาปัญหาและความไม่มีประสิทธิภาพที่อาจมองไม่เห็นในระดับสคีมา
- ช่วยสร้างความเข้าใจเชิงสัญชาตญาณเกี่ยวกับ B-Tree ซึ่งเป็นโครงสร้างข้อมูลสำคัญที่อยู่เบื้องหลังทั้งระบบไฟล์และฐานข้อมูล
รันได้ทุกที่ด้วยไฟล์ปฏิบัติการเดี่ยว
- แจกจ่ายเป็น ไฟล์ปฏิบัติการขนาด 6.5MB ไฟล์เดียว โดยใช้ redbean, cosmopolitan, αcτµαlly pδrταblε εxεcµταblε
- รันได้บน Windows, Linux, MacOS และ BSD หลายตัว พร้อมรองรับทั้ง ARM64 และ x64
- ไฟล์ปฏิบัติการนี้ยังเป็นไฟล์ zip ที่มีทั้ง โค้ด Lua สำหรับรันแอป และตัวแยกวิเคราะห์ฟอร์แมตไบนารีของฐานข้อมูล เป็นต้น
วิธีติดตั้งและรัน
- ดาวน์โหลด
sqlite-page-explorer.comจากหน้ารีลีส - บนระบบตระกูล Unix ให้รัน
chmod +x - ลากไฟล์ฐานข้อมูลไปวางบนไฟล์ปฏิบัติการ หรือรันจากคอนโซลตามนี้
sqlite-page-explorer.com mySqliteDatabase.db
- แอปจะเปิดในแท็บเบราว์เซอร์
- เมื่อใช้งานเสร็จ ให้กด Ctrl-C สองครั้งในคอนโซล
ข้อควรระวังและแนวทางการพัฒนา
- ไฟล์ปฏิบัติการแบบ APE อาจทำให้เกิด การตรวจจับผิดพลาด จากเบราว์เซอร์หรือระบบปฏิบัติการ
- โปรเจกต์อย่าง llamafile ก็ใช้เทคนิคไบนารีแบบ polyglot เช่นเดียวกัน
- ควรใช้ความระมัดระวังตามปกติกับไฟล์ที่ดาวน์โหลดจากอินเทอร์เน็ต
- หากใส่ฐานข้อมูลขนาดใหญ่เกิน 500MB มุมมองระดับบนสุดที่ต้องอ่านทุกหน้าอาจโหลดได้ช้า
- การบิลด์ทำโดยนำเนื้อหาใน
files/ไปใส่เป็น zip ลงในredbean-3.0.0-cosmos.com- สามารถบิลด์ได้ด้วยสคริปต์ Python 3.6+ ที่รวมมาให้ชื่อ
zipitup.py
- สามารถบิลด์ได้ด้วยสคริปต์ Python 3.6+ ที่รวมมาให้ชื่อ
- ระหว่างพัฒนา สามารถใช้
redbean-3.0.0-cosmos.com -D filesเพื่อเสิร์ฟแอปจากไดเรกทอรีย่อยfilesได้ โดยไม่ต้องสร้าง zip ใหม่ทุกครั้ง - โปรเจกต์นี้เป็นส่วนหนึ่งของการทดลองกับ redbean และการใช้งาน Lua ครั้งแรก จึงยังมีช่องให้จัดระเบียบโค้ดได้อีก
- ระบบเทมเพลตอาจช่วยลดการต่อสตริงและการเรียก
Write()ได้ - มีไอเดียปรับปรุง เช่น ปิดคอนโซลอัตโนมัติเมื่อปิดแท็บสุดท้าย หรือหยุดราว 10,000 หน้าในฐานข้อมูลขนาดใหญ่มากก่อนเพื่อให้ผู้ใช้ยืนยัน
- ยินดีรับ PR
- ระบบเทมเพลตอาจช่วยลดการต่อสตริงและการเรียก
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เจ๋งมาก ผมอัปโหลด สกรีนช็อตแบบ GIF เคลื่อนไหว ไว้ที่นี่: https://simonwillison.net/2025/Feb/6/sqlite-page-explorer/
เจ๋ง! การวาง เอกสารรูปแบบไฟล์ SQLite ไว้ข้าง ๆ แล้วเริ่มเขียนโค้ดพาร์สไฟล์ SQLite เองนั้นง่ายกว่าที่คิด
คล้ายกับวิธีที่โปรเจกต์นี้ทำ และผมแนะนำอย่างยิ่งด้วยเหตุผลที่เขียนไว้ในส่วน “Why?” ของ README
https://www.sqlite.org/fileformat.html
มีเครื่องมือ visualization อยู่บ้างเหมือนกัน แต่ฟีเจอร์น้อยกว่าซอฟต์แวร์ในโพสต์ต้นฉบับมาก: https://www.nayuki.io/page/sqlite-database-file-visualizatio...
น่าประทับใจจริง ๆ! ในฐานะที่เคยทำงานกับ โครงสร้างภายในของ SQLite มาก่อน ผมรู้ว่างานและการทดลองแบบนี้ไม่ใช่เรื่องเล็กเลย
ที่เกี่ยวข้องกัน ผมเพิ่งเห็น sqlite-repr [1] เมื่อไม่นานมานี้ ซึ่งสร้างด้วย Dioxus และแสดงแนวทางที่น่าสนใจในการ visualize SQLite
[1] https://torymur.github.io/sqlite-repr/
เคยทำอะไรแบบนี้เมื่อกว่า 10 ปีก่อนตอนสร้างเครื่องมือด้านความปลอดภัย พอได้ลองทำแบบนั้นแล้วจะยิ่งชอบ เอนจินที่ออกแบบมาอย่างแน่นหนา มากขึ้น
ผมคิดมาตลอดว่าถ้ามี explorer หรือไลบรารีพื้นฐานก็คงสนุกดี โดยเฉพาะยิ่งดีใจที่เห็นว่าเปิดเผยภายใต้ไลเซนส์ MIT
ดูเจ๋งดี ทำออกมาได้ดี
น่าจะเพิ่ม คำอธิบายสี ไว้ที่หน้าจอแรก ตอนแรกผมไม่รู้ว่าสีต่าง ๆ หมายถึงอะไร
ดูเหมือนจะรับมือฐานข้อมูลขนาดใหญ่ได้ค่อนข้างลำบาก ผมลองกับฐานข้อมูล 3.6GB มี 942719 หน้า ถ้าแบ่งหน้าแสดงผลได้ก็น่าจะดี
titleเลยพอเข้าใจระบบสีได้ แต่ก็ยังไม่ชัดเจนมากนักเรื่องฐานข้อมูลขนาดใหญ่ที่ช้าลงก็จริง เพราะมันวนดูหน้าในฝั่ง “เซิร์ฟเวอร์” ถ้ามีหลายแสนหน้าก็ต้องใช้เวลา
ทางที่ดีน่าจะมี API ช่วงหน้าสำหรับการเลื่อนแบบเรียลไทม์ แต่แค่วิธีง่าย ๆ อย่าง “ดู 10,000 หน้าถัดไป” ก็น่าจะทำได้
โปรเจกต์ดีนะ แต่พอรันไฟล์ executable แล้วขึ้นข้อผิดพลาด
"failed to run lua code: /index.lua:3: module 'utils' not found:"ในฐานะคนที่ไม่มี disciplined พอจะเรียนคอร์สหรือคลาสให้จบ สิ่งนี้ดีมากสำหรับการ ทำความเข้าใจด้วยภาพ ว่าข้างในเกิดอะไรขึ้น และจะจัดโครงสร้างข้อมูลให้มีประสิทธิภาพขึ้นได้อย่างไร
เมื่อไม่นานมานี้ผมเขียนบทความอธิบายรูปแบบไฟล์ SQLite และใส่ ไดอะแกรม ที่น่าจะช่วยได้ไว้ด้วย อาจมีประโยชน์
https://blog.jabid.in/2024/11/24/sqlite.html
ในซอร์สของ SQLite มีเครื่องมือ CLI ชื่อ showdb รวมอยู่ด้วย เหมาะสำหรับส่องดูไฟล์ฐานข้อมูล
เจ๋ง กำลังเรียนเรื่องฐานข้อมูลอยู่และสิ่งนี้ช่วยได้มาก