Manipulação de partições no NoSQL

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

é um mecanismo para garantir que os dados são uniformemente distribuídas através de um cluster. Por outro lado, uma partição de rede ocorre quando duas partes do mesmo agrupamento do banco de dados não podem 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 de 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 a diminuição da capacidade de armazenagem de dados, tal como a partição da rede com o mínimo de servidores é removido do cluster (ou # 147 votado fora # 148- na forma verdadeira do Big Brother).

partições tolerando

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

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

  • # 147 Votar off # 148- 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 leitura).

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

Se o primário não pode ser escrita para o próximo nó no anel está escrito. Essas gravações são efetivamente transferida para o próximo nó. Quando o servidor primário vem 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 milésimos de segundo.

Riak emprega ainda um outro sistema chamado anti ativo# 8208-entropia para aliviar este problema. Este sistema de arrasto através de valores atualizados e garante que as réplicas são atualizados em algum momento, de preferência, mais cedo ou mais tarde. Isso ajuda a evitar conflitos de leitura, mantendo uma velocidade de ingestão elevada, o que evita a dois # 8208-fases utilizado por outros bancos de dados NoSQL com o mestre # 8208-escravo, compartilhada # 8208-nada suporte clustering.

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 saber intuitivamente, com base nos dados apresentados, a versão a utilizar e qual versão deseja descartar.

indexação secundária

índices secundários são índices sobre dados específicos dentro de um valor. A maioria tecla # 8208 de valor lojas deixar esta indexação até a aplicação. No entanto, Riak é diferente, empregando um esquema de chamada documento# 8208-particionamento baseados que permite a indexação secundário.

particionamento documento # 8208 baseado em pressupõe que você está escrevendo estruturas JSON ao banco de dados Riak. Você pode então configurar índices em propriedades particulares nomeados dentro dessa estrutura JSON, como mostrado:

{# 147-order-id # 148-: 5001, nº 147-cliente-id # 148-: 1.429.857, nº 147-order-date # 148-: # 147-2014-09-24 # 148 -, # 147 total de # 148-: 134,24}

Se você tiver um aplicativo que está mostrando pedidos 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 # 8208-data é dentro de um determinado intervalo (início e no final do mês).

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

Esses í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 tem sempre a consistência forte, uma reivindicação que outros fornecedores NoSQL fazer. A alegação por fornecedores NoSQL ter sempre forte consistência é como afirmar que é vegetariano forte. . . exceto aos domingos, quando você tem carne assada.

Riak não é um banco de dados 8208-compatível com ACID #. 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 absoluta para o aumento da disponibilidade e tolerância a partição.

Correndo Riak no modo de 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 um dois # 8208-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 texto, o modo de 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 nó torna-se um mestre em condições de failover. Este processo, no entanto, não é altamente disponível, o que significa que durante 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 de alta # condições de failover 8208 ao estresse.

Riak tem algumas características interessantes para desenvolvedores de aplicativos, como indexação secundário e # 8208-in JSON suporte valor construído. replicação de dados para recuperação de desastres para outros centros de dados está disponível apenas na versão paga por, cujo preço pode ser encontrado em seu site (preços de aluguer mostrado, os preços de licença perpétua dadas na aplicação só).

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# 8208-nível aglomerado # facilidades 8208-gestão em versões futuras, ela se tornará uma melhor # 8208-in # produto 8208-classe.

menu