ImmuDB vs PostgreSQL: chọn DB nào cho audit log startup?

Chia sẻ bài viết

Mục lục
TL;DR
  • ImmuDB: DB immutable (append-only) cryptographic verifiable, mỗi entry có proof không thể sửa lén.
  • PostgreSQL: relational DB truyền thống, audit log qua trigger + table append-only thường.
  • ImmuDB thắng khi compliance nghiêm (finance, healthcare, e-vote): chứng minh data không bị tamper.
  • PostgreSQL thắng cho 95% startup: mature ecosystem, ai cũng biết SQL, query SQL phong phú.
  • Recommend dev VN: bắt đầu với Postgres + audit_log table, switch ImmuDB khi compliance bắt buộc.

Audit log là yêu cầu bắt buộc cho startup SaaS B2B 2026: ai làm gì với data, lúc nào, IP nào, tại sao. Khi gặp incident hoặc audit GDPR/SOC 2, audit log là cứu cánh. Câu hỏi: dùng Postgres truyền thống hay tool chuyên dụng như ImmuDB? Bài này so sánh kỹ, đưa khuyến nghị thực tế cho dev VN.

ImmuDB của Codenotary là DB open source MIT, write-once-read-many (WORM), mỗi entry có Merkle tree proof tamper-evident. Postgres không có built-in nhưng có thể implement audit log với trigger + table append-only. Hai approach phù hợp use case khác nhau.

Mục tiêu cuối bài: bạn hiểu khi nào nên dùng ImmuDB vs Postgres cho audit, biết setup cả hai trên VPS Ubuntu, có pattern code Node.js/Python pattern để integrate vào app.

1. Audit log là gì và tại sao quan trọng?

Audit log ghi lại mọi thay đổi quan trọng trong system: user X delete user Y lúc 2026-06-15 14:32, từ IP 1.2.3.4. Use case bắt buộc:

  • Compliance: SOC 2, ISO 27001, PCI-DSS yêu cầu retain audit log 1-7 năm.
  • Forensic: khi data corrupt/leak, trace ngược ai làm gì.
  • Anti-fraud: detect pattern hành vi bất thường.
  • Customer support: "tại sao đơn của tôi bị huỷ?" - check ai/lúc nào.
  • Legal: chứng cứ trước toà khi tranh chấp B2B.

2. ImmuDB: immutable database

ImmuDB là DB write-only được build trên Merkle tree + Accumulator cryptography. Đặc trưng:

  • Mọi insert/update tạo entry mới, không xoá entry cũ.
  • Mỗi entry có cryptographic proof (Merkle path).
  • Client có thể verify proof offline (không trust server).
  • Có SQL interface (subset) hoặc key-value interface.
  • Performance: 1M write/s trên server xịn, 50k write/s VPS 4GB.
  • Storage cao: ~3-5x raw data vì giữ Merkle tree.

3. PostgreSQL audit pattern

-- Tạo table audit_log với REVOKE quyền UPDATE/DELETE
CREATE TABLE audit_log (
  id BIGSERIAL PRIMARY KEY,
  actor_id BIGINT,
  action TEXT NOT NULL,
  entity_type TEXT NOT NULL,
  entity_id BIGINT,
  old_value JSONB,
  new_value JSONB,
  ip_address INET,
  user_agent TEXT,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- Index cho query phổ biến
CREATE INDEX audit_actor_idx ON audit_log(actor_id, created_at DESC);
CREATE INDEX audit_entity_idx ON audit_log(entity_type, entity_id);

-- Revoke quyền sửa, chỉ INSERT
REVOKE UPDATE, DELETE ON audit_log FROM app_user;
GRANT INSERT, SELECT ON audit_log TO app_user;

Cộng thêm trigger trên table chính tự động ghi audit khi UPDATE/DELETE. Đủ cho 95% startup B2B SaaS.

4. Cài ImmuDB trên VPS Ubuntu

# Cài qua Docker
docker run -d --name immudb 
  -p 3322:3322 
  -p 9497:9497 
  -p 8080:8080 
  -e IMMUDB_ADMIN_PASSWORD=$STRONG_PASSWORD 
  -v immudb-data:/var/lib/immudb 
  --restart unless-stopped 
  codenotary/immudb:latest

# Client CLI
docker run --rm -it codenotary/immuclient:latest 
  --immudb-address=1.2.3.4 
  --immudb-port=3322 
  login immudb
# Create DB và table
immuclient> use defaultdb
immuclient> exec "CREATE TABLE audit_log (
  id INTEGER AUTO_INCREMENT,
  actor_id INTEGER,
  action VARCHAR,
  entity_type VARCHAR,
  entity_id INTEGER,
  payload VARCHAR,
  created_at TIMESTAMP,
  PRIMARY KEY id
);"

5. So sánh API client

// Node.js client ImmuDB
import ImmudbClient from "immudb-node";

const client = new ImmudbClient({
  host: "1.2.3.4", port: 3322,
  user: "immudb", password: process.env.IMMUDB_PASSWORD
});
await client.login();

// Insert
await client.set({ key: `audit:${id}`, value: JSON.stringify(event) });

// Verified read (with cryptographic proof)
const { value, proof } = await client.verifiedGet({ key: `audit:${id}` });
console.log("verified:", proof.verified);
// Postgres equivalent
import { Pool } from "pg";
const pool = new Pool({ connectionString: process.env.DATABASE_URL });

await pool.query(
  "INSERT INTO audit_log (actor_id, action, entity_type, entity_id, new_value, ip_address) " +
  "VALUES ($1, $2, $3, $4, $5, $6)",
  [actorId, "delete_user", "user", userId, newValue, ipAddress]
);

ImmuDB API có thêm verifiedGet cho proof. Postgres không có concept này, phải implement bằng hash chain manual nếu cần verify.

6. Bảng so sánh chi tiết

Tiêu chíImmuDBPostgreSQL audit table
Tamper-proofCó (cryptographic)Phải tự implement hash chain
SQL phong phúSubset SQL (JOIN giới hạn)Full SQL
Ecosystem toolHạn chế (pgAdmin tương đương: immudb web UI)Rất rộng (pgAdmin, DBeaver, etc.)
Backup/restoreBuilt-in immuadmin backuppg_dump quen thuộc
Storage overhead3-5x raw data~1.2x (chỉ index)
Performance write50k-1M tps10k-100k tps
RAM requirement1-4GB500MB-2GB
Learning curve dev VNMới, ít doc tiếng ViệtMọi dev đều biết
LicenseApache 2.0PostgreSQL License
Use case idealAudit log compliance heavyGeneral audit, có thể skip nếu không compliance

7. Implement hash chain với Postgres

Muốn Postgres tamper-evident gần ImmuDB, implement hash chain:

ALTER TABLE audit_log ADD COLUMN prev_hash TEXT;
ALTER TABLE audit_log ADD COLUMN entry_hash TEXT;

-- Trigger tính hash mỗi insert
CREATE OR REPLACE FUNCTION compute_audit_hash() RETURNS trigger AS $$
DECLARE
  last_hash TEXT;
BEGIN
  SELECT entry_hash INTO last_hash FROM audit_log
    ORDER BY id DESC LIMIT 1;
  NEW.prev_hash := COALESCE(last_hash, 'genesis');
  NEW.entry_hash := encode(digest(
    NEW.prev_hash || NEW.actor_id || NEW.action || NEW.entity_id || NEW.created_at::TEXT,
    'sha256'
  ), 'hex');
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER audit_hash_trigger BEFORE INSERT ON audit_log
  FOR EACH ROW EXECUTE FUNCTION compute_audit_hash();

Verify: re-compute hash của từng row, so với entry_hash lưu. Mismatch = tampered. Đơn giản hơn ImmuDB nhưng cần custom code, không cryptographic full proof như Merkle tree.

8. Khi nào nên dùng ImmuDB?

  • Compliance nghiêm: PCI-DSS Level 1 (finance, payment), HIPAA (medical), SOC 2 Type II audit thực sự.
  • E-vote, e-bidding: cần proof không sửa kết quả.
  • Supply chain tracking: cần verify chain of custody.
  • Logging hành động admin trên production DB cực nhạy cảm.
  • Khi auditor yêu cầu "third-party verifiable" proof.

9. Khi nào Postgres là đủ?

  • Startup SaaS B2B nhỏ-vừa, không có compliance gắt.
  • Internal app dev tool, dashboard analytics.
  • E-commerce thường (không phải finance).
  • Khi team dev quen SQL, không muốn học stack mới.
  • Khi cần JOIN audit với data table chính (Postgres native, ImmuDB phức tạp).

10. Hybrid pattern: Postgres + ImmuDB

Best of both worlds cho startup compliance medium:

  • Postgres: chứa app data + audit log thường (90% query qua đây).
  • ImmuDB: chỉ chứa hash của critical event (login admin, payment, data export).
  • Khi audit, verify hash Postgres event với hash trong ImmuDB.
  • Storage overhead thấp (chỉ hash 32 byte/event).
  • Performance app không bị ảnh hưởng.

11. Retention và compliance VN

  • Luật An ninh mạng VN: log retention 1 năm cho service online.
  • Ngân hàng (Quyết định NHNN): retention 10 năm cho giao dịch.
  • Y tế (Bộ Y tế): retention 15-20 năm cho hồ sơ bệnh án.
  • SaaS B2B chung: 90 ngày - 2 năm tuỳ thoả thuận khách.
  • Strategy: hot storage (Postgres) 90 ngày, cold storage (S3 Glacier hoặc ImmuDB) 1-10 năm.

12. Khuyến nghị thực dụng dev VN

  • Startup
  • Startup compliance (finance, health): Hybrid Postgres + ImmuDB cho critical event.
  • Enterprise compliance hardcore: ImmuDB primary cho audit, Postgres cho app data.
  • Không over-engineer. Đa số startup chết vì product không fit, không phải vì audit log.
Cloud VPS cho vibe coder

VPS chạy ImmuDB hoặc Postgres audit log production

Cloud VPS TND SSD CEPH, snapshot 1-click, backup hằng ngày, network 200Mbps trong nước. Gói Pro 4GB chạy Postgres 16 + ImmuDB song song cho hybrid pattern, đủ throughput cho 10k-50k audit event mỗi ngày của SaaS startup.

Xem 8 cấu hình Cloud VPS →

FAQ

ImmuDB có thay được Postgres làm DB chính không?

Không. ImmuDB là audit/log database, SQL subset, không hỗ trợ UPDATE/DELETE đúng nghĩa. Postgres là general-purpose RDBMS, hỗ trợ full CRUD, JSON, full-text search, vector. Dùng ImmuDB cùng Postgres (Postgres làm app DB, ImmuDB làm audit) là pattern đúng.

Trigger Postgres có ảnh hưởng performance write app không?

Có, ~10-30% overhead cho insert/update. Mỗi statement tốn thêm 1 INSERT vào audit_log. Mitigation: batch insert, async logging qua LISTEN/NOTIFY, hoặc dùng pgaudit extension (logging Postgres native). Với traffic <1000 query/s, overhead chấp nhận được.

ImmuDB có replication HA không?

Có từ v1.2. Async replication master-replica, replica read-only. Setup giống Postgres logical replication. Sync mode cũng có nhưng latency cao do cryptographic verification. Cho audit log thường, async replica là đủ.

Có thể dùng ImmuDB không cần verify cryptographic không?

Được nhưng phí phạm tính năng. Nếu không cần verify, dùng Postgres append-only table đơn giản hơn nhiều. ImmuDB chỉ worth khi bạn thực sự verify proof định kỳ (compliance audit, customer dispute resolution).

Storage cho audit log lớn dần, làm sao archive?

Postgres: partition table theo month (pg_partman), drop partition cũ >1 năm hoặc move sang S3/R2 dạng Parquet. ImmuDB: backup database thành file SQL, archive S3 cold storage, restore khi cần audit. Cả hai cần policy retention rõ ràng, automation cron job dọn dẹp.

ImmuDB Vault SaaS có phù hợp startup VN không?

Vault SaaS của Codenotary 25-200$/tháng, cloud-hosted, tránh maintain. Phù hợp startup không có DevOps. Nhược: data trên cloud nước ngoài, latency cao hơn self-host trên VPS TND HCM. Mình recommend self-host trên VPS riêng nếu data nhạy cảm cho dev VN.

Chat Zalo nhận báo giá Gọi 0225.999.6666
2009
15+ năm vận hành liên tục
10+
tập đoàn lớn tin dùng
100+
doanh nghiệp SMB Việt
30 ngày
đổi key lỗi miễn phí
Phần mềm bản quyền chính hãng chúng tôi cung cấp
Bản quyền chính hãng Hóa đơn VAT đầy đủ Đổi key lỗi 30 ngày Vận hành từ 2009 MST 0200994870 Hotline 0225.999.6666