BP-05 // JS/TS KHÔNG ĐỘ TRỄ MẠNG

Bun:sqlite & Node.js better-sqlite3: Bí Quyết Đạt 25.000 RPS Nhờ Truy Vấn Đồng Bộ

Giải bài toán thuế mạng N+1: cách thư viện C/Zig đồng bộ thực thi 15 câu lệnh SQL nhanh hơn 1 vòng khứ hồi TCP tới Postgres — kèm mô hình gom lô (Micro-Batching).

MỤC TIÊU THÔNG LƯỢNG MÔ HÌNH
24,800 TPS
ĐẶC TÍNH ĐỌC / RPO
0.09 ms
PHÂN KHÚC MÁY CHỦ THAM CHIẾU
$24–$48 HF NVMe

Lập trình viên JS thường mặc định mọi tác vụ DB phải bất đồng bộ (async), nhưng bọc async quanh SQLite như node-sqlite3 lại gây nghẽn hàng đợi luồng libuv. Ngược lại, `better-sqlite3` trên Node.js và `bun:sqlite` chạy đồng bộ ngay trong tiến trình chỉ mất ~8–25 micro-giây mỗi truy vấn, triệt tiêu hoàn toàn độ trễ N+1 và vượt mốc 25.000 RPS.

Trong bản vẽ lưu trữ BP-05 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 Bun:sqlite & Node.js better-sqlite3: Bí Quyết Đạt 25.000 RPS Nhờ Truy Vấn Đồng Bộ

  1. Biên dịch sẵn câu lệnh (`const stmt = db.prepare(...)`) ngay lúc khởi động ứng dụng — tuyệt đối không biên dịch lại chuỗi SQL bên trong hàm xử lý từng request.
  2. Gom các lượt ghi dồn dập (webhook, log, analytics) trong chu kỳ 4ms của Event Loop vào một giao dịch `db.transaction(batch)()` duy nhất để gộp hàng trăm lệnh INSERT trong 1 lần fsync.
  3. Để tận dụng hết 8 nhân vCPU cho tải đọc, chạy 1 tiến trình Ghi chính + N tiến trình HTTP Chỉ Đọc (`readonly: true`) chia tải qua cờ nhân SO_REUSEPORT.
  4. Đặt lịch chạy `PRAGMA optimize;` mỗi 4 giờ để SQLite tự động cập nhật thống kê chỉ mục (`sqlite_stat1`) giữ tốc độ tìm kiếm ổn định.

Mẫu Cấu Hình SQLiteEdge: Bộ Gom Lô Ghi Siêu Tốc (Node better-sqlite3 / Bun)

Bộ Gom Lô Ghi Siêu Tốc (Node better-sqlite3 / Bun)
import Database from 'better-sqlite3';

const db = new Database('/var/lib/app/saas.db');
db.pragma('journal_mode = WAL');
db.pragma('synchronous = NORMAL');
db.pragma('busy_timeout = 5000');
db.pragma('mmap_size = 8589934592');

const insertEvent = db.prepare(
  'INSERT INTO events (tenant_id, kind, payload, created_at) VALUES (?, ?, ?, ?)'
);
const commitBatch = db.transaction((rows) => {
  for (const r of rows) insertEvent.run(r.tenantId, r.kind, r.payload, r.ts);
});

// Gom các lượt ghi lẻ tẻ mỗi 4ms -> 1 lần flush NVMe = 40.000+ dòng/giây!
let queue = [];
setInterval(() => {
  if (queue.length === 0) return;
  const batch = queue;
  queue = [];
  commitBatch(batch);
}, 4);

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

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.

Kiến Trúc DB JavaScriptĐộ Trễ Trang 12 Truy VấnRPS Tối Đa 1 NodeChi Phí CPU
Cloud Postgres từ xa (1.4ms RTT x 12)18.6 ms3,400 RPSTốn mã hóa TLS & tuần tự hóa gói
Async node-sqlite3 (luồng libuv)2.9 ms6,800 RPSNghẽn khóa Mutex chuyển ngữ cảnh
Node.js 22 + better-sqlite3 (WAL + mmap)0.21 ms24,500 RPSC++ Zero-Copy siêu nhẹ
Bun + bun:sqlite + SO_REUSEPORT Workers0.14 ms38,000+ RPSTối ưu cực đại Zig/JSC

Cấu Hình Máy Chủ NVMe & Kho S3 Khớp Bản Vẽ BP-05 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-05 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-05 Trên SQLiteEdge →

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

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

  • Chạy đồng bộ better-sqlite3 có làm treo Event Loop của Node.js không?

    Một câu SELECT có đánh index trên vùng nhớ mmap chỉ tốn ~10 micro-giây (0.01ms) — nghĩa là thực thi 100 truy vấn mới hết 1ms, không hề gây nghẽn Event Loop. Chỉ các báo cáo quét hàng triệu dòng (>10ms) mới cần đẩy sang Worker Thread phụ.

  • Tại sao xung nhịp CPU 3.5GHz+ lại quan trọng đặc biệt với bun:sqlite và better-sqlite3?

    Vì không còn thời gian chờ mạng, toàn bộ tốc độ truy vấn phụ thuộc 100% vào hiệu năng đơn nhân (IPC) và băng thông RAM — giúp dòng Vultr High Frequency 3.7GHz+ phát huy sức mạnh vượt trội.