Manipulação de partições em nosql

A partição palavra é usada para dois conceitos diferentes em terra NoSQL. UMA partição dados

é um mecanismo para garantir que os dados estão uniformemente distribuídos através de um cluster. Por outro lado, uma partição de rede ocorre quando duas partes do mesmo cluster de banco de dados não podem se comunicar.

Em grandes sistemas em cluster, é cada vez mais provável que a falha de uma peça de equipamento vai acontecer. Se um switch de rede entre os servidores em um cluster falha, um fenômeno conhecido como (no jargão de computador) cérebro dividido ocorre. Neste caso, os servidores individuais ainda estão recebendo pedidos, mas eles não podem se comunicar uns com os outros.

Este cenário pode levar a inconsistência de dados ou simplesmente à redução da capacidade de armazenamento de dados, como a partição de rede com o mínimo de servidores é removido do cluster (ou “votado fora” no verdadeiro estilo Big Brother).

partições tolerando

Você tem duas opções quando uma partição rede acontece:

  • Continuar, em algum nível, para atender a ler e escrever operações.

    Video: Como deixar seu HD como era antes sem Partição

  • “Votar off” uma parte da partição e decidir fixar os dados mais tarde, quando ambas as partes podem se comunicar. Isso geralmente envolve o cluster votar uma réplica lido como o novo mestre para cada nó partição mestre em falta.

Riak permite determinar quantas vezes os dados são replicados (três cópias, por padrão - isto é, n = 3) e quantos servidores devem ser consultados para que uma leitura para ter sucesso. Isto significa que, se o mestre primário de uma chave está no lado errado de uma partição de rede, as operações de leitura ainda pode ter sucesso se os outros dois servidores estão disponíveis (ou seja, a disponibilidade r = 2 lido).

Riak lida com gravações quando o servidor partição primária vai para baixo, usando um sistema chamado handoff insinuou. Quando os dados são originalmente replicada, o primeiro nó para uma partição de chave particular é escrito para, juntamente com (por padrão) dois dos seguintes nós vizinhos.

Se o primário não pode ser escrito, o próximo nó no anel está escrito. Essas gravações são efetivamente entregue para o próximo nó. Quando o servidor primário volta para cima, as gravações são reproduzidos para esse nó antes de assumir as operações de gravação principal novamente.

Em ambas as operações, inconsistências de versão pode acontecer porque diferentes réplicas podem estar em diferentes estados de versão, mesmo que apenas por alguns milissegundos.

Riak emprega ainda um outro sistema chamado anti ativo-entropia para aliviar este problema. Este sistema de rede de arrasto por meio de valores actualizados e assegura que as réplicas são actualizados em algum ponto, preferivelmente, mais cedo ou mais tarde. Isso ajuda a evitar conflitos de leitura, mantendo uma alta velocidade de ingestão, o que evita uma de duas fases utilizado por outros bancos de dados NoSQL com master-slave, suporte a cluster compartilhado nada.

Video: Como particionar HD sem formatar no Windows 10

Se um conflito na leitura acontecer, Riak usa leia reparação para tentar retornar apenas os dados mais recentes. Eventualmente, porém, e dependendo das configurações de consistência e disponibilidade que você usa, o aplicativo cliente pode ser apresentado com várias versões e pediu para decidir por si mesmo.

Em algumas situações, essa compensação é desejável, e muitas aplicações podem intuitivamente sabe, com base nos dados apresentados, a versão a utilizar e qual versão deseja descartar.

indexação secundário



Índices secundários são índices em dados específicos dentro de um valor. A maioria das lojas de valor-chave deixar essa indexação até a aplicação. No entanto, Riak é diferente, empregando um esquema chamado documento-particionamento baseados que permite a indexação secundária.

particionamento baseada em documento assume que você está escrevendo estruturas JSON para o banco de dados Riak. Você pode então configurar índices em determinadas propriedades nomeadas dentro dessa estrutura JSON, como mostrado:

{ “Order-id”: 5001, “cliente-id”: 1.429.857, “ordem data”: “2014/09/24”, “total”: 134,24}

Se você tiver um aplicativo que está mostrando ordens de um cliente para o mês anterior, então você deseja consultar todos os registros, como mostrado, onde o id do cliente é um valor fixo (1429857) ea ordem de data está dentro de um determinado intervalo (o início e fim do mês).

Na maioria das lojas de valor-chave, você cria outro balde cuja chave é o número de clientes combinada e mês eo valor é uma lista de identificações de ordem. No entanto, em Riak, basta adicionar um índice secundário em ambos cliente-id (integer) e fim-date (data), o que faz ocupam espaço de armazenamento extra, mas tem a vantagem de ser transparente para o desenvolvedor do aplicativo.

Estes índices também são atualizados ao vivo - o que significa que não há atraso entre atualizar um valor documento no Riak e os índices de estar em dia. Este acesso directo aos dados é mais difícil de tirar do que parece. Afinal, se os índices são inconsistentes, você nunca vai encontrar os dados constante!

avaliando Riak

Basho, a entidade comercial por trás Riak, diz que seu banco de dados NoSQL próxima versão 2.0 sempre tem forte consistência, uma reivindicação que outros fornecedores NoSQL fazer. A reivindicação por fornecedores NoSQL ter sempre forte consistência é como afirmando ser um vegetariano forte. . . exceto aos domingos, quando você tem carne assada.

Riak não é um banco de dados ACID-compliant. Sua configuração não pode ser alterada de tal forma que ele é executado em modo de conformidade ACID. Os clientes podem obter dados inconsistentes durante as operações normais ou durante partições de rede. Riak comercializa consistência absoluto para o aumento da disponibilidade e tolerância partição.

Correndo Riak no modo consistência forte significa que as suas réplicas de leitura são atualizados ao mesmo tempo que o mestre primário. Trata-se de uma confirmação de duas fases - basicamente, o nó mestre escrevendo para os outros nós antes que confirma que a gravação está completa.

No momento da redação deste artigo, de modo a consistência forte do Riak não suporta índices secundários ou tipos de dados complexos (por exemplo, JSON). Felizmente, Basho irá corrigir este problema nas próximas versões do banco de dados.

Riak Search (um motor de busca rebatizada e integrada Apache Solr usa um modelo de atualização, eventualmente consistente) podem produzir falsos positivos quando se utiliza a consistência forte. Esta situação ocorre porque os dados podem ser escritos e, em seguida, a transação abandonada, mas os dados ainda é utilizada para a indexação - deixando um resultado de pesquisa “falso positivo” - o resultado não é, na verdade, por mais tempo válido para a consulta de pesquisa.

Riak também usa um separado processo de sentinela para determinar qual o nó mestre torna-se um em condições de failover. Este processo, no entanto, não é altamente disponível, o que significa que por alguns segundos, é possível que, enquanto uma nova cópia do processo de sentinela é colocado online, um novo nó não pode ser adicionado ou um novo mestre eleito. Você precisa estar ciente desta possibilidade em condições de failover de alta-tensão.

Riak tem algumas características interessantes para desenvolvedores de aplicativos, como indexação secundária e built-in JSON suporte valor. replicação de dados para recuperação de desastres para outros centros de dados está disponível apenas na pago versão, cujo preço pode ser encontrado em seu site (preços de aluguer mostrado, os preços de licenças perpétuas dadas na aplicação de apenas).

O cluster monitoring tool Controle Riak também não é considerado altamente por causa de seu tempo de atraso ao monitorar clusters. Riak detém um monte de promessas, e se Basho irá adicionar mais empreendimento-nível instalações de gerenciamento de cluster em versões futuras, ele se tornará um produto best-in-class.


Publicações relacionadas