History System

Dạ, để thiết kế hệ thống lưu lịch sử thay đổi dữ liệu (Audit Trail), em triển khai như sau:


1. Mục tiêu chính:

  • Ghi lại ai, khi nào, thay đổi gì, thay đổi từ gì → thành gì.


2. Cách lưu:

✅ Audit Table riêng (phổ biến):

  • Tạo table như audit_log gồm:

    id | entity_name | entity_id | action | old_value | new_value | changed_by | changed_at

✅ Hoặc entity-based audit table:

  • Ví dụ user_audit, product_audit, ghi version theo từng thực thể.


3. Cách ghi log:

🔸 Ứng dụng Spring Boot:

  • Dùng JPA EntityListeners (hoặc @PreUpdate, @PostPersist) để bắt sự kiện thay đổi.

  • Hoặc dùng thư viện Hibernate Envers – tự động versioning các entity.

🔸 Thủ công (service layer):

  • Trước khi update/delete, so sánh oldnew, rồi ghi log vào DB hoặc Kafka.


4. Kiến trúc mở rộng:

  • Nếu hệ thống lớn, log thay đổi gửi vào Kafka, rồi có service lưu vào DB hoặc Elasticsearch (phục vụ audit search nhanh).


5. Bảo mật & hiệu suất:

  • Chỉ log các entity quan trọng (VD: User, Order, Payment).

  • Không log field nhạy cảm (password, token).

  • Batch insert hoặc async logging để không ảnh hưởng hiệu năng.


Tùy yêu cầu pháp lý hoặc nghiệp vụ, em chọn giữa full audit (từng field) hoặc chỉ log hành động (create/update/delete).

Last updated