- Sau vài ngày mày mò SQLite, tôi nhận ra một số nhược điểm đáng ngạc nhiên
- Không hỗ trợ
ALTER COLUMN. Khuyến nghị chính thức để thay đổi cột là "tạo bảng mới"
- Không hỗ trợ
DROP CONSTRAINT. Khuyến nghị chính thức để xóa ràng buộc là "tạo bảng mới"
- SQLite không có kiểu dữ liệu ở cấp cột. Kiểu dữ liệu (chỉ có 5 loại) chỉ tồn tại ở giá trị, nên mọi thứ có thể được nhét vào mọi nơi
- Nếu yêu cầu một cột với kiểu không được hỗ trợ hoặc không tồn tại, nó sẽ thực hiện sai mà không hề có cảnh báo hay lỗi. Tôi đã tạo một schema như
CREATE TABLE my_table (id bigserial, messages jsonb[]) và nó trông như thể hoạt động, nên trong ngày đầu tiên tôi đã lầm tưởng SQLite hỗ trợ serial và mảng
- Có thể dùng
CREATE TABLE my_table (...) STRICT để chỉ cho phép một trong 5 kiểu được hỗ trợ là integer, real, text, blob, any
- Gần đây có rất nhiều sự chú ý đến hỗ trợ
jsonb mới của SQLite. Không giống Postgres, jsonb thực ra không phải là một kiểu dữ liệu mà là định dạng đầu vào/đầu ra cho các hàm jsonb* tích hợp sẵn. Khi lưu trữ lâu dài, nó là blob, một trong 5 kiểu cơ bản
- Những kiểu rất quan trọng khác như
timestamptz cũng bị thiếu. Nếu muốn lưu ngày/giờ thì phải dùng Unix timestamp dạng integer hoặc chuỗi string theo định dạng ISO8601, và SQLite cung cấp nhiều hàm tích hợp cho các thao tác này
- SQLite có một số tính năng ấn tượng liên quan đến streaming mà tôi rất muốn thử, nhưng trải nghiệm DX ban đầu chắc chắn hơi khó chịu
- Đôi khi tôi tự hỏi liệu mình có đang bị một câu chuyện nào đó cuốn đi quá mạnh không. Ví dụ, liệu Postgres có thật sự là cơ sở dữ liệu tốt nhất thế giới không? Trải nghiệm này chắc chắn đã củng cố niềm tin của tôi. Đúng vậy, Postgres là tốt nhất
6 bình luận
Có cảm giác là họ không muốn SQLite mà muốn SQLHeavy hơn.
Có những loại DB này và cũng có những loại DB kia. Tôi đã nghĩ rằng SQLite vận hành theo một triết lý rất riêng của nó.
Tại sao lại cố dùng SQLite như thể nó là Postgres vậy nhỉ?
Cảm giác như một người lần đầu dùng Linux rồi nói: “Hancom Office cũng chạy không ổn mà game tôi chơi cũng không chạy được. Đúng là hệ điều hành thì phải là Windows!”
Có phải sự thổi phồng (hype) về sqlite trên Hacker News đang hơi quá đà không? Từ năm 2022, đã có rất nhiều bài trên Hacker News cho rằng sqlite có thể thay thế các RDBMS được vận hành riêng biệt.
1: https://news.ycombinator.com/item?id=31318708
2. https://news.ycombinator.com/item?id=31152490
3. https://news.ycombinator.com/item?id=34812527
4. https://news.ycombinator.com/item?id=36208568
Ngoài ra: https://hn.algolia.com/?dateEnd=1720854657&dateRange=custom&da…
Khi cảm thấy việc dùng các hệ cơ sở dữ liệu như Postgres hay MySQL là quá mức cần thiết, tôi nghĩ SQLite có thể là một lựa chọn thay thế đủ hấp dẫn.
Ví dụ, với các dịch vụ nhỏ, chi phí của managed DB đôi khi còn lớn hơn cả lợi ích mang lại, còn tự vận hành thì lại cũng là một gánh nặng.
Ngược lại, trong trường hợp của SQLite, người ta nói rằng hiệu năng vẫn không thiếu hụt cho đến một quy mô nhất định, và đặc biệt nếu dùng các công cụ như Litestream thì gần như cũng không có nhiều gánh nặng vận hành, nên có vẻ đây là một ưu điểm.
Ngay cả khi chưa cần đến tính năng replication,
sqlitevẫn rất tốt vì sao lưu cũng đơn giản và chỉ cần quản lý trạng thái service daemon thôi. Nhưng để gắn với JPA thì phải làm thêm khá nhiều thứ, nên với những dự án cần bàn giao lại cho người khác thì tôi thấy khó mà dùng được.Nếu có ý chí muốn quản lý schema dữ liệu chặt chẽ hơn như trong bài gốc thì nó cũng không hợp cho mục đích đó.
Lúc nãy tôi đang viết dở bình luận trước, điều tôi muốn nói là những lời đồn thổi về
sqliteđôi khi tạo ra ảo giác như thểsqlitelà vạn năng.