Só porque o banco de dados NoSql não possui um esquema no sentido tradicional, não significa que não exista um esquema lógico com o qual você precise lidar à medida que ele muda. No caso de um aplicativo típico usando MongoDb, provavelmente o seu código espera que certos campos do objeto json se comportem de determinadas maneiras. Se você alterar o comportamento, a seguir, convém atualizar os dados já existentes no banco de dados. Agora, com o RDBMS tradicional, esse era um problema amplamente resolvido - você apenas precisava ALTERAR as tabelas subjacentes. Mas com esses novos bancos de dados NoSQL, você tem uma decisão - você escreve um script para mover e atualizar todos os seus objetos? Ou você adiciona código para converter entre versões em tempo real? Em caso afirmativo, quanto tempo você suporta objetos v1? Para sempre? Até a v3?
Acrescentarei que o exemplo usado na postagem do blog do MongoDb é um pouco simplista e um caso muito fácil de lidar, se você tiver um processo de atualização decente, independentemente do RDBMS; adicionar um campo raramente dói. É quando você decide dividir seu Name
campo FirstName
e as LastName
coisas ficam emocionantes.
Pode ser.
Algumas organizações são - bem - desorganizadas e fazem um trabalho muito ruim de migração de esquema.
"Fim de semana de migração". Pare os servidores. Faça backup e exporte todos os dados. Crie o novo esquema (geralmente modificando o esquema existente). Recarregue os dados ou tente reestruturar no local.
"Ajustes contínuos". Altere as tabelas na extensão permitida pelo SQL. Sem rastrear a sequência dos ALTERs executados. Não há como voltar para uma versão anterior do esquema. Onde necessário, crie novas tabelas a partir de tabelas existentes, ajustando todos os aplicativos para usar as novas tabelas. Mas - sem um bom controle de qualidade - deixando as tabelas antigas no lugar "por precaução".
"Pânico total". Simplesmente evite modificações de esquema. Faça um grande fedor. Afirme que o risco é muito alto. Bloqueie todos os esforços nessa direção. Tome o esquema como refém até forçado a adotar uma abordagem mais sensata.
Qualquer esquema é um problema para migrar.
O maior problema não é técnico.
É semântico.
Um dos principais motivos para uma alteração no esquema é que o esquema anterior não corresponde muito bem ao domínio do problema. Desde que a semântica mudou, o banco de dados (e os aplicativos) precisam mudar. Às vezes, essas são mudanças profundas que exigem repensar a maneira como os aplicativos funcionam com os dados.
A revisão da semântica do banco de dados pode ser muito difícil.
O que as pessoas fazem, em vez de alterações no esquema, é apenas abusar do esquema físico. Eles começam a carregar dados incorretos nos campos existentes porque podem. De repente, um campo "comentário" começa a ter uma parte importante das informações de gerenciamento de clientes, seguida por "//", seguida pelo comentário real. Isso aumenta a necessidade de pedaços de dados "campo 1 - campo 2 // comentário". Os usuários têm uma planilha que extrai esses dados adicionais do campo de comentários, porque o software aplicativo "real" tinha um esquema difícil de mudar que a TI se recusava a alterá-lo.
fonte
Atualizamos os bancos de dados de produção adicionando tabelas e colunas (anuláveis) sem problemas. As versões anteriores do aplicativo funcionam bem com o banco de dados atualizado, elas simplesmente não fazem referência às novas coisas. Evitamos remover tabelas ou colunas ou alterar a forma como os dados existentes são armazenados, mas quando isso é necessário, produzimos scripts de conversão apropriados. Quer seu banco de dados tenha ou não um esquema seguro de tipo declarado, as alterações na estrutura de dados requerem conversão de dados e atualizações de aplicativos para interagir com a nova estrutura.
fonte
Depende.
Primeiro, se você tem um banco de dados muito grande, abrangendo várias máquinas, tudo (não apenas a atualização do banco de dados) será complicado. (não importa quanto você planejou com antecedência).
Segundo, a atualização de um banco de dados NÃO é apenas uma coisa do banco de dados - também depende do sistema maior do qual o banco de dados faz parte. Isso também inclui a implantação do banco de dados (muitos servidores de banco de dados, vários data centers, configurações mestre-escravo etc.)
A dor pode ser aliviada pela arquitetura dos componentes do sistema, de forma que todos eles tenham algum tipo de 'conhecimento' do evento de alteração do esquema do DB. Isso significa que todo o sistema deve tolerar alterações de esquema e pode responder a ele de maneira "sã".
Você pode conferir um utilitário desenvolvido pelo Facebook para lidar com as atualizações de esquema do MySQL.
Além disso, existem práticas recomendadas padrão, como transformar o mestre em somente leitura, fazer alterações nos escravos ou na cópia de desenvolvimento etc.
De qualquer forma, é essencial ter um backup completo e um amplo conjunto de testes . Somente então, você poderá fazer alterações com confiança e segurança.
fonte