# DAT — Data Architecture — | | | |---|---| | **Version** | 1.0 | | **Date** | YYYY-MM-DD | | **Author** | (skill sa-2-architecture) | | **Status** | 🟡 Draft | | **Approved by** | Tech Lead: — · DBA: — · DPO/Legal: — | | **Source** | SAD_… v1.0 · BR_… của BA · schema hiện tại | | **Scope** | | | **Confidence** | 🟡 | ## Change Log | Version | Date | Người sửa | Thay đổi | ADR | |---|---|---|---|---| | 1.0 | | | Bản đầu | — | --- ## 1. Nguyên tắc: mỗi thực thể có đúng một chủ *Quy tắc `D7`. Đồng bộ hai chiều không có chủ là cách sinh ra dữ liệu mâu thuẫn không ai gỡ được.* | Thực thể | **Hệ thống chủ (SoT)** | Bản sao ở đâu | Cập nhật bằng cơ chế gì | Trễ tối đa cho phép | Lệch quá thì sao | |---|---|---|---|---|---| | | | | event / CDC / job / gọi trực tiếp | | cảnh báo `QAS-nnn` | 🔴 Thực thể có **hai** chủ ⇒ chưa quyết xong, không được qua AG2. Chọn một bên; bên kia thành read model. ## 2. Mô hình dữ liệu mức khái niệm *Thực thể và quan hệ, chưa phải schema. Schema vật lý đủ cột, index, DDL và migration nằm ở `PDM` (`--focus pdm`), sinh sau tài liệu này — mỗi thực thể ở đây phải có ≥ 1 bảng trong `PDM` §2.* ```mermaid erDiagram ``` | Thực thể | Ý nghĩa nghiệp vụ | Khoá tự nhiên | Ước lượng số bản ghi (năm 1 / năm 3) | Tăng trưởng | |---|---|---|---|---| ## 3. Chọn công nghệ lưu trữ | Kho | Loại | Chứa gì | Vì sao loại này | `ADR` | |---|---|---|---|---| | | quan hệ / tài liệu / khoá-giá trị / cột / tìm kiếm | | gắn với `QAS-nnn` | | **Phương án bị loại:** *(quy tắc `D3`)* | Loại | Loại vì | Xét lại khi | |---|---|---| ## 4. Consistency | Nhánh dữ liệu | Mức nhất quán | Trễ tối đa | Vì sao chấp nhận được | Ai chấp nhận | `ADR` | |---|---|---|---|---|---| | Số dư ví | Mạnh | 0 | `BR-0nn` không cho phép sai | PO | | | Báo cáo tổng hợp | Eventual | ≤ 5 phút | Người dùng chấp nhận theo `QAS-nnn` | PO | | 🔴 **"Eventual consistency" không có con số trễ là câu nói suông.** Người dùng và QA cần biết lệch bao lâu là bình thường, bao lâu là sự cố. ### 4.1 Giao dịch xuyên service | Luồng nghiệp vụ | Cơ chế | Bù trừ khi lỗi giữa chừng | Ai phát hiện lệch | `ADR` | |---|---|---|---|---| | | saga / outbox / 2PC / không có | | job đối soát chạy … | | **Nếu chọn "không có"** — ghi rõ hệ quả: luồng nào có thể để lại trạng thái nửa vời, ai dọn, sau bao lâu. ## 5. Phân loại dữ liệu & tuân thủ | Nhóm dữ liệu | Mức nhạy cảm | Ví dụ trường | Lưu ở đâu | Mã hoá at-rest | Che khi hiển thị | Retention | Cách xoá theo yêu cầu | |---|---|---|---|---|---|---|---| | | công khai / nội bộ / **PII** / nhạy cảm | | | | | | | | Ràng buộc pháp lý | Nguồn | Hệ quả kiến trúc | |---|---|---| | Dữ liệu phải nằm trong lãnh thổ … | `CON-05` | Ràng buộc vùng cho mọi dịch vụ lưu trữ, kể cả backup và log | | Quyền được xoá | | Xoá thật hay ẩn danh hoá? Ảnh hưởng tới báo cáo lịch sử? | 🔴 **Backup và log cũng chứa PII.** Ràng buộc lãnh thổ và retention áp dụng cho cả hai — đây là chỗ bị bỏ sót nhiều nhất khi kiểm toán. ## 6. Vòng đời & lưu trữ dài hạn | Thực thể | Dữ liệu nóng | Chuyển sang lạnh sau | Xoá sau | Ai duyệt | |---|---|---|---|---| ## 7. Hiệu năng dữ liệu | Truy vấn quan trọng | Tần suất | Khối lượng quét | Chỉ mục cần | `QAS` | |---|---|---|---|---| | Vấn đề | Quyết định | `ADR` | |---|---|---| | Phân mảnh (sharding/partitioning) | có/không · khoá: … | | | Đọc/ghi tách nhau | | | | Cache: cái gì, invalidate thế nào | | | 🔴 **Cache invalidation phải thiết kế cùng lúc với cache.** Cache không có chiến lược làm mới là nguồn dữ liệu sai mà không ai nghi ngờ. ## 8. Migration dữ liệu legacy *Bỏ mục này nếu hệ thống hoàn toàn mới — ghi rõ "không áp dụng", đừng để trống.* | | | |---|---| | **Nguồn** | hệ thống · số bản ghi · chất lượng | | **Cách chuyển** | một lần (big bang) / song song hai hệ thống / cuốn chiếu theo nhóm | | **Ánh xạ trường** | *(bảng riêng bên dưới)* | | **Cách đối chiếu sau khi chuyển** | *(truy vấn nào, ngưỡng chênh lệch chấp nhận được là bao nhiêu)* | | **🔴 Cách rollback** | *(bắt buộc)* | | **Dữ liệu phát sinh trong lúc chuyển** | *(xử lý thế nào)* | | **Thời lượng cửa sổ cắt chuyển** | | **Ánh xạ trường** | Trường nguồn | Trường đích | Chuyển đổi | Xử lý giá trị thiếu/sai | |---|---|---|---| 🔴 **Migration không có rollback là migration một chiều.** Phải trả lời được: sau 2 giờ phát hiện sai thì quay lại thế nào, dữ liệu phát sinh trong 2 giờ đó xử lý ra sao. Chưa trả lời được ⇒ chặn AG2. ## 9. Sao lưu & khôi phục | | | |---|---| | Tần suất backup | | | Giữ bao lâu | | | **Lần khôi phục thử gần nhất** | *(chưa từng thử ⇒ `Confidence` 🔴 + `ARISK`)* | | Thời gian khôi phục đo được | … *(khớp với RTO ở `INF`)* | ## 10. Giả định & Ngoài phạm vi **Giả định:** | ID | Giả định | Cách xác minh | Nếu sai | |---|---|---|---| **Ngoài phạm vi:** - ## 11. Open Questions | ID | Câu hỏi | Hỏi ai | Từ ngày | Chặn gì | Hệ quả nếu trả lời ngược | |---|---|---|---|---|---|