SQLite Edge Database 2026 — Khi database nhỏ gọn nhất chinh phục production
Posted on: 4/20/2026 3:09:18 PM
Table of contents
- 1. Tại sao SQLite lại hot hơn bao giờ hết?
- 2. Hạn chế cốt lõi của SQLite thuần và giải pháp
- 3. Turso + LibSQL — Kiến trúc Embedded Replicas
- 4. Cloudflare D1 — Managed SQLite trên Edge Network toàn cầu
- 5. Litestream + LiteFS — Self-hosted replication
- 6. So sánh toàn diện các giải pháp
- 7. Kiến trúc thực tế: SaaS App với SQLite Edge
- 8. Khi nào nên và không nên dùng SQLite Edge
- 9. Timeline: Hành trình SQLite đến Production Edge
- 10. Hands-on: Triển khai blog API với Cloudflare D1
- 11. Best Practices khi dùng SQLite Edge
- 12. Kết luận
- Nguồn tham khảo
Trong suốt hơn 25 năm tồn tại, SQLite luôn được biết đến như một database "nhúng" (embedded) — chạy trực tiếp trong process của ứng dụng, không cần server, không cần cấu hình. Nó là database được triển khai nhiều nhất thế giới, có mặt trong mọi smartphone, trình duyệt web, và hàng triệu ứng dụng desktop. Nhưng trong nhiều năm, SQLite bị loại khỏi cuộc chơi production vì một lý do duy nhất: không thể phân tán.
Năm 2026, mọi thứ đã thay đổi hoàn toàn. Với sự xuất hiện của Turso + LibSQL, Cloudflare D1, và hệ sinh thái replication như LiteFS + Litestream, SQLite đang trải qua một cuộc phục hưng chưa từng có — từ một embedded database đơn giản trở thành nền tảng cho kiến trúc edge-first với độ trễ đo bằng microsecond.
1. Tại sao SQLite lại hot hơn bao giờ hết?
Sự trỗi dậy của SQLite trong production không phải là ngẫu nhiên. Nó là kết quả của ba xu hướng công nghệ hội tụ đúng thời điểm:
1.1. Edge Computing trở thành tiêu chuẩn
Khi Cloudflare Workers, Vercel Edge Functions, và Deno Deploy đưa compute ra gần người dùng, câu hỏi tự nhiên là: database ở đâu? Nếu code chạy ở edge nhưng database vẫn nằm ở us-east-1, round-trip latency sẽ triệt tiêu mọi lợi ích. SQLite — với bản chất chạy trong process — là ứng cử viên hoàn hảo cho edge database.
1.2. Local-first architecture lên ngôi
Triết lý "data sống cùng ứng dụng" (local-first) đang thay đổi cách thiết kế phần mềm. Thay vì mọi thao tác đều gọi API đến một database server tập trung, ứng dụng có bản sao dữ liệu ngay trong process — đọc cực nhanh, ghi sync lên cloud khi cần. SQLite là nền tảng tự nhiên cho mô hình này.
1.3. Hệ sinh thái replication trưởng thành
Hạn chế cốt lõi của SQLite — single-writer, không có built-in replication — đã được giải quyết bởi các công cụ chuyên dụng. Turso/LibSQL mang đến distributed replication. Litestream cung cấp continuous backup lên S3. LiteFS tạo transparent replication qua FUSE filesystem. Cloudflare D1 xây dựng managed SQLite với read replica toàn cầu.
Điểm bùng phát 2024-2026
Ba nền tảng — Cloudflare D1, Turso, và Fly.io LiteFS — đạt production maturity gần như đồng thời trong giai đoạn 2024-2025, tạo ra một hệ sinh thái hoàn chỉnh để chạy SQLite ở quy mô production. Đến 2026, SQLite edge database không còn là thí nghiệm mà là lựa chọn kiến trúc có cơ sở.
2. Hạn chế cốt lõi của SQLite thuần và giải pháp
Trước khi đi sâu vào từng nền tảng, cần hiểu rõ SQLite "thuần" (vanilla) thiếu gì, và hệ sinh thái 2026 bổ sung như thế nào:
| Hạn chế SQLite thuần | Ảnh hưởng | Giải pháp 2026 |
|---|---|---|
| Single-writer lock (WAL mode) | Chỉ 1 process ghi tại một thời điểm | Turso primary-follower, D1 managed writes |
| Không có network replication | Dữ liệu bị lock trên 1 node | LibSQL WAL streaming, LiteFS FUSE, Litestream S3 |
| Không có managed backup | Mất data nếu disk fail | Litestream continuous backup, D1 Time Travel 30 ngày |
| Không có read scaling | Mọi request đều hit 1 file | D1 auto read replicas, Turso Embedded Replicas |
| Không open-contribution | Không merge PR từ cộng đồng | LibSQL: fork mở, nhận contributions |
| Thiếu vector search | Không chạy được AI/semantic search | LibSQL native vector search |
3. Turso + LibSQL — Kiến trúc Embedded Replicas
LibSQL là fork mã nguồn mở của SQLite, được tạo ra vì SQLite dù open-source nhưng không chấp nhận contribution từ cộng đồng. LibSQL giữ nguyên backward compatibility với SQLite nhưng bổ sung các tính năng quan trọng cho production: native vector search, async I/O, và WAL-based replication.
Turso là managed platform xây trên LibSQL, cung cấp distributed SQLite với điểm nhấn là Embedded Replicas — tính năng game-changer cho phép chạy bản sao database ngay trong process của ứng dụng.
3.1. Cách Embedded Replicas hoạt động
graph TD
A["Client App
(Node.js / Go / Python)"] -->|"Reads < 10μs"| B["Embedded Replica
(SQLite file cục bộ)"]
A -->|"Writes"| C["Turso Primary
(Cloud Region)"]
C -->|"WAL frame sync"| B
C -->|"Replicate"| D["Follower 1
(Edge Region EU)"]
C -->|"Replicate"| E["Follower 2
(Edge Region Asia)"]
style A fill:#e94560,stroke:#fff,color:#fff
style B fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style C fill:#2c3e50,stroke:#fff,color:#fff
style D fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
style E fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
Kiến trúc Turso Embedded Replicas: reads cục bộ, writes qua primary
Cơ chế hoạt động cốt lõi:
- Reads cục bộ: Mọi truy vấn đọc chạy trực tiếp trên file SQLite nằm trong process — không có network round-trip. Thời gian đọc thường dưới 10 microsecond.
- Writes qua primary: Khi ghi dữ liệu, request được chuyển đến Turso Primary. Primary ghi vào WAL (Write-Ahead Log) và broadcast WAL frames đến tất cả replicas.
- Sync tự động: Embedded Replica nhận WAL frames và apply vào file SQLite cục bộ. Có thể cấu hình sync interval (ví dụ mỗi 1 giây) hoặc sync on-demand.
- Read-your-writes guarantee: Sau khi write thành công, replica gốc luôn thấy dữ liệu mới ngay lập tức — không cần gọi sync().
3.2. Code thực tế với Turso SDK
import { createClient } from "@libsql/client";
// Tạo client với Embedded Replica
const db = createClient({
url: "file:local-replica.db", // SQLite file cục bộ
syncUrl: "libsql://mydb-org.turso.io", // Primary trên cloud
authToken: process.env.TURSO_TOKEN,
syncInterval: 60, // Sync mỗi 60 giây
});
// READ — chạy trên file cục bộ, < 10μs
const users = await db.execute("SELECT * FROM users WHERE active = 1");
// WRITE — gửi lên primary, tự động sync về replica
await db.execute({
sql: "INSERT INTO users (name, email) VALUES (?, ?)",
args: ["Anh Tu", "tu@example.com"],
});
// Manual sync khi cần dữ liệu mới nhất
await db.sync();
Vector Search trên LibSQL
LibSQL hỗ trợ native vector search — bạn có thể lưu embeddings và tìm kiếm semantic trực tiếp trên SQLite mà không cần thêm vector database riêng. Đây là lợi thế lớn cho các ứng dụng AI cần RAG pipeline đơn giản.
3.3. Turso Pricing — Free tier hào phóng
| Plan | Databases | Storage | Rows read/tháng | Rows written/tháng | Giá |
|---|---|---|---|---|---|
| Starter | 500 | 9 GB | 25 tỷ | 50 triệu | Miễn phí |
| Scaler | 10.000 | 24 GB | 100 tỷ | 100 triệu | $29/tháng |
| Enterprise | Unlimited | Custom | Custom | Custom | Custom |
4. Cloudflare D1 — Managed SQLite trên Edge Network toàn cầu
Cloudflare D1 đi theo hướng khác: thay vì embedded replica, D1 là managed SQLite service tích hợp sâu vào hệ sinh thái Cloudflare Workers. Database chạy trên edge network của Cloudflare với hơn 300 PoP (Points of Presence) toàn cầu.
4.1. Kiến trúc D1
graph LR
U["User Request"] --> W["Cloudflare Worker
(Edge PoP gần nhất)"]
W -->|"Read"| RR["Read Replica
(cùng PoP)"]
W -->|"Write"| P["Primary DB
(Region chính)"]
P -->|"Auto replicate"| RR
P -->|"Auto replicate"| RR2["Read Replica
(PoP khác)"]
W --> KV["KV / R2 / Queues
(Hệ sinh thái CF)"]
style U fill:#e94560,stroke:#fff,color:#fff
style W fill:#2c3e50,stroke:#fff,color:#fff
style P fill:#16213e,stroke:#fff,color:#fff
style RR fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style RR2 fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style KV fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
Kiến trúc Cloudflare D1: read replicas tự động trên global edge network
4.2. Tính năng nổi bật của D1
- Auto read replication: Cloudflare tự động tạo read-only copies trên các PoP gần người dùng. Không cần cấu hình — chỉ cần enable, D1 xử lý phần còn lại.
- Time Travel: Khôi phục database về bất kỳ thời điểm nào trong 30 ngày gần nhất. Không cần backup thủ công, không cần snapshot schedule.
- Zero egress: Không phí truyền dữ liệu ra. Đây là lợi thế lớn so với AWS RDS hay Google Cloud SQL — nơi egress có thể chiếm phần lớn hóa đơn.
- Scale to zero: Không truy vấn = không tốn tiền. D1 không yêu cầu provisioning server trước.
- 50.000 databases / account: Phù hợp cho multi-tenant SaaS — mỗi tenant một database riêng.
4.3. Code với D1 trong Workers
// wrangler.toml
// [[d1_databases]]
// binding = "DB"
// database_name = "my-app-db"
// database_id = "xxxxx-xxxx-xxxx"
export default {
async fetch(request: Request, env: Env) {
// Query D1 — chạy trên edge, gần user nhất
const { results } = await env.DB.prepare(
"SELECT id, title, created_at FROM posts WHERE status = ? ORDER BY created_at DESC LIMIT 20"
).bind("published").all();
// Batch operations cho write performance
const batch = [
env.DB.prepare("INSERT INTO views (post_id, ts) VALUES (?, datetime('now'))").bind(postId),
env.DB.prepare("UPDATE posts SET view_count = view_count + 1 WHERE id = ?").bind(postId),
];
await env.DB.batch(batch);
return Response.json(results);
},
};
4.4. D1 Pricing
| Tier | Rows read/tháng | Rows written/tháng | Storage | Giá |
|---|---|---|---|---|
| Free | 5 triệu | 100.000 | 5 GB | $0 |
| Workers Paid | 25 tỷ (included) | 50 triệu (included) | 5 GB (included) | $5/tháng |
| Overage | $0.001/triệu reads | $1.00/triệu writes | $0.75/GB/tháng | Pay-as-you-go |
D1 + Data Platform 2026
Cloudflare vừa ra mắt R2 Data Catalog (Apache Iceberg tích hợp vào R2) và R2 SQL — engine SQL phân tán cho analytics trên dữ liệu R2. Kết hợp D1 cho transactional workload + R2 Data Catalog cho analytics, bạn có full data platform trên edge mà không cần AWS/GCP.
5. Litestream + LiteFS — Self-hosted replication
Không phải lúc nào cũng muốn dùng managed service. Với Litestream và LiteFS, bạn có thể tự xây dựng hệ thống replication cho SQLite trên infrastructure riêng.
5.1. Litestream — Continuous backup lên S3
Litestream giải quyết vấn đề quan trọng nhất của SQLite production: backup. Nó liên tục stream WAL changes lên S3-compatible storage (AWS S3, Cloudflare R2, MinIO) theo thời gian thực.
graph LR
APP["Ứng dụng"] -->|"Read/Write"| DB["SQLite DB
(local disk)"]
DB -->|"WAL changes"| LS["Litestream
(sidecar process)"]
LS -->|"Stream realtime"| S3["S3 / R2 / MinIO
(object storage)"]
S3 -->|"Restore"| DB2["SQLite DB
(node mới)"]
style APP fill:#e94560,stroke:#fff,color:#fff
style DB fill:#2c3e50,stroke:#fff,color:#fff
style LS fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style S3 fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
style DB2 fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
Litestream: continuous WAL streaming backup cho SQLite
# litestream.yml
dbs:
- path: /data/app.db
replicas:
- type: s3
bucket: my-backup-bucket
path: app.db
endpoint: https://xxx.r2.cloudflarestorage.com # Dùng R2 miễn phí egress
region: auto
access-key-id: ${R2_ACCESS_KEY}
secret-access-key: ${R2_SECRET_KEY}
sync-interval: 1s # RPO ~1 giây
snapshot-interval: 24h # Full snapshot mỗi ngày
Recovery Point Objective (RPO): Khoảng 1-2 giây. Nếu server chết, bạn mất tối đa vài giây dữ liệu gần nhất. So với cron-based backup (RPO hàng giờ), đây là bước tiến lớn.
5.2. LiteFS — Distributed filesystem replication
LiteFS (của Fly.io) hoạt động ở tầng filesystem: nó tạo một FUSE mount point, ứng dụng đọc/ghi SQLite file qua mount point này, và LiteFS tự động replicate changes đến các node khác trong cluster.
# litefs.yml
fuse:
dir: "/litefs" # Mount point — ứng dụng trỏ SQLite vào đây
data:
dir: "/var/lib/litefs"
lease:
type: "consul"
advertise-url: "http://${FLY_ALLOC_ID}.vm.${FLY_APP_NAME}.internal:20202"
consul:
url: "${FLY_CONSUL_URL}"
exec:
- cmd: "node server.js" # LiteFS khởi động app sau khi mount xong
Lưu ý về LiteFS
LiteFS Cloud (managed backup service) đã bị sunset tháng 10/2024, và Fly.io không còn ưu tiên phát triển tích cực LiteFS. Nó vẫn stable và dùng được trong production, nhưng ở trạng thái pre-1.0 beta. Với dự án mới, Turso hoặc D1 là lựa chọn an toàn hơn cho managed replication.
6. So sánh toàn diện các giải pháp
| Tiêu chí | Turso + LibSQL | Cloudflare D1 | LiteFS + Litestream | PostgreSQL (managed) |
|---|---|---|---|---|
| Mô hình | Managed + embedded | Managed serverless | Self-hosted | Managed server |
| Read latency | < 10μs (embedded) | 1-5ms (edge) | < 1ms (local) | 5-50ms (network) |
| Write model | Primary-follower | Single primary | Primary-follower (FUSE) | Single primary / multi-primary |
| Auto scaling | Scale to zero | Scale to zero | Manual | Vertical / read replicas |
| Backup / Recovery | Managed | Time Travel 30 ngày | Litestream S3 | Point-in-time recovery |
| Max DB size | Depends on plan | 10 GB / database | Unlimited (disk) | Unlimited |
| Vector search | Native (LibSQL) | Không | Không (cần extension) | pgvector |
| Free tier | 9GB, 25B reads | 5GB, 5M reads | N/A (self-host) | Tùy provider |
| Lock-in | Thấp (LibSQL OSS) | Trung bình (CF ecosystem) | Không | Thấp (SQL standard) |
| Phù hợp nhất | SaaS, mobile sync | Edge apps + CF Workers | Self-host, Fly.io | General purpose |
7. Kiến trúc thực tế: SaaS App với SQLite Edge
Để hiểu cách các thành phần kết hợp trong thực tế, hãy xem kiến trúc của một SaaS app sử dụng SQLite edge:
graph TD
subgraph "Edge Layer"
CF["Cloudflare Workers"]
D1A["D1 Database
(per-tenant)"]
KV["Workers KV
(config cache)"]
end
subgraph "Application Layer"
API["API Server
(Node.js + Turso)"]
ER["Embedded Replica
(local SQLite)"]
end
subgraph "Data Layer"
TP["Turso Primary
(global)"]
LS["Litestream"]
R2["Cloudflare R2
(backup + assets)"]
end
CF --> D1A
CF --> KV
CF -->|"API calls"| API
API --> ER
ER -->|"sync"| TP
TP --> LS
LS --> R2
style CF fill:#e94560,stroke:#fff,color:#fff
style API fill:#2c3e50,stroke:#fff,color:#fff
style TP fill:#16213e,stroke:#fff,color:#fff
style D1A fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style KV fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style ER fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
style LS fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
style R2 fill:#f8f9fa,stroke:#2c3e50,color:#2c3e50
Kiến trúc SaaS kết hợp D1 (edge layer) + Turso (application layer) + Litestream backup
Giải thích flow
- Edge Layer (Cloudflare): Static pages, API routing, và dữ liệu per-tenant (mỗi tenant có D1 database riêng — tận dụng giới hạn 50.000 DB/account). Workers KV cache config, feature flags.
- Application Layer: Business logic phức tạp chạy trên API server. Turso Embedded Replica cho reads cục bộ siêu nhanh. Writes sync lên Turso Primary.
- Data Layer: Turso Primary là source of truth. Litestream backup liên tục lên R2 (zero egress cost). R2 cũng chứa static assets, file uploads.
8. Khi nào nên và không nên dùng SQLite Edge
8.1. SQLite Edge phù hợp khi
- Read-heavy workload: Ứng dụng đọc nhiều hơn ghi — blog, CMS, dashboard, catalog. Embedded replicas biến reads thành local disk access.
- Edge-first apps: Khi bạn cần dữ liệu gần user — Cloudflare Workers + D1, Vercel Edge + Turso.
- Multi-tenant SaaS nhỏ-vừa: Database-per-tenant với D1 (50K DBs) hoặc Turso (500+ DBs free) — isolation tự nhiên, không cần row-level security phức tạp.
- Mobile / offline-first: Turso Embedded Replicas chạy trực tiếp trên thiết bị, sync khi có mạng.
- Side projects & MVPs: Free tier hào phóng, zero ops, deploy trong vài phút.
8.2. SQLite Edge KHÔNG phù hợp khi
- Write-heavy workload: SQLite vẫn là single-writer. Nếu bạn cần hàng nghìn concurrent writes/giây, PostgreSQL hoặc MySQL vẫn phù hợp hơn.
- Database lớn (> 10 GB): D1 giới hạn 10 GB/database. Turso cũng không thiết kế cho dataset TB-level.
- Complex queries + joins: SQLite thiếu nhiều tính năng SQL nâng cao (window functions hạn chế, không có stored procedures, CTE recursive có giới hạn).
- Strong consistency toàn cục: Mô hình primary-follower có eventual consistency cho reads. Nếu cần linearizable reads trên mọi node, cần database khác (CockroachDB, Spanner).
- Hệ sinh thái enterprise: Ít monitoring tools, ít DBA experience, ít third-party integrations so với PostgreSQL.
Đừng thay thế PostgreSQL chỉ vì trend
SQLite edge tỏa sáng ở một class ứng dụng cụ thể (read-heavy, edge-first, moderate scale). PostgreSQL vẫn là lựa chọn mặc định cho general-purpose OLTP. Chọn đúng tool cho đúng bài toán — không có silver bullet.
9. Timeline: Hành trình SQLite đến Production Edge
10. Hands-on: Triển khai blog API với Cloudflare D1
Một ví dụ thực tế để bắt đầu nhanh với D1:
# Khởi tạo project
npm create cloudflare@latest my-blog-api -- --type worker-ts
cd my-blog-api
# Tạo D1 database
npx wrangler d1 create blog-db
# Output: database_id = "xxxx-xxxx-xxxx"
# Thêm vào wrangler.toml
# [[d1_databases]]
# binding = "DB"
# database_name = "blog-db"
# database_id = "xxxx-xxxx-xxxx"
-- schema.sql
CREATE TABLE IF NOT EXISTS posts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
slug TEXT UNIQUE NOT NULL,
title TEXT NOT NULL,
body TEXT NOT NULL,
status TEXT DEFAULT 'draft',
created_at TEXT DEFAULT (datetime('now')),
updated_at TEXT DEFAULT (datetime('now'))
);
CREATE INDEX idx_posts_status ON posts(status);
CREATE INDEX idx_posts_slug ON posts(slug);
// src/index.ts
interface Env {
DB: D1Database;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
if (url.pathname === "/api/posts" && request.method === "GET") {
const { results } = await env.DB.prepare(
"SELECT id, slug, title, created_at FROM posts WHERE status = 'published' ORDER BY created_at DESC LIMIT 20"
).all();
return Response.json({ posts: results });
}
if (url.pathname.startsWith("/api/posts/") && request.method === "GET") {
const slug = url.pathname.split("/").pop();
const post = await env.DB.prepare(
"SELECT * FROM posts WHERE slug = ? AND status = 'published'"
).bind(slug).first();
if (!post) return new Response("Not found", { status: 404 });
return Response.json(post);
}
return new Response("Not found", { status: 404 });
},
};
# Apply schema
npx wrangler d1 execute blog-db --remote --file=schema.sql
# Deploy
npx wrangler deploy
Chỉ với vài file, bạn đã có một blog API chạy trên edge toàn cầu, zero cold start, với SQLite database có Time Travel backup 30 ngày — tất cả trong free tier.
11. Best Practices khi dùng SQLite Edge
- Batch writes: SQLite thực hiện tốt nhất khi ghi theo batch thay vì từng row. D1 hỗ trợ
db.batch(), Turso hỗ trợ transactions. - WAL mode bắt buộc: Luôn bật WAL mode (
PRAGMA journal_mode=WAL) — cho phép concurrent reads trong khi ghi. Turso và D1 đã bật mặc định. - Index đúng cách: SQLite query planner đơn giản hơn PostgreSQL. Tạo covering indexes cho các query phổ biến. Dùng
EXPLAIN QUERY PLANđể kiểm tra. - Giới hạn database size: Giữ mỗi database dưới 1 GB cho hiệu năng tốt nhất. Nếu cần lớn hơn, shard theo tenant hoặc theo thời gian.
- Monitor WAL size: WAL file quá lớn (> 100 MB) gây chậm checkpoint. Cấu hình
PRAGMA wal_autocheckpointphù hợp. - Backup strategy: Dù dùng managed service, luôn có thêm Litestream backup lên S3/R2 như safety net.
12. Kết luận
SQLite đang ở giữa cuộc phục hưng lớn nhất trong lịch sử 25 năm của mình. Từ một database "quá đơn giản cho production", nó đã trở thành lựa chọn hàng đầu cho một class ứng dụng mới: edge-first, read-heavy, và moderate-scale.
Với Turso + LibSQL cho embedded replicas và vector search, Cloudflare D1 cho managed edge database, và Litestream/LiteFS cho self-hosted replication — hệ sinh thái 2026 đã giải quyết gần như mọi hạn chế cốt lõi của SQLite thuần. Microsecond reads, zero egress, free tier hào phóng, và ops overhead gần bằng không — đó là giá trị mà SQLite edge mang lại.
Tuy nhiên, SQLite edge không phải silver bullet. Nó không thay thế PostgreSQL cho write-heavy OLTP, không thay thế ClickHouse cho analytics, và không phù hợp cho dataset TB-level. Hiểu rõ boundary của công cụ là chìa khóa để dùng nó hiệu quả.
Nếu bạn đang xây dựng ứng dụng mới trong 2026, hãy cân nhắc nghiêm túc SQLite edge trước khi mặc định chọn PostgreSQL. Có thể bạn sẽ ngạc nhiên khi database 25 năm tuổi này lại là thứ modern nhất trong stack của bạn.
Nguồn tham khảo
- Turso Embedded Replicas Documentation
- Cloudflare D1 Official Docs
- LibSQL GitHub Repository
- Litestream — Streaming Replication for SQLite
- LiteFS — Distributed SQLite on Fly.io
- The SQLite Renaissance: Taking Over Production in 2026
- Post-PostgreSQL: Is SQLite on the Edge Production Ready?
- Cloudflare Data Platform Announcement
WebAssembly & WASI 2026: Runtime đa nền tảng thay thế container?
Object Storage và File Upload System Design 2026 — S3, Cloudflare R2, Presigned URL và Chunked Upload
Disclaimer: The opinions expressed in this blog are solely my own and do not reflect the views or opinions of my employer or any affiliated organizations. The content provided is for informational and educational purposes only and should not be taken as professional advice. While I strive to provide accurate and up-to-date information, I make no warranties or guarantees about the completeness, reliability, or accuracy of the content. Readers are encouraged to verify the information and seek independent advice as needed. I disclaim any liability for decisions or actions taken based on the content of this blog.