La prima grande domanda quando ci si immerge in questo è "come si desidera memorizzare i set di modifiche" ?
- Diff?
- Copie di record interi?
Il mio approccio personale sarebbe quello di memorizzare le differenze. Poiché la visualizzazione di queste differenze è davvero un'azione speciale, inserirei le differenze in una raccolta di "storia" diversa.
Userei la raccolta diversa per risparmiare spazio in memoria. In genere non si desidera una cronologia completa per una semplice query. Quindi, mantenendo la cronologia fuori dall'oggetto, puoi anche tenerlo fuori dalla memoria a cui si accede comunemente quando vengono interrogati quei dati.
Per semplificarmi la vita, farei in modo che un documento di cronologia contenga un dizionario di differenze con l'ora. Qualcosa del genere:
{
_id : "id of address book record",
changes : {
1234567 : { "city" : "Omaha", "state" : "Nebraska" },
1234568 : { "city" : "Kansas City", "state" : "Missouri" }
}
}
Per semplificarmi la vita, farei questa parte dei miei DataObjects (EntityWrapper, qualunque cosa) che uso per accedere ai miei dati. Generalmente questi oggetti hanno una qualche forma di cronologia, in modo che tu possa facilmente sovrascrivere save()
metodo per apportare questa modifica contemporaneamente.
AGGIORNAMENTO:2015-10
Sembra che ora ci sia una specifica per la gestione delle differenze JSON. Questo sembra un modo più robusto per memorizzare le differenze/modifiche.