BP-08 // KIẾN TRÚC MỖI KHÁCH 1 DB

Multi-Tenant Database-Per-User: Mở Rộng Tải Ghi Ngang Vô Hạn Trên Một VPS NVMe

Vượt qua giới hạn một luồng ghi mãi mãi bằng cách cấp riêng cho mỗi tổ chức khách hàng một tệp `.sqlite3` độc lập, quản lý qua bộ đệm LRU và xuất dữ liệu tức thời.

MỤC TIÊU THÔNG LƯỢNG MÔ HÌNH
100,000+ Aggregate
ĐẶC TÍNH ĐỌC / RPO
Zero Cross-Tenant Leak
PHÂN KHÚC MÁY CHỦ THAM CHIẾU
$48–$96 Multi-Core NVMe

Giới hạn "một luồng ghi" của SQLite chỉ áp dụng trên phạm vi MỘT tệp — không phải toàn máy chủ! Khi nền tảng B2B SaaS tách mỗi công ty khách hàng ra một tệp riêng (`tenant_8492.sqlite3`) trên VPS NVMe 12 nhân, 12 khách hàng ghi đồng thời trên đủ 12 nhân CPU không chút tranh chấp khóa, cô lập dữ liệu tuyệt đối và xóa/xuất dữ liệu GDPR chỉ bằng 1 lệnh sao chép tệp.

Trong bản vẽ lưu trữ BP-08 trên SQLiteEdge, mọi tham số dưới đây bám sát tài liệu SQLite 3.46 và biểu phí nhà cung cấp đối chiếu ngày 2026-11-12.

Nguyên Tắc Thiết Kế SQLiteEdge Cho Multi-Tenant Database-Per-User: Mở Rộng Tải Ghi Ngang Vô Hạn Trên Một VPS NVMe

  1. Quản lý kết nối bằng bộ đệm LRU trên RAM (ví dụ giữ tối đa 512 tệp đang mở), tự động gọi `PRAGMA wal_checkpoint(TRUNCATE)` và đóng gọn các tệp ngưng hoạt động sau 5 phút.
  2. Giới hạn `cache_size = -16384` (16 MiB) cho từng tệp mở và để bộ đệm trang của nhân Linux tự động ưu tiên RAM cho các khách hàng đang truy cập sôi nổi nhất.
  3. Chạy nâng cấp cấu trúc bảng theo cơ chế lười (Lazy Migration kiểm tra `PRAGMA user_version`) ngay lúc mở tệp — mất chưa tới 5ms cho từng khách hàng mà không bao giờ treo toàn hệ thống!
  4. Quét đồng bộ định kỳ mỗi 5 phút chỉ những tệp `.sqlite3` có thay đổi (mtime/sha256), nén ZSTD đẩy về kho lưu trữ InterServer 1TB giá $6.

Mẫu Cấu Hình SQLiteEdge: Bộ Quản Lý Kết Nối LRU Theo Tenant + Nâng Cấp Schema Tức Thời

Bộ Quản Lý Kết Nối LRU Theo Tenant + Nâng Cấp Schema Tức Thời
const MAX_OPEN_TENANTS = 512;
const pool = new Map(); // tenantId -> { db, lastUsed }

export function getTenantDb(tenantId) {
  const safeId = tenantId.replace(/[^a-zA-Z0-9_-]/g, '');
  if (pool.has(safeId)) {
    const entry = pool.get(safeId);
    entry.lastUsed = Date.now();
    pool.delete(safeId);
    pool.set(safeId, entry); // Đẩy lên đầu danh sách LRU
    return entry.db;
  }

  if (pool.size >= MAX_OPEN_TENANTS) {
    const [oldestKey, oldestVal] = pool.entries().next().value;
    oldestVal.db.pragma('wal_checkpoint(TRUNCATE)');
    oldestVal.db.close();
    pool.delete(oldestKey);
  }

  const db = new Database(`/var/lib/tenants/${safeId}.sqlite3`);
  db.pragma('journal_mode = WAL');
  db.pragma('synchronous = NORMAL');
  db.pragma('cache_size = -16384'); // 16 MiB mỗi tenant đang hoạt động
  runLazyMigrations(db);            // Kiểm tra phiên bản qua PRAGMA user_version
  pool.set(safeId, { db, lastUsed: Date.now() });
  return db;
}

Bảng Mô Hình Thông Số & Chi Phí SQLiteEdge (BP-08)

Các mức giá tham khảo cập nhật ngày 2026-11-12 từ trang công khai của hãng (giá có thể thay đổi khi thanh toán); thông số thông lượng là ước tính mô hình lý thuyết, hãy tự xác thực bằng fio trên máy chủ của bạn.

Mô Hình Kiến TrúcTổng TPS Ghi Toàn MáyXuất / Xóa Dữ Liệu KháchẢnh Hưởng Chéo Giữa Khách
Postgres Dùng Chung Bảng (RLS)~9,000 TPS (Chung 1 WAL)Chạy DELETE nặng nề theo ID1 truy vấn nặng kéo chậm toàn cụm
1 Tệp SQLite Khổng Lồ Duy Nhất~22,000 TPS (Khóa 1 Nhân)Phải lọc xuất từng bảngKhách ghi nhiều làm khách khác chờ
Mỗi Tenant 1 Tệp Trên 8–12 vCPU NVMe95,000+ TPS (Đủ Mọi Nhân)Copy / xóa tệp xong ngay tức thì!Bằng 0 — cây B-tree & khóa tách biệt

Cấu Hình Máy Chủ NVMe & Kho S3 Khớp Bản Vẽ BP-08 Trên SQLiteEdge

  • Vultr High Frequency 3.5GHz+ Ổ NVMe Cục Bộ (Độ Trễ fsync Cực Thấp)
    Xung đơn nhân 3.7GHz+ & NVMe trực tiếp • fsync ~0.045ms đẩy kịch trần TPS ghi đơn luồng SQLite WAL (https://www.vultr.com/pricing/)
    Xem Gói Vultr Cho BP-08 Trên SQLiteEdge →
  • InterServer Storage $6 Khóa Giá Trọn Đời (Đích Lưu Trữ S3 / MinIO Cho Litestream)
    Chỉ $6/tháng khóa giá trọn đời cho 1TB • $0 phí lệnh PUT S3 khi stream WAL mỗi giây bằng Litestream (https://www.interserver.net/vps/)
    Xem Kho S3 InterServer Cho BP-08 Trên SQLiteEdge →

Mở kịch bản BP-08 này trong Trình Sinh PRAGMA SQLiteEdge →

Câu Hỏi Kỹ Thuật SQLiteEdge Cho Bản Vẽ BP-08

  • Một phân vùng Linux ext4 trên ổ NVMe chứa được bao nhiêu tệp `.sqlite3` mượt mà?

    ext4 vận hành nhẹ nhàng từ 100.000 đến hơn 1.000.000 tệp khi bạn chia vào thư mục con theo 2 ký tự băm đầu tiên (`/var/lib/tenants/a4/tenant_a49f.sqlite3`) để tránh dồn quá nhiều tệp trong một thư mục gốc.

  • Vì sao Lazy Migration qua PRAGMA user_version là vũ khí tối thượng cho B2B SaaS?

    Trên DB dùng chung 400 triệu dòng, một lệnh ALTER TABLE có thể khóa cứng mọi khách hàng cùng lúc. Với mô hình mỗi khách 1 tệp SQLite 50 MB, việc nâng cấp diễn ra vỏn vẹn 3ms ngay khoảnh khắc khách hàng đó đăng nhập.