Gerenciando dados em NoSQL
Uma vez que você gerenciar as chaves de forma adequada, você está pronto para projetar como armazenar dados com NoSQL e garantir que ele é seguro e sempre acessível para o trabalho que você precisa fazer.
Os tipos de dados em lojas de valor-chave
lojas de valores-chave normalmente agem como "baldes" para dados binários. Alguns bancos de dados fornecem forte digitação de dados internos e até mesmo suporte esquema. Outros simplesmente fornecer funções auxiliares convenientes em seus drivers de cliente para a serialização de estruturas de dados de aplicativos comuns para um armazenamento de chave-valor. Os exemplos incluem mapas, listas e conjuntos classificados.
A Oracle NoSQL pode funcionar em dois modos:
loja binária simples
suporte altamente estruturado esquema Avro
Um esquema Avro é semelhante a um esquema de banco de dados relacional - impor um conjunto muito estrito de regras de formatação em javascript Object Notation dados (JSON) armazenados no banco de dados, como ilustrado aqui:
{Username: "afowler", sessionid: 13452673, desde: 1408318745, tema: "Bluesky"}
Você define um esquema Avro usando um documento JSON. Este é um exemplo do esquema de Avro para os dados armazenados anteriormente mostrados:
{ "Type": "record", "espaço de nomes": "com.example", "name": "UserSession", "campos": [{ "name": "username", "type": [ "string", "nulo"]}, { "name": ", digite" "sessionid": "int"}, { "name": "uma vez que", "type": "longo"}, { "name": "tema" , "type": [ "string", "nulo"]}]}
Um esquema Avro fornece muito forte digitação no banco de dados para quando o esquema é importante. No exemplo anterior, você vê dados de cadeia, uma identificação de sessão numérica, uma data (milissegundos, desde o Unix tempo de época, como um inteiro longo), e uma personalização definição para o tema para usar no site.
Observe também que o tipo de nome de usuário e tema tem duas opções - corda e nulos, que é como você instrui o Oracle NoSQL que valores nulos são permitidos. Você poderia ter deixado tema como uma string e forneceu um parâmetro de configuração adicional de "default": "Bluesky".
Outros bancos de dados NoSQL fornecer índices secundários em qualquer estabelecimento arbitrário de um valor que tem conteúdo JSON. Riak, por exemplo, fornece índices secundários baseados em particionamento documento - basicamente, uma propriedade conhecida dentro de um documento JSON é indexado com um tipo. Isto permite a consulta de intervalo (menos do que ou maiores do que), além de comparações iguais iguais e não é simples. Riak consegue fornecer consultas por abrangência, sem um esquema rigoroso - apenas definição do índice simples. Se os dados estão lá, ele é adicionado ao índice.
replicação de dados
Armazenar várias cópias dos mesmos dados em outros servidores, ou até mesmo racks de servidores, ajuda a garantir a disponibilidade de dados, se um servidor falhar. falha do servidor acontece principalmente no mesmo cluster.
Você pode operar réplicas duas maneiras principais:
- Senhor de escravos: Todas as leituras e escritas acontecer com o mestre. Escravos assumir e receber pedidos apenas se o mestre falhar.
replicação mestre-escravo é normalmente usado em lojas de valor-chave ACID-compliant. Para permitir que um máximo de coerência, a loja principal é escrito para e todas as réplicas são atualizados antes que a transação seja concluída. Este mecanismo é denominado De duas fases e cria rede extra e tempo de processamento nas réplicas.
- Mestre-master: Lê e escreve pode acontecer em todos os nós que gerem uma chave. Não há nenhum conceito de um proprietário de partição "primária".
réplicas Master-mestre são tipicamente eventualmente, consistente, com o cluster executando uma operação automática para determinar o último valor para uma chave e remoção de valores mais velhos, obsoletos.
Na maioria das lojas de valor-chave, isso acontece lentamente - no momento da leitura. Riak é a exceção aqui, porque tem um serviço anti-entropia verificação de consistência durante as operações normais.
versionamento de dados
A fim de permitir a resolução de conflitos automática, você precisa de um mecanismo para indicar a versão mais recente de dados. Eventualmente lojas de valor-chave consistentes conseguir a resolução de conflitos de diferentes maneiras.
Riak utiliza um mecanismo de vector-relógio para prever quais cópia é a mais recente. Outras lojas de valor-chave usar timestamps simples para indicar staleness. Quando os conflitos não pode ser resolvida automaticamente, ambas as cópias dos dados são enviados para o cliente. dados conflitantes a ser enviada para o cliente pode ocorrer na seguinte situação:
Cliente 1 escreve a réplica A "Adam: {gosta: Queijo} '.
Réplica A copia dados de réplica B.
Cliente 1 atualiza dados sobre réplica A a "Adam: {gosta: Queijo, odeia: a luz solar} '.
Neste ponto, réplica A não tem tempo suficiente para copiar os dados mais recentes para réplica B.
Cliente 2 atualizações dados sobre réplica B para "Adam: {gosta: Dogs, odeia: cangurus} '.
Neste ponto, réplica A e B replica estão em conflito eo cluster de banco de dados não pode resolver automaticamente as diferenças.
Um mecanismo alternativo é a utilização de selos de tempo e confiar neles para indicar os dados mais recentes. Em tal situação, é senso comum para a aplicação para verificar se os selos de tempo ler o último valor antes de atualizar o valor.
Eles estão verificando a verificar e definir mecanismo, que basicamente significa 'Se a versão mais recente ainda é a versão 2, em seguida, salve a minha versão 3'. Este mecanismo é por vezes referido como leia atualização jogo (RMU) ou leia jogo write (RMW). Este mecanismo é o mecanismo padrão utilizado pela Oracle NoSQL, Redis, Riak, e Voldemort.