1 คะแนน โดย GN⁺ 2025-02-08 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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
  • ระหว่างพัฒนา สามารถใช้ redbean-3.0.0-cosmos.com -D files เพื่อเสิร์ฟแอปจากไดเรกทอรีย่อย files ได้ โดยไม่ต้องสร้าง zip ใหม่ทุกครั้ง
  • โปรเจกต์นี้เป็นส่วนหนึ่งของการทดลองกับ redbean และการใช้งาน Lua ครั้งแรก จึงยังมีช่องให้จัดระเบียบโค้ดได้อีก
    • ระบบเทมเพลตอาจช่วยลดการต่อสตริงและการเรียก Write() ได้
    • มีไอเดียปรับปรุง เช่น ปิดคอนโซลอัตโนมัติเมื่อปิดแท็บสุดท้าย หรือหยุดราว 10,000 หน้าในฐานข้อมูลขนาดใหญ่มากก่อนเพื่อให้ผู้ใช้ยืนยัน
    • ยินดีรับ PR

1 ความคิดเห็น

 
GN⁺ 2025-02-08
ความคิดเห็นจาก Hacker News
  • เจ๋งมาก ผมอัปโหลด สกรีนช็อตแบบ GIF เคลื่อนไหว ไว้ที่นี่: https://simonwillison.net/2025/Feb/6/sqlite-page-explorer/

    • เป็นเกียรติมาก :) ตอนทำสิ่งนี้ ผมคิดว่า “SimonW น่าจะชอบนะ” ขอบคุณที่แชร์ การทดลองและบทความเกี่ยวกับ LLM ดี ๆ ไว้มากมาย
  • เจ๋ง! การวาง เอกสารรูปแบบไฟล์ SQLite ไว้ข้าง ๆ แล้วเริ่มเขียนโค้ดพาร์สไฟล์ SQLite เองนั้นง่ายกว่าที่คิด
    คล้ายกับวิธีที่โปรเจกต์นี้ทำ และผมแนะนำอย่างยิ่งด้วยเหตุผลที่เขียนไว้ในส่วน “Why?” ของ README
    https://www.sqlite.org/fileformat.html

    • ใช่เลย รูปแบบไฟล์อ่านง่าย! ผมนั่งครั้งเดียวไม่กี่ชั่วโมงก็ทำถึงขั้น implement reader ได้แล้ว
      มีเครื่องมือ 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 รวมอยู่ด้วย เหมาะสำหรับส่องดูไฟล์ฐานข้อมูล

  • เจ๋ง กำลังเรียนเรื่องฐานข้อมูลอยู่และสิ่งนี้ช่วยได้มาก