SQLite
Nó là gì
Hãy hình dung một tệp tài liệu duy nhất mà bạn mở và chỉnh sửa trực tiếp, không cần một chương trình riêng chạy nền để quản lý nó. SQLite giống như vậy đối với cơ sở dữ liệu: đây là một cơ sở dữ liệu quan hệ (relational ) tự chứa, không cần máy chủ (), lưu toàn bộ cơ sở dữ liệu trong một tệp duy nhất. Không có tiến trình riêng nào cần chạy hay quản lý. Ứng dụng của bạn liên kết trực tiếp với thư viện và đọc/ghi tệp đó. Đây là cơ sở dữ liệu được triển khai rộng rãi nhất trên thế giới, nhúng trong điện thoại, trình duyệt và vô số ứng dụng.
Điểm mạnh
- Không cần cấu hình và không cần vận hành máy chủ.
- Toàn bộ cơ sở dữ liệu là một tệp di động duy nhất, dễ sao chép hoặc sao lưu.
- Nhanh cho các tác vụ đọc cục bộ và khối lượng ghi ở mức vừa phải.
- Hỗ trợ đầy đủ (Structured Query Language — Ngôn ngữ truy vấn có cấu trúc) với giao dịch (transaction) và khóa ngoại (foreign key).
- Rất phù hợp cho kiểm thử, bản mẫu (prototype), môi trường chạy tại biên ( runtime) và các trường hợp nhúng.
Đánh đổi
- Ghi đồng thời bị giới hạn. Giống như một cây bút được chia sẻ trong một nhóm, chỉ một người có thể viết tại một thời điểm, dù người khác vẫn có thể đọc (một trình ghi tại một thời điểm; WAL — write-ahead logging, một chế độ cho phép việc đọc và ghi diễn ra cùng lúc — giúp cải thiện điều này).
- Không được thiết kế cho nhiều máy khách kết nối mạng hoặc thông lượng ghi cao.
- Ít kiểu dữ liệu nâng cao hơn và không có hệ thống người dùng/quyền hạn gốc.
- Mở rộng vượt ra ngoài một máy chủ đơn lẻ cần một kho lưu trữ khác hoặc một lớp như Turso/LiteFS.
Khi nào nên dùng
Hãy dùng SQLite cho các ứng dụng cục bộ, công cụ (Command-Line Interface — giao diện dòng lệnh), phần mềm máy tính để bàn và di động, bộ kiểm thử, và các trang web quy mô nhỏ đến vừa mà việc đọc chiếm ưu thế. Nó cũng ngày càng khả thi ở biên (edge) thông qua các bản sao được lưu trữ (hosted replicas).
Phù hợp với vibe coding
Khi chỉ đạo AI, hãy yêu cầu nó bật các thiết lập mặc định an toàn trước tiên: bật PRAGMA foreign_keys = ON và chế độ ghi nhật ký WAL, vì SQLite mặc định tắt khóa ngoại. Yêu cầu AI sử dụng các câu lệnh tham số hóa (parameterized statements) và giữ các bản di chuyển schema (schema migrations) trong các tệp .sql có kiểm soát phiên bản. Một mẹo hữu ích: hãy nói với AI rằng việc ghi được xử lý tuần tự (serialized), vì vậy nó nên gộp nhiều lệnh chèn (insert) vào trong một giao dịch (transaction) duy nhất và tránh các khóa ghi kéo dài. Vì cơ sở dữ liệu chỉ là một tệp, hãy yêu cầu AI đưa vào một bước sao lưu đơn giản (sao chép tệp hoặc dùng lệnh .backup) trong công cụ của bạn.
PRAGMA journal_mode = WAL;
PRAGMA foreign_keys = ON;
CREATE TABLE notes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
body TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
-- Batch many inserts in one transaction for speed
BEGIN;
INSERT INTO notes (title, body) VALUES (?, ?);
INSERT INTO notes (title, body) VALUES (?, ?);
COMMIT;