MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

O django com mongodb torna as migrações uma coisa do passado?


Eu acho que essa é uma pergunta muito boa, mas as respostas serão um pouco dispersas com base nas bibliotecas que você está usando e suas expectativas para uma "migração".

Vejamos algumas ações comuns de migração:
  • Adicionar um campo: Mongo torna isso muito fácil. Basta adicionar um campo e pronto.
  • Excluir um campo: Em teoria, você não está realmente vinculado ao seu esquema, então a "exclusão" aqui é relativa. Se você remover a "propriedade" e não carregar mais o campo, não importa realmente se esse campo está nos dados. Então, se você não se preocupar em "limpar" o banco de dados, a remoção de um campo não afetará o banco de dados. Se você fazer se preocupar em limpar o banco de dados, você basicamente precisará executar um loop for gigante no banco de dados.
  • Modificar um nome de campo: Este também é um problema difícil. Quando você renomeia um campo "onde" você o está renomeando? Se você deseja que o banco de dados reflita o novo nome do campo, basicamente você precisa executar um loop for gigante no banco de dados. PARA estar seguro, você provavelmente precisa "adicionar" dados, enviar código e, em seguida, "desativar" o campo antigo.

Algumas rugas

No entanto, o conceito de um nome de campo em conjunto com um objeto ActiveRecord é um pouco distorcido. Um objeto ActiveRecord está fornecendo efetivamente mapeamentos de propriedades de objetos para campos de banco de dados reais.

Em um RDBMS típico, o "tamanho" de um nome de campo não é realmente relevante. No entanto, no Mongo, o nome do campo na verdade ocupa espaço de dados e isso faz uma grande diferença em termos de desempenho.

Agora, se você estiver usando alguma forma de "objeto de dados" como ActiveRecord, por que você tentaria armazenar nomes de campos completos nos dados? O banco de dados provavelmente deve estar armazenando todos os campos em ordem alfabética com um mapa no lado do objeto. Assim, um Documento poderia ter 8 campos/propriedades e os nomes do banco de dados seriam "a", "b"..."j", mas os nomes dos Objetos seriam coisas legíveis como "Nome", "Preço", "Quantidade".

A razão de eu trazer isso à tona é que ele adiciona mais uma ruga para Modificar um nome de campo . Se você estiver implementando um mapeamento, modificar um nome de campo não causará uma migração.

Mais algumas rugas

Se você faz deseja implementar uma migração em uma exclusão, então você terá que fazê-lo depois uma implantação. Você também terá que reconhecer que não economizará nenhum espaço em disco atual ao fazê-lo.

O Mongo pré-aloca espaço e realmente não "devolve" a menos que você faça um reparo de banco de dados. Portanto, se você excluir vários campos em documentos, esses documentos ainda ocuparão o mesmo espaço no disco. Se os documentos forem movidos posteriormente, você poderá recuperar espaço, no entanto, os documentos só serão movidos quando crescerem.

Se você remover um campo grande de muitos documentos, faça um reparo ou confira o novo compact comando.