Aplicação de métodos de consistência na NoSQL
o consistência
propriedade de um banco de dados significa que uma vez que os dados são gravados em um banco de dados com êxito, as consultas que se seguem são capazes de acessar os dados e ter uma visão consistente dos dados. Na prática, isto significa que se você escrever um registro a um banco de dados e, em seguida, solicitar imediatamente esse registro, você está garantido para vê-lo. É particularmente útil para coisas como ordens da Amazônia e transferências bancárias.A consistência é uma escala móvel, embora, e um assunto muito profundo para cobrir aqui. No entanto, no mundo NoSQL, consistência geralmente cai em um dos dois campos:
ACID Coerência (ACID significa atomicidade, consistência, isolamento, durabilidade): ACID significa que uma vez que os dados são gravados, você tem total coerência em lê.
Consistência eventual (BASE): BASE significa que uma vez que os dados são gravados, ele acabará por aparecer para leitura.
A batalha foi travada entre pessoas que acreditam consistência forte em um banco de dados não é necessária e aqueles que acreditam que absolutamente é necessária (traduzem pessoas para departamentos de marketing das empresas NoSQL!).
A realidade está em algum lugar no meio. Importa que pós Facebook de uma pessoa não é visto por todos os seus amigos por cinco minutos? Não, provavelmente não. Alterar # 147 Facebook post # 148- para Número 147 bilhões # 8208 dólares # 8208-financeiro de transações, # 148- embora, e sua atitude muda rapidamente! Qual a consistência da abordagem que você escolher depende da situação. Na minha experiência, embora, consistência forte é sempre a escolha em situações de missão # 8208-críticos do sistema empresarial.
ÁCIDO
ACID é um conjunto geral de princípios para sistemas transacionais, e não algo ligado apenas para sistemas relacionais, ou mesmo apenas bancos de dados, de modo que vale a pena conhecer. ACID significa basicamente, # 147-Esta base de dados tem instalações para impedi-lo de danificar ou perder dados,# 148- que não é um dado adquirido para todos os bancos de dados. Na verdade, a grande maioria dos bancos de dados NoSQL não oferecem garantias ACID.
Fundação DB, MarkLogic e Neo4j são exceções notáveis. Alguns bancos de dados NoSQL proporcionar um menor # garantia 8208-grade chamada Verificar e definir que verifica se alguém alterou um documento antes de permitir que uma transação seja concluída. Este comportamento é geralmente limitada porque tende a ser implementado em um único # base 8208-registro.
MongoDB é um banco de dados notável que fornece verificar e definir capacidades. Com MongoDB, todo um nó # 8208-estima dos dados pode ser bloqueado durante uma atualização, impedindo assim todos os ler e todas as operações de escrever até que a operação seja concluída. A empresa está trabalhando em remover esta limitação, no entanto.
BASE
BASE significa que em vez de fazer garantias ACID, o banco de dados tem um saldo sintonizável de consistência e disponibilidade de dados. Este é normalmente o caso quando nós em um determinado acto de cluster de banco de dados como gestores principais de uma parte do banco de dados e outros nós mantenha ler # 8208-apenas réplicas.
Para garantir que cada cliente vê todas as atualizações (ou seja, eles têm uma visão consistente dos dados), uma gravação para o nó primário segurando os dados precisam bloquear até que todos leia réplicas são até à data. Isto é chamado um dois# 8208-fases - a alteração é feita localmente, mas aplicada e confirmado para o cliente apenas quando todos os outros nós são actualizados.
BASE relaxa esta exigência, requerendo apenas um subconjunto dos nós que prendem os mesmos dados para ser atualizado para que a transação para ter sucesso. Algum tempo depois da transação for confirmada, a leitura # 8208 réplica somente é atualizado.
A vantagem dessa abordagem é que as transações são confirmadas mais rápido. Tendo réplicas vivo legíveis também significa que você pode se espalhar seus dados ler de carga, tornando a leitura mais rápida.
A desvantagem é que os clientes conectados a algumas das réplicas de leitura pode ver para fora # 8208-of # Informações 8208-data por um período indeterminado de tempo. Em alguns cenários, esse estado é bom. Se você enviar uma nova mensagem no Facebook e alguns de seus amigos não vê-lo por um par de minutos, não é uma perda enorme. Se você enviar uma ordem de pagamento para o seu banco, porém, você pode querer uma transação imediata.
Uma abordagem alternativa para ler # 8208 réplicas somente é ter um compartilhado# 8208-nada aglomerado em que apenas um nó num cluster serve sempre uma parte particular da base de dados.
Compartilhado # 8208-nada não significa que você perde de replicação, embora. Bancos de dados que utilizam este método costuma fazer replicar seus dados para uma área secundária em outro nó primário ou nós - mas apenas um nó é o mestre para leituras e gravações a qualquer momento.
Compartilhado # aglomerados 8208-nada têm a vantagem de um modelo de consistência mais simples, mas requerem um dois # 8208-fases para réplicas. Este facto significa que os bloqueios de transação, enquanto todas as réplicas são actualizados. (Um bloqueio interna mais bloqueio para outros nós dá-lhe duas fases.)
Isso normalmente tem menos impacto do que agrupamentos de dados compartilhados com réplicas somente leitura, porém, porque compartilhada # 8208-nada áreas de dados réplica não recebem pedidos de leitura para que parte do banco de dados. Portanto, dois commits # 8208 de fase são mais rápidos em um cluster compartilhada # 8208-nada do que em um cluster com réplicas legível.
Escolhendo ácido ou base?
Como você poderia esperar, grande parte do argumento é porque os fornecedores NoSQL podem se diferenciar de seus concorrentes, alegando uma abordagem diferente, único. É interessante notar, no entanto, o número de fornecedores NoSQL com ACID # 8208-conformidade em seu roteiro.
Alguns bancos de dados NoSQL ter ACID # 8208-conformidade em seu roteiro, apesar de serem defensores da BASE, que mostra o quão relevante garantias ACID são a empresa, a missão# 8208-crítico sistemas.
Muitas empresas usam BASE # produtos 8208-consistência ao testar ideias, porque eles são livres, mas, em seguida, migrar para um ácido # pago # 8208-para banco de dados 8208-compliant quando querem ir viver em um sistema 8208-missão crítica #.
A maneira mais fácil de decidir se você precisa ACID é considerar as interações pessoas e outros sistemas têm com os seus dados. Por exemplo, se você adicionar ou atualização de dados, é importante que a próxima consulta é capaz de ver a mudança? Em outras palavras, são decisões importantes que penduram sobre o estado atual do banco de dados? Iria ver um pouco fora # 8208-de # 8208-date de dados significa que essas decisões podem ser fatalmente falho?
Nos serviços financeiros, a necessidade de coerência é óbvio. Pense dos comerciantes de compra de ações. Eles precisam verificar o saldo de caixa antes de negociar para garantir que eles têm o dinheiro para cobrir o comércio. Se eles não vêem o equilíbrio correto, eles vão decidir gastar dinheiro em outra transação. Se o banco de dados que está consultando é apenas eventualmente consistente, eles não podem ver uma falta de fundos suficientes, expondo sua organização a riscos financeiros.
Casos semelhantes podem ser construídos para o ácido sobre a base em cuidados de saúde, defesa, inteligência e outros setores. Tudo se resume aos dados, embora, e a importância de tanto a segurança pontualidade e dados.