DuckDB vs SQLite: analytics trên máy tính cá nhân 2026
Với query nào chạm đến hơn vài nghìn dòng, DuckDB thắng cách biệt. SQLite vẫn làm chủ persistence và indexed lookup. Đây là thời điểm nên dùng cái nào.
Bởi Ethan · Cập nhật 25 tháng 5, 2026
1.103 từ · 6 phút đọc
Với query nào chạm đến hơn vài nghìn dòng, DuckDB là câu trả lời đúng. SQLite chỉ thắng khi bạn đã dùng nó cho app persistence và không muốn thêm dependency.
Bài này dành cho ai
Data engineer, analyst, và Python developer đang chọn local database cho analytical workload trong năm 2026. Nếu bạn đang xây ứng dụng với các lookup nhỏ, nhanh — mobile, browser, embedded — dừng ở đây: SQLite là câu trả lời và bài này sẽ không thay đổi quyết định của bạn.
Phiên bản sử dụng
Tất cả kết quả dưới đây dựa trên:
| Database | Phiên bản | Phát hành |
|---|---|---|
| DuckDB | 1.5.3 | 20 tháng 5, 2026 |
| SQLite | 3.53.1 | 5 tháng 5, 2026 |
Benchmark trích dẫn từ bộ benchmark SQLite vs DuckDB của Lukas Barth (DuckDB v0.9.1 tại thời điểm đo — DuckDB hiện tại nhanh hơn, nên hãy coi các con số này là ngưỡng thấp nhất, không phải trần).
Hiệu năng truy vấn
Analytical query: DuckDB hơn hẳn một bậc
DuckDB là columnar engine được thiết kế cho OLAP. SQLite là row-store thiết kế cho transactional workload. Khi chạy full-table scan hoặc aggregation, khoảng cách là rất lớn.
| Workload | DuckDB | SQLite | Tỷ lệ |
|---|---|---|---|
| Direction ID scan (~850K dòng, bảng GTFS 35M dòng) | 2.90 ms | 2,722 ms | DuckDB nhanh hơn 938× |
| Route ID scan (~63 dòng trung bình, GTFS) | 7.70 ms | 182 ms | DuckDB nhanh hơn 23.6× |
Transactional lookup: SQLite thắng
Khi đảo ngược workload sang indexed point lookup, câu chuyện đổi chiều hoàn toàn.
| Workload | SQLite | DuckDB | Tỷ lệ |
|---|---|---|---|
| Primary key lookup | 0.063 ms | 0.927 ms | SQLite nhanh hơn 14.7× |
| Composite key lookup | 0.078 ms | 9.68 ms | SQLite nhanh hơn 124× |
| Indexed join | 0.118 ms | 13.3 ms | SQLite nhanh hơn 112.7× |
DuckDB không được xây dựng cho low-latency point query. Chi phí khởi động mỗi query của nó cao hơn vì nó compile query plan, song song hóa execution, và phải chịu setup cost mỗi lần. Điều đó xứng đáng với aggregation; không xứng đáng khi bạn đã biết địa chỉ row cần lấy.
Hệ sinh thái Python
Tích hợp Python của DuckDB là lý do hầu hết data engineer chọn nó ngày nay.
import duckdb
import pandas as pd
df = pd.read_csv("events.csv")
# query trực tiếp trên dataframe — không cần import trước
result = duckdb.sql("SELECT user_id, COUNT(*) FROM df GROUP BY user_id").df()
Bạn cũng có thể trả về Polars hoặc Arrow mà không cần copy dữ liệu:
# trả về Polars DataFrame qua Arrow
polars_df = duckdb.sql("SELECT * FROM df WHERE amount > 100").pl()
SQLite cần đi qua pd.to_sql() trước. Không có hỗ trợ Arrow gốc. Với ad-hoc analytics trên DataFrame, DuckDB là lựa chọn mặc định rõ ràng.
Hỗ trợ định dạng file
DuckDB đọc Parquet, CSV, JSON, Arrow, Delta, và Iceberg gốc — không cần import trước, không cần bảng trung gian.
# query file Parquet trên disk mà không cần load trước
duckdb.sql("SELECT * FROM 'events.parquet' WHERE ts > '2026-01-01'").show()
SQLite dùng định dạng độc quyền của riêng nó. Mọi định dạng khác đều cần import thủ công. Nếu dữ liệu của bạn nằm trong Parquet hoặc đến từ Arrow pipeline, DuckDB giảm đáng kể ma sát.
Mở rộng lên cloud
DuckDB là engine đứng sau MotherDuck, cho phép chạy cùng query DuckDB trên cloud storage mà không cần viết lại bất cứ thứ gì.
| Gói | Giá |
|---|---|
| Free | 10 GB storage + 10 compute-hours/tháng |
| Business | $250/tháng |
Nguồn: MotherDuck pricing
SQLite không có dịch vụ cloud chính thức. Các lựa chọn bên thứ ba — Turso, LiteFS, SQLite Cloud — tồn tại nhưng là những sản phẩm riêng biệt với API riêng và đánh đổi riêng. Không cái nào cung cấp con đường “cùng code, chạy trên cloud” như MotherDuck.
Không có chương trình affiliate nào với DuckDB, SQLite, hay MotherDuck.
Mức độ phổ biến của DuckDB và SQLite
DuckDB: 30K GitHub stars (tháng 6/2025), ~41M lượt tải PyPI mỗi tháng (tháng 5/2026), 3.3% người dùng trong Stack Overflow Developer Survey 2025, DB-Engines hạng #42.
SQLite: hàng tỷ lần triển khai trong mọi smartphone, browser, và hệ điều hành. Không có đối thủ thực sự trong embedded storage.
Trên thực tế, hai cái không cạnh tranh cùng phân khúc — tăng trưởng của DuckDB đang diễn ra ở analytics layer, không phải trên phần embedded mà SQLite đang nắm giữ.
Nếu analytical workload của bạn vượt ra ngoài khả năng một máy đơn, ClickHouse vs Postgres cho analytics so sánh các columnar database được thiết kế cho dataset 100M+ dòng.
Kết luận
Chọn DuckDB nếu:
- Bạn chạy analytics, aggregation, hoặc join trên hơn 10K dòng
- Bạn làm việc trong Python với pandas, Polars, hoặc Arrow
- Dữ liệu của bạn nằm trong Parquet, CSV, hoặc JSON và bạn muốn query trực tiếp không cần import
- Bạn muốn có lộ trình mở rộng lên cloud qua MotherDuck
Chọn SQLite nếu:
- Bạn đang xây app persistence, mobile backend, hoặc browser storage
- Bạn cần indexed lookup nhanh trên dataset nhỏ đến vừa
- Bạn đã dùng SQLite và không muốn thêm dependency
- Kích thước binary nhỏ là yêu cầu (~600 KB so với ~5 MB)
Nếu bạn đang outgrow SQLite và cần đánh giá các database quan hệ truyền thống, Postgres vs MySQL 2026 so sánh hai lựa chọn phổ biến nhất cho app persistence.
Lưu ý
Các con số benchmark ở trên dùng DuckDB v0.9.1 (Lukas Barth, 2024). DuckDB đã ra nhiều major version kể từ đó. DuckDB 1.5.3 hiện tại nhanh hơn trên analytical workload; lợi thế point-lookup của SQLite trên indexed query là do cấu trúc và khó có thể thay đổi. Hãy coi tất cả tỷ lệ là đúng về xu hướng nhưng có thể đang thấp hơn lợi thế analytical thực tế của DuckDB hiện tại.
Tài liệu tham khảo
- DuckDB 1.5.3 release notes
- DuckDB 1.5.0 release notes
- DuckDB 30K GitHub stars
- SQLite changelog
- Lukas Barth: SQLite vs DuckDB benchmark
- MotherDuck: DuckDB vs SQLite
- MotherDuck Python quickstart (part 2)
- DuckDB Polars docs
- KDnuggets 1M-row benchmark
- Stack Overflow Developer Survey 2025 — databases section
- DB-Engines: DuckDB system profile