A primeira grande questão ao mergulhar nisso é "como você deseja armazenar conjuntos de alterações" ?
- Diferenças?
- Cópias de registros inteiros?
Minha abordagem pessoal seria armazenar diffs. Como a exibição desses diffs é realmente uma ação especial, eu colocaria os diffs em uma coleção de "histórico" diferente.
Eu usaria a coleção diferente para economizar espaço de memória. Você geralmente não quer um histórico completo para uma consulta simples. Portanto, mantendo o histórico fora do objeto, você também pode mantê-lo fora da memória comumente acessada quando esses dados são consultados.
Para facilitar minha vida, eu faria um documento de história conter um dicionário de diferenças com carimbo de data/hora. Algo assim:
{
_id : "id of address book record",
changes : {
1234567 : { "city" : "Omaha", "state" : "Nebraska" },
1234568 : { "city" : "Kansas City", "state" : "Missouri" }
}
}
Para facilitar minha vida, eu faria essa parte dos meus DataObjects (EntityWrapper, qualquer que seja) que eu uso para acessar meus dados. Geralmente, esses objetos têm alguma forma de histórico, para que você possa substituir facilmente o
save()
método para fazer essa alteração ao mesmo tempo. ATUALIZAÇÃO:2015-10
Parece que agora há uma especificação para lidar com diferenças JSON. Esta parece ser uma maneira mais robusta de armazenar os diffs/changes.