HN ra mắt: Trình khám phá trang đĩa SQLite
(github.com/QuadrupleA)- SQLite Page Explorer là một ứng dụng GUI nhỏ cho phép khám phá cơ sở dữ liệu SQLite theo từng trang đĩa, đúng như cách SQLite nhìn thấy
- Công cụ này hiển thị ở cấp trang thay vì cấp schema như bảng, hàng, SQL mà lập trình viên thường làm việc, giúp xem cấu trúc đĩa thực tế của chỉ mục và hiệu quả lưu trữ
- Sử dụng redbean, cosmopolitan và αcτµαlly pδrταblε εxεcµταblε, công cụ chạy native trên Windows, Linux, MacOS, nhiều BSD, ARM64 và x64 dưới dạng một file thực thi duy nhất 6,5MB
- File thực thi cũng là một file zip chứa mã Lua, trình phân tích định dạng nhị phân cơ sở dữ liệu, v.v.; khi kéo file cơ sở dữ liệu vào hoặc chạy từ console, ứng dụng sẽ mở trong một tab trình duyệt
- File thực thi theo kiểu APE có thể gây nhận diện nhầm bởi trình duyệt hoặc phần mềm phát hiện virus của hệ điều hành, và với cơ sở dữ liệu lớn từ 500MB trở lên, view cấp cao nhất có thể tải chậm
GUI để xem trực tiếp các trang SQLite
- SQLite Page Explorer là một ứng dụng GUI nhỏ để khám phá cơ sở dữ liệu SQLite theo kiểu “page by page”
- SQLite và hầu hết cơ sở dữ liệu thường lưu dữ liệu trong các trang block đĩa kích thước 4KB; đây là cấu trúc nhằm tăng tốc đọc và ghi
- Công việc thông thường của lập trình viên diễn ra ở cấp schema như bảng, hàng, SQL, nhưng công cụ này cho phép nhìn vào cấp trang như SQLite nhìn thấy
Có thể thấy gì khi khám phá ở cấp trang
- Có thể kiểm tra chỉ mục thực sự trông như thế nào trên đĩa
- Về cơ bản, chỉ mục được lưu như một bảng nhỏ riêng biệt
- Có thể xem cách lưu trữ dữ liệu gọn hơn, qua đó có thể liên quan đến việc làm truy vấn và ứng dụng chạy nhanh hơn
- Giúp tìm ra các vấn đề và điểm kém hiệu quả có thể không thấy được ở cấp schema
- Có thể có trực giác tốt hơn về B-Tree, một cấu trúc dữ liệu quan trọng làm nền tảng cho hệ thống file và cơ sở dữ liệu
Chạy ở mọi nơi bằng một file thực thi duy nhất
- Được phân phối dưới dạng một file thực thi 6,5MB duy nhất, sử dụng redbean, cosmopolitan, αcτµαlly pδrταblε εxεcµταblε
- Chạy trên Windows, Linux, MacOS, nhiều BSD, đồng thời hỗ trợ cả ARM64 và x64
- File thực thi cũng là một file zip chứa mã Lua vận hành ứng dụng, trình phân tích định dạng nhị phân cơ sở dữ liệu, v.v.
Cách cài đặt và chạy
- Tải
sqlite-page-explorer.comtừ trang release - Trên các hệ Unix, chạy
chmod +x - Kéo file cơ sở dữ liệu vào file thực thi hoặc chạy từ console như sau
sqlite-page-explorer.com mySqliteDatabase.db
- Ứng dụng sẽ mở trong một tab trình duyệt
- Khi dùng xong, nhấn Ctrl-C hai lần trong console
Lưu ý và cách phát triển
- File thực thi APE có thể gây nhận diện nhầm trong trình duyệt hoặc hệ thống phát hiện virus của hệ điều hành
- Các dự án như llamafile cũng dùng kỹ thuật binary polyglot tương tự
- Cần thận trọng thông thường với các file tải xuống từ Internet
- Nếu đưa vào cơ sở dữ liệu lớn từ 500MB trở lên, view cấp cao nhất đọc toàn bộ trang có thể tải chậm
- Việc build được thực hiện bằng cách zip nội dung
files/vàoredbean-3.0.0-cosmos.com- Cũng có thể build bằng script Python 3.6+
zipitup.pyđi kèm
- Cũng có thể build bằng script Python 3.6+
- Trong quá trình phát triển, có thể dùng
redbean-3.0.0-cosmos.com -D filesđể serve ứng dụng từ thư mục confiles, không cần tạo lại zip mỗi lần - Dự án là một phần của thử nghiệm với redbean và lần đầu sử dụng Lua, nên code vẫn còn chỗ để được dọn dẹp thêm
- Một hệ thống template có thể giúp giảm nối chuỗi và các lệnh gọi
Write() - Có các ý tưởng cải tiến như tự động thoát console khi tab cuối cùng đóng, hoặc dừng ở khoảng 10.000 trang trước khi người dùng xác nhận với cơ sở dữ liệu rất lớn
- Hoan nghênh PR
- Một hệ thống template có thể giúp giảm nối chuỗi và các lệnh gọi
1 bình luận
Ý kiến trên Hacker News
Thật sự rất tuyệt. Tôi đã đăng ảnh chụp màn hình GIF động ở đây: https://simonwillison.net/2025/Feb/6/sqlite-page-explorer/
Tuyệt thật! Bắt đầu tự viết mã để phân tích một tệp SQLite khi đặt tài liệu định dạng tệp SQLite bên cạnh lại dễ hơn nhiều so với tưởng tượng
Rất khuyến khích làm như vậy, tương tự cách dự án này thực hiện, và vì những lý do được viết trong mục “Why?” của README
https://www.sqlite.org/fileformat.html
Tôi cũng có một ít công cụ trực quan hóa, nhưng ít tính năng hơn nhiều so với phần mềm trong bài gốc: https://www.nayuki.io/page/sqlite-database-file-visualizatio...
Thực sự ấn tượng! Từng đụng vào cấu trúc nội bộ của SQLite rồi nên tôi biết kiểu công việc và thử nghiệm như thế này hoàn toàn không phải chuyện nhỏ
Nhân tiện, gần đây tôi có xem sqlite-repr [1], nó được làm bằng Dioxus và cho thấy một hướng tiếp cận thú vị với việc trực quan hóa SQLite
[1] https://torymur.github.io/sqlite-repr/
Hơn 10 năm trước tôi từng làm kiểu này khi tạo công cụ bảo mật. Làm như vậy khiến người ta càng trân trọng hơn một engine được thiết kế chặt chẽ
Tôi luôn nghĩ rằng chỉ cần có một trình khám phá hoặc thư viện cơ bản thôi cũng đã rất thú vị, nên đặc biệt vui khi thấy nó được phát hành theo giấy phép MIT
Trông rất ổn, làm tốt lắm
Có lẽ nên thêm chú giải màu sắc vào màn hình đầu tiên. Ban đầu tôi không biết các màu có ý nghĩa gì
Có vẻ nó hơi đuối với cơ sở dữ liệu lớn. Tôi thử với bản 3.6GB, 942719 trang, có lẽ nên hiển thị theo từng phần trang
title, nên vẫn có thể hiểu được hệ màu, nhưng chưa thật sự rõ ràngViệc cơ sở dữ liệu lớn bị chậm cũng là đúng. Các trang được duyệt ở phía “server”, nên nếu có đến hàng trăm nghìn trang thì sẽ mất thời gian
Lý tưởng nhất là có API phạm vi trang cuộn thời gian thực, nhưng cách đơn giản như “xem 10 nghìn trang tiếp theo” cũng có vẻ khả thi
Dự án hay đấy, nhưng khi chạy file thực thi thì báo lỗi
"failed to run lua code: /index.lua:3: module 'utils' not found:"Với tư cách là người không đủ disciplined để theo hết một bài giảng hay khóa học, tôi thấy đây là cách rất hay để hiểu trực quan chuyện gì đang diễn ra bên trong và cách cấu trúc dữ liệu hiệu quả hơn
Gần đây tôi có viết một bài giải thích định dạng tệp SQLite, và cũng thêm vào vài sơ đồ có thể hữu ích. Có thể sẽ giúp được
https://blog.jabid.in/2024/11/24/sqlite.html
Mã nguồn SQLite có kèm một công cụ CLI tên là showdb rất phù hợp để nhìn vào bên trong tệp cơ sở dữ liệu
Tuyệt đấy. Tôi đang học về cơ sở dữ liệu nên thấy cái này cực kỳ hữu ích