Câu hỏi lớn đầu tiên khi đi sâu vào vấn đề này là "bạn muốn lưu trữ các bộ thay đổi như thế nào" ?
- Chênh lệch?
- Bản sao toàn bộ hồ sơ?
Cách tiếp cận cá nhân của tôi sẽ là lưu trữ các khác biệt. Bởi vì việc hiển thị các điểm khác biệt này thực sự là một hành động đặc biệt, tôi sẽ đặt các điểm khác biệt vào một bộ sưu tập "lịch sử" khác.
Tôi sẽ sử dụng bộ sưu tập khác nhau để tiết kiệm dung lượng bộ nhớ. Bạn thường không muốn có toàn bộ lịch sử cho một truy vấn đơn giản. Vì vậy, bằng cách giữ lịch sử bên ngoài đối tượng, bạn cũng có thể ngăn lịch sử ra khỏi bộ nhớ thường được truy cập khi dữ liệu đó được truy vấn.
Để làm cho cuộc sống của tôi trở nên dễ dàng, tôi sẽ tạo một tài liệu lịch sử chứa một từ điển về các khác biệt được đóng dấu thời gian. Một cái gì đó như thế này:
{
_id : "id of address book record",
changes : {
1234567 : { "city" : "Omaha", "state" : "Nebraska" },
1234568 : { "city" : "Kansas City", "state" : "Missouri" }
}
}
Để làm cho cuộc sống của tôi thực sự dễ dàng, tôi sẽ tạo phần này trong DataObjects (EntityWrapper, bất cứ thứ gì) mà tôi sử dụng để truy cập dữ liệu của mình. Nói chung các đối tượng này có một số dạng lịch sử, do đó bạn có thể dễ dàng ghi đè save()
để thực hiện thay đổi này cùng một lúc.
CẬP NHẬT:2015-10
Có vẻ như bây giờ có một thông số kỹ thuật để xử lý các khác biệt JSON. Đây dường như là một cách mạnh mẽ hơn để lưu trữ các khác biệt / thay đổi.