Chi phí không nằm ở việc chạy container mới, mà ở những khoản kéo dài suốt vòng đời hệ thống:
1. Mất tính nguyên tử. Hai kho dữ liệu không nằm chung transaction. Mỗi lần ghi liên quan cả hai là một khả năng lệch dữ liệu, kéo theo outbox/CDC, retry, idempotency và job đối soát — tất cả là code phải viết và bảo trì.
2. Nhân đôi phần vận hành. Backup và kiểm thử restore, monitoring, alerting, vá bảo mật, nâng phiên bản, tuning, kế hoạch mở rộng, phân quyền truy cập. Nhân với môi trường dev/staging/prod.
3. Thuế nhận thức. Người trực sự cố phải hiểu mô hình lỗi của kho mới lúc 2 giờ sáng. Nếu chỉ một người trong team biết vận hành nó, đó là điểm đơn lẻ về con người.
4. Bề mặt lỗi rộng hơn. Thêm một thành phần có thể chết, chậm, hết đĩa, hoặc mất kết nối mạng — và ứng dụng phải có hành vi suy giảm hợp lý cho từng trường hợp.
Cách trả lời cho thấy kinh nghiệm: trước hết kiểm tra Postgres đã đủ chưa. Postgres bao được JSONB cho dữ liệu bán cấu trúc, full-text search, hàng đợi job (SKIP LOCKED), pub/sub cơ bản (LISTEN/NOTIFY), và partition cho time-series. Một kho dữ liệu chuyên biệt xứng đáng khi có giới hạn đo được đã chạm (đo được bằng số, không phải phỏng đoán) và khi lợi ích lớn hơn toàn bộ chi phí trên — polyglot persistence là lựa chọn có chủ đích, không phải mặc định.
Cách trung gian tốt: dựng tính năng trên Postgres trước, đặt sau một interface, đo, rồi chuyển sang kho chuyên biệt khi số liệu chứng minh cần thiết.