Atualmente, estou trabalhando em um aplicativo wiki-esque usando o CouchDB e estou tentando implementar um esquema de versão de documentos. Na minha opinião, existem duas maneiras de fazer isso:
- Armazene cada versão como um documento separado
- Armazene versões mais antigas como anexos em um único documento.
No momento, tenho uma forma de # 1 funcionando. Quando um usuário edita um documento e o salva, o back-end primeiro copia a revisão anterior para um novo documento e, em seguida, salva a nova versão. Cada documento possui uma matriz de 'histórico' que contém dados em cada versão (o documento _id da versão antiga, um carimbo de data e hora, o editor etc.).
Como essa matriz de histórico pode ficar bastante longa para um documento atualizado com freqüência, eu tenho uma visão que busca um documento sem história durante uma leitura normal (e outra visão para buscar a história).
Minha pergunta é a seguinte: sinto-me desconfortável com a minha abordagem atual e tenho pensado em mudar para o método 'anexo'. Mas eu não tenho certeza. Espero que alguém que conheça o CouchDB melhor do que eu (eu estive nisso há algumas semanas - e este é o meu primeiro projeto usando o CouchDB ... e o NoSQL) possa me dizer quais são os prós e os contras de cada um. abordagem. Ou talvez haja algum outro esquema de versão que estou ignorando?
fonte
Respostas:
Armazenar apenas alterações será uma boa idéia, porque armazenar documentos antigos como documentos separados ou anexos à revisão final do banco de dados criará uma sobrecarga no servidor de banco de dados.
Sempre que você alterar um valor de chave no seu documento, adicione uma nova chave com o nome
_h_i_s_<key_name>
. No recém-criado (ou criado durante a última atualização), acrescente objetos como abaixo após cada edição / atualização: -ou
Essa abordagem economizará muito espaço em disco e largura de banda de replicação a longo prazo.
fonte
Sem nenhum conhecimento do CouchDB. Armazenar todas as versões, embora possa diferir apenas marginalmente do seu antecessor, é um desperdício de armazenamento. Eu recomendo armazenar apenas alterações.
Você pode dar uma olhada aqui ou procurar versões de dados.
fonte
anos depois ;-)
você não precisa armazenar as alterações porque o CouchDB fará isso por você. Se um documento for alterado, uma nova revisão será criada. Esteja ciente de que este é fisicamente outro documento com o mesmo,
_id
mas um novo_rev
(revisão) e consumirá espaço no seu disco.Com certeza, você teria que manter todas as revisões, o que significaria, que você precisa de um disco muito grande.
fonte