Os bancos de dados NoSQL podem causar perda ocasional de dados?

8

Atualmente, estou avaliando bancos de dados para usar em um novo projeto, o que exigirá inserção e consulta de grandes quantidades de dados de negociação. Nossa equipe está inclinada a Cassandra, mas li este artigo que parece sugerir o uso de bancos de dados não compatíveis com ACID, podendo resultar em perda ocasional de dados:

http://www.dbms2.com/2010/09/21/acid-compliant-transaction-integrity/

Não consigo encontrar mais informações sobre isso na Web e não consigo entender como a conformidade não-ACID significa que a perda de dados pode ocorrer. Alguém pode lançar alguma luz?

del
fonte
O Neo4j é um banco de dados NOSQL (gráfico) que é realmente compatível com ACID . Ele vem com suporte completo às transações e persistência durável. O Neo4j também usa logs de transações para proteger operações de gravação antes de aplicá-las ao armazenamento de dados. Disclaimer: Eu trabalho para a Neo Technology.
18711 Michael Michael Hunger
3
De acordo com a lei de Murphy (e minha própria experiência), você pode perder dados em qualquer banco de dados.
precisa saber é o seguinte
Um fraseado melhor pode ser "os bancos de dados NoSQL têm uma chance significativamente maior de perda ou corrupção de dados do que o RDBMS tradicional?" Ainda um pouco vago.
Jon de todos os comércios
Vários produtos NoSQL oferecem ACIDity de linha única. Poucos oferecem ACID de várias linhas. Se o seu caso de uso for uma gravação de chave única do fluxo, você poderá ter sucesso. Em muitas áreas de negócios, é importante ter várias linhas consistentes simultaneamente antes de efetuar uma alteração.
Michael Green

Respostas:

6

ÁCIDO significa

  • Atomicidade
  • Consistência
  • Isolamento
  • Durabilidade

O que isso significa para você é "toda ação de gravação será feita apenas uma vez (sem registros duplicados), mas será completamente armazenada no banco de dados quando a ação for concluída" e que toda vez que você ler, estará obtendo os dados que deseja .

A questão dos bancos de dados NoSQL é que eles geralmente são distribuídos (é o que as pessoas desejam, sistemas de escala simples e baratos), o que significa que leva tempo para replicar os dados em todos os nós. Às vezes, é possível ler durante uma gravação e terminar com os dados antigos enquanto os novos são lançados.

Você está sacrificando a pureza pela velocidade.

Esta é a versão curta da minha resposta e não tenho certeza do que preciso explicar mais. Faça-me perguntas!

jcolebrand
fonte
11
O que você está descrevendo parece consistência imediata (RDBMS) vs. consistência eventual (NoSQL). No entanto, o artigo vinculado fala sobre realmente perder dados (e não simplesmente ter dados inconsistentes), e não entendo o que a conformidade com ACID tem a ver com perda de dados.
del
11
Durabilidade provavelmente. E é esse o caso, é o que estou descrevendo (o que faz parecer que os dados foram perdidos). O ponto para o ACID é que você não pode perder dados. Sempre. (bem que poderia ser perdido para danos)
jcolebrand
Todos os bancos de dados NoSQL que eu procurei (HBase, Cassandra, Redis) usam logs write-ahead que podem ser reproduzidos no caso de o banco de dados travar antes que as alterações persistam. Isso significa que essas críticas não se aplicam a nenhum desses bancos de dados?
del
Eu imagino que sim. Vou revisitar isso amanhã, mas por enquanto, hora de dormir. Esperamos que você obter alguma outra entrada além mina antes disso ;-)
jcolebrand
6

Embora essa seja uma pergunta de anos ...

Em resumo, você pode entender o ACID como garantia de integridade / segurança dos dados em qualquer circunstância esperada . Como na programação genérica, todas as dores de cabeça vêm do multi-threading.

O maior problema no NoSQL é principalmente o ACI. D (urability) é geralmente uma questão separada.

Se o seu banco de dados for de thread único - para que apenas um usuário possa acessar ao mesmo tempo -, isso é compatível com a ACI. Mas tenho certeza de que praticamente nenhum servidor pode ter esse luxo.

Se o seu banco de dados precisar ser multiencadeado - atenda a vários usuários / clientes simultaneamente - você precisará de uma transação compatível com ACI. Ou você terá corrupção de dados silenciosa em vez de simples perda de dados. O que é muito mais horrível. Simplesmente, isso é exatamente o mesmo com a programação multithread genérica. Se você não tiver um mecanismo adequado, como o bloqueio, obterá dados indefinidos. E o mecanismo no DB chamou conformidade totalmente com ACID .

Muitos bancos de dados YesSQL / NoSQL anunciam a si mesmos como compatíveis com ACID, mas, na verdade, muito poucos deles realmente o fazem.

  • Sem conformidade com ACID = Você sempre obtém resultados indefinidos no ambiente multiusuário (cliente). Eu nem acho que tipo de DB faz isso.

  • Linha única / chave compatível com ACID = Você obterá um resultado garantido se modificar apenas um valor único de uma vez. Resultado indefinido (= corrupção de dados silenciosa) para atualização simultânea de várias linhas / chaves. A maioria dos bancos de dados NoSQL atualmente populares, incluindo Cassandra, MongoDB, CouchDB, ... Esses tipos de bancos de dados são seguros apenas para transações de linha única. Portanto, você precisa garantir que sua lógica do banco de dados não toque em várias linhas em uma transação.

  • Conformidade com várias linhas / chaves ACID = Você sempre terá resultados garantidos para qualquer operação. Isso é requisitos mínimos como um RDBMS. No campo NoSQL, muito poucos deles fazem isso. Chave inglesa, MarkLogic, VoltDB, FoundationDB. Eu nem tenho certeza de que há mais soluções. Esses tipos de bancos de dados são realmente novos e novos; portanto, nada se sabe sobre sua capacidade ou limitação.

Enfim, esta é uma comparação, exceto D (urability). Portanto, não esqueça de verificar o atributo de durabilidade também. É muito difícil comparar durabilidade porque a faixa se torna muito ampla. Eu não conheço bem esse tópico…

  • Sem durabilidade. Você perderá dados a qualquer momento.

  • Armazenado com segurança em disco. Quando você obtém COMMIT OK, os dados são garantidos no disco. Você perdeu dados se o disco quebrar.

Além disso, há diferença mesmo nos bancos de dados compatíveis com ACID.

  • Às vezes, compatível com ACID / você precisa de configuração / nada automático .. / alguns componentes não são compatíveis com ACID / muito rápido, mas você precisa desativar algo para isso ... / compatível com ACID, se você usar um módulo específico ... = we não agrupará a segurança dos dados por padrão. É um add-on, opção ou vendido separadamente. Não se esqueça de baixar, montar, configurar e emitir o comando adequado. De qualquer forma, a segurança dos dados pode ser ignorada silenciosamente. Faça Você Mesmo. Verifique você mesmo. Boa sorte para não cometer nenhum erro. Todos na sua equipe devem ter um DBA impecável para usar esse tipo de banco de dados com segurança. MySQL.

  • Sempre compatível com ACID = Não trocamos segurança de dados com desempenho ou algo assim. A segurança dos dados é um pacote forçado com este pacote de banco de dados. RDBMS mais comercial, PostgreSQL.

Acima está a implementação típica do DB. Ainda assim, qualquer outra falha de hardware pode corromper o banco de dados. Como erro de memória, erro no canal de dados ou qualquer outro erro possível. Portanto, você precisa de redundância extra e o banco de dados com qualidade de produção real deve oferecer recursos de tolerância a falhas.

  • Sem redundância. Você perde todos os dados se eles estiverem corrompidos.

  • Cópia de segurança. Você faz a cópia / restauração de instantâneo. Você perde dados após o último backup.

  • Backup online. Você pode fazer backup de captura instantânea enquanto o banco de dados está em execução.

  • Replicação assíncrona. Backup para cada segundo (ou período especificado). Se a máquina estiver inoperante, esse banco de dados garantirá a recuperação dos dados apenas reiniciando. Você perde dados após o último segundo.

  • Replicação síncrona. Faça backup imediatamente para cada atualização de dados. Você sempre tem uma cópia exata dos dados originais. Use a cópia se a origem for quebrada.

Até agora, vejo que muitas implementações de banco de dados não possuem muitas delas. E acho que, se eles não tiverem suporte adequado a ACID e redundância, os usuários eventualmente perderão dados.

Eonil
fonte
5

"Depende" é a resposta - existem opções de configuração, mencionadas aqui .

Nitpick pequeno: um banco de dados pode ser durável, mas não compatível com ACID, pois ACID é o superconjunto de recursos (ACID). Não acho que nenhum banco de dados NoSQL possa ser totalmente ACID, mas muitos deles podem passar por sub-requisitos individuais, como durabilidade.

Morgan Tocker
fonte