NoSQL scale tốt, dùng MongoDB cho core banking, ai ngờ khách bị charge 2 lần!
Một startup fintech Việt Nam, xây ví điện tử, chọn MongoDB cho hệ thống thanh toán vì “scale ngon”. Kết quả? Không hỗ trợ transaction, dẫn đến double charge, dữ liệu lệch, reconcile thủ công không nổi. Khách hàng phàn nàn, team mất 3 tháng fix.
Case thực tế: NoSQL “phá đảo” thanh toán
- Context: Ví điện tử, 5000 giao dịch/ngày, dùng MongoDB cho core banking logic.
- Quyết định sai: Chọn MongoDB vì “scale dễ”, không kiểm tra yêu cầu ACID.
- Vấn đề:
- MongoDB (phiên bản cũ) không hỗ trợ transaction đa tài liệu mạnh.
- Double charge: User bị trừ tiền 2 lần vì race condition.
- Reconcile thủ công: Team đối chiếu giao dịch bằng Excel, mất hàng tuần.
Hậu quả:
- Mất tiền: Thất thoát 200 triệu đồng vì lệch dữ liệu.
- Khách hàng bực: Phàn nàn, yêu cầu hoàn tiền.
- Chi phí fix: Chuyển sang PostgreSQL, tốn 3 tháng refactor.
Phân tích: Tại sao lại sai?
- Hiểu sai yêu cầu: Thanh toán cần ACID (Atomicity, Consistency, Isolation, Durability), MongoDB không mạnh khoản này.
- Chạy theo hype: NoSQL “xịn” nhưng không hợp với core banking.
- Thiếu PoC: Không test transaction dưới high load trước khi triển khai.
Bài học: Đừng hy sinh transaction
- Chọn DB hỗ trợ ACID: PostgreSQL, MySQL cho hệ thống tài chính.
- Test transaction: Mô phỏng race condition trong staging.
- Reconcile tự động: Dùng job kiểm tra dữ liệu định kỳ.
Code mẫu: Transaction PostgreSQL
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
COMMIT;Góc nhìn CTO
Transaction không phải “chuyện nhỏ”. Với hệ thống tài chính, chọn DB hỗ trợ ACID là bắt buộc. Đừng hy sinh consistency vì “scalability ảo”, để không mất tiền và khách hàng không “chửi”!
Checklist chọn DB tài chính:
- Dùng DB hỗ trợ ACID (PostgreSQL, MySQL).
- Test transaction dưới high load.
- Setup reconcile job tự động.
- Monitor lệch dữ liệu qua alert.
🎯 Tóm lại: Chọn MongoDB cho core banking là “tự mua dây buộc mình”. Dùng PostgreSQL, test transaction, để tiền không “bay” và team không debug bằng Excel!

Đăng nhận xét