Aplicando métodos de consistência em nosql
o consistência
Conteúdo
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 Consistência (ACID significa atomicidade, consistência, isolamento, durabilidade): ACID significa que uma vez que os dados são gravados, você tem total coerência no lê.
Consistência eventual (base): BASE significa que uma vez que os dados são gravados, ele acabará por aparecer para leitura.
Video: Bancos de Dados - NoSQL e Big Data (parte 1)
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ário (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. Change “Facebook post” a “transação de bilhões de dólares-financeira”, embora, e sua atitude muda rapidamente! Qual a consistência da abordagem que você escolher depende da situação. Na minha experiência, no entanto, a consistência forte é sempre a escolha em situações de sistemas corporativos de missão crítica.
ÁCIDO
ACID é um conjunto geral de princípios para sistemas transacionais, e não algo vinculado exclusivamente para sistemas relacionais, ou mesmo apenas bancos de dados, de modo que vale a pena conhecer. ACID significa basicamente “,Esta base de dados tem instalações para impedi-lo de danificar ou perder dados,”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 fornecer uma garantia de nível mais baixo chamado Verificar e definir que verifica se alguém alterou um documento antes de permitir que a transação seja completada. Este comportamento é normalmente limitada porque tende a ser implementado em uma base single-registro.
MongoDB é um banco de dados notável que fornece verificar e definir capacidades. Com MongoDB, todo um nó-estima dos dados pode ser bloqueado durante uma atualização, impedindo assim todos 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 equilíbrio ajustável de consistência e disponibilidade de dados. Isto é tipicamente o caso quando nós em um determinado acto de cluster de banco de dados como gestores principais de uma parte da base de dados, e outros nós reter as réplicas somente leitura.
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 ler réplicas são até à data. Isso é chamado de dois-fases - a alteração é feita localmente, mas aplicado e confirmado para o cliente somente quando todos os outros nós são atualizados.
BASE relaxa este requisito, exigindo apenas um subconjunto dos nós segurando os mesmos dados para ser atualizado para que a transação para ter sucesso. Algum tempo depois da transação for confirmada, a réplica só de leitura é 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 informações out-of-date por um período indeterminado de tempo. Em alguns cenários, este 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.
Video: Turbine suas aplicações com um banco de dados NoSQL
Uma abordagem alternativa para somente leitura réplicas é ter um compartilhado-nada aglomerado em que apenas um nó num cluster serve sempre uma parte particular da base de dados.
Compartilhado nada não significa que você perder a replicação, no entanto. Bases 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.
cachos compartilhado nada têm a vantagem de um modelo de consistência mais simples, mas exigem uma confirmação de duas fases para réplicas. Este facto significa que os bloqueios de transação, enquanto todas as réplicas são atualizados. (Uma fechadura interna mais de bloqueio para outros nós dá duas fases).
Isso normalmente tem menos impacto do que os clusters de dados compartilhadas com réplicas somente leitura, porém, porque as áreas de dados réplica shared-nothing não recebem pedidos de leitura para que parte do banco de dados. Portanto, commits de duas fases são mais rápidos em um cluster compartilhado nada do que em um cluster com réplicas legível.
Escolhendo ácido ou base?
Como você poderia esperar, muito 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 NoSQL fornecedores com ACID-conformidade em seu roteiro.
Alguns bancos de dados NoSQL ter ACID-conformidade em seu roteiro, apesar de serem defensores da BASE, que mostra o quão relevante garantias ACID são empresa, missão-crítico sistemas.
Muitas empresas usam produtos BASE-consistência ao testar ideias, porque eles são livres, mas, em seguida, migrar para um banco de dados pagos para ACID-compliant quando eles querem ir ao vivo em um sistema de 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 seguinte consulta é capaz de ver a mudança? Em outras palavras, são decisões importantes pendurados sobre o estado atual do banco de dados? Iria ver um pouco out-of-date de dados significa que essas decisões poderiam ser fatalmente falho?
Nos serviços financeiros, a necessidade de coerência é óbvia. Pense 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 assim a sua organização ao risco financeiro.
Casos semelhantes podem ser construídos para ACID 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.