Características comuns de NoSQL
livros e blogs NoSQL oferecer opiniões diferentes sobre o que um banco de dados NoSQL é. Quatro características fundamentais de NoSQL, mostrados na lista a seguir, aplicam-se a maioria dos bancos de dados NoSQL. A lista compara NoSQL para SGBD relacionais tradicionais:
Esquema agnóstico: Um esquema de banco de dados é a descrição de todas as possíveis estruturas de dados e de dados em um banco de dados relacional. Com um banco de dados NoSQL, um esquema não é necessário, dando-lhe a liberdade para armazenar informações sem fazer up # projeto de esquema 8208-front.
nonrelational: Relações em um banco de dados estabelecer conexões entre tabelas de dados. Por exemplo, uma lista de pormenores da transacção pode ser ligado a uma lista separada de detalhes de entrega. Com um banco de dados NoSQL, essas informações são armazenadas como um agregado - um único registro com tudo sobre a transação, incluindo o endereço de entrega.
hardware Commodity: Alguns bancos de dados são concebidos para funcionar melhor (ou único) com armazenamento especializado e hardware de processamento. Com um banco de dados NoSQL, barato off # 8208-a # servidores 8208-shelf pode ser usado. Adicionando mais um desses servidores baratos permite que bancos de dados NoSQL para escalar para lidar com mais dados.
Altamente distribuível: bases de dados distribuídas podem armazenar e processar um conjunto de informações em mais de um dispositivo. Com um banco de dados NoSQL, um cluster de servidores pode ser usado para realizar um único banco de dados grande.
esquema agnóstico
bancos de dados NoSQL são esquema agnóstico. Você não é obrigado a fazer um monte de até # 8208-frente o trabalho de projeto antes que você pode armazenar dados em bancos de dados NoSQL. Você pode começar a codificar e armazenar e recuperar dados sem saber como as lojas de banco de dados e trabalha internamente. (Se e quando você precisar de funcionalidade avançada, então você pode adicionar manualmente novos índices ou ajustar as estruturas de armazenamento de dados.) Esquema agnosticismo pode ser a diferença mais significativa entre NoSQL e bancos de dados relacionais.
O grande benefício para um banco de dados independente de esquema é que o tempo de desenvolvimento é reduzido. Este benefício aumenta à medida que você passar por várias versões de desenvolvimento e necessidade de alterar as estruturas internas de dados no banco de dados.
Por exemplo, em um RDBMS tradicional, você passa por um processo de reformulação do esquema. O esquema instrui o banco de dados em que dados que esperar. Alterar os dados armazenados, ou estruturas, e você deve reinstruct o banco de dados utilizando um esquema modificado. Se você fosse fazer uma mudança, você tem que gastar muito tempo a decidir como re # 8208 arquiteto dos dados existentes. Em bancos de dados NoSQL, você simplesmente armazenar uma estrutura de dados diferente. Não há necessidade de dizer o banco de dados de antemão.
Você pode ter que modificar suas consultas nesse sentido, talvez adicionar o específica ocasional índice (Tais como um índice intervalo inteiro para permitir menor que e maior do que os dados # 8208-type consultas específicas), mas todo o processo é muito menos doloroso do que com um RDBMS.
RDBMS decolou devido à sua flexibilidade e porque, usando SQL, ele acelerou a mudança de uma consulta. bancos de dados NoSQL fornecer esta flexibilidade para mudar tanto o esquema e a consulta, que é uma das razões principais que eles serão cada vez mais adotadas ao longo do tempo.
Mesmo em consulta, você pode não precisar se preocupar muito sobre conhecer as alterações de esquema - considerar um índice de mais de um número de conta campo, onde número da conta pode ser localizado em qualquer lugar em um documento que é armazenado em um banco de dados NoSQL. Você pode alterar a estrutura e mudar onde número da conta é armazenado, e se o elemento tem o mesmo nome de outra parte do documento, ele ainda está disponível para consulta sem alterações em seu mecanismo de consulta.
Note-se que nem todos os bancos de dados NoSQL são totalmente esquema agnóstico. Alguns, como o HBase, exigir-lhe para parar o banco de dados para alterar as definições de coluna. Eles ainda são considerados bancos de dados NoSQL porque os campos não todos definidas (colunas, neste caso) são obrigados a ser conhecido antecipadamente para cada registro - apenas as famílias de colunas.
RDBMS permite que os campos individuais em registros a ser identificado como nulo valores. O problema com um RDBMS é que o tamanho dos dados armazenados e desempenho são afetados negativamente quando o armazenamento é reservado para valores nulos apenas no caso de o registro pode, em algum momento no futuro ter um valor na coluna. Em Cassandra, você simplesmente não fornecer os dados dessa coluna, que resolve o problema.
nonrelational
sistemas de gerenciamento de banco de dados relacionais têm sido a forma dominante para armazenar dados de aplicativo por mais de 20 anos. Uma grande quantidade de trabalho matemático foi feito para provar a teoria que lhes está subjacente.
Este esteio descreve como as tabelas relacionam uns com os outros. Uma fila única ordem podem dizer respeito a muitas linhas de endereços de entrega, mas cada linha endereço de entrega também se relaciona com várias linhas Ordem. Isto é um muitos# 8208-para# 8208-muitos relação.
bancos de dados NoSQL não tem esse conceito de relações entre seus registros. Eles vez desnormalizar dados. Isto significa que numa base de dados noSQL teria uma estrutura de ordem com o endereço de entrega incorporado. Isso significa que o endereço de entrega é duplicado em cada linha Ordem que o utiliza. Esta abordagem tem a vantagem de não necessitar de tempo de consulta junções complexas em várias estruturas de dados (tabelas) embora.
bancos de dados NoSQL não armazenam informações sobre como indivíduo registros referem-se a outros registros no banco de dados, que pode soar como uma limitação. No entanto, bancos de dados NoSQL são mais flexíveis em termos de estruturas de dados que podem ser armazenados.
Considere uma ordem de um varejista online. A ordem pode incluir códigos de produtos, quantidades, preços de itens e descrições de itens, bem como informações sobre a pessoa que encomenda, tais como endereço de entrega e informações de pagamento.
Ao invés de inserir dez linhas em uma variedade de tabelas em um banco de dados relacional, você pode em vez disso guardar uma estrutura única para toda esta informação ordem - digamos, como um documento JSON ou XML.
Em teoria banco de dados relacional, o objetivo é normalizar seus dados (ou seja, para organizar os campos e tabelas para remover dados duplicados). em NoSQL # 173 bases de dados - especialmente de documentos ou bases de dados agregadas - você muitas vezes deliberadamente desnormalizar dados, armazenar alguns dados várias vezes.
É possível armazenar, por exemplo, # 147-cliente Endereço de entrega # 148- várias vezes em muitas ordens de um cliente faz ao longo do tempo, em vez de armazená-lo uma vez e se referem a ele em várias ordens. Isso requer espaço de armazenamento extra, e um pouco de premeditação na gestão da sua aplicação. Então, por que fazê-lo?
Há duas vantagens para o armazenamento de dados múltiplos tempos:
Fácil armazenamento e recuperação: Basta guardar e obter um único registro.
velocidade de consulta: Em bancos de dados relacionais, você juntar informações e adicionar restrições entre tabelas no momento da consulta. Isso pode exigir o motor de banco de dados para avaliar muitas mesas. Quanto mais restrições de consulta que você tem em diferentes mesas, mais você reduz a sua velocidade de consulta. (É por isso que um RDBMS tem vistas pré-computadas.) Em um banco de dados NoSQL, todas as informações que você precisa para avaliar sua consulta está em um único documento. Portanto, você pode determinar rapidamente a lista de documentos correspondentes.
visualizações relacionais e denormalizations NoSQL diferentes abordagens para o problema de dados espalhados por registros. Em NoSQL, você pode ter que manter várias denormalizations que representam diferentes pontos de vista dos mesmos dados. Esta abordagem aumenta o custo de armazenamento, mas dá-lhe muito melhor momento da consulta.
Dado o custo cada vez # 8208 de redução do armazenamento e do aumento da velocidade de desenvolvimento e consulta, denormalized dados (aka visões materializadas) Não é uma razão assassino para descontar soluções NoSQL. É apenas uma maneira diferente de abordar o mesmo problema, com suas próprias vantagens e desvantagens.
NoSQL é altamente distribuível e usa hardware commodity
Em muitos bancos de dados NoSQL, uma decisão chave do projeto é usar vários computadores para armazenar dados para um único banco de dados, ao invés de ter todo o banco de dados em um único servidor.
O armazenamento de dados em várias máquinas e permitindo que ele seja consultado é difícil. Você deve enviar o pedido para todos os servidores e esperar por uma resposta. Com sorte, você configurar as máquinas de modo que eles são rápidos o suficiente para falar uns com os outros para lidar com consultas distribuídas!
A principal vantagem dessa abordagem é, no caso de grandes conjuntos de dados, porque para alguns requisitos de armazenamento, mesmo o maior servidor único disponível não poderia armazenar ou processar todos os dados que você precisa. Considere todas as mensagens no Twitter e no Facebook. Você precisa de um mecanismo de distribuição para gerir eficazmente todos os dados, mesmo que seja principalmente sobre o que as pessoas tinham para almoço e vídeos bonito do gato.
Uma vantagem de distribuir seu banco de dados é que você pode usar servidores mais baratos, chamados servidores de commodities. Mesmo para os conjuntos de dados menores, pode ser mais barato comprar três servidores de commodities em vez de um único servidor, maior # 8208 potência.
Outra vantagem importante é que a adição de alta disponibilidade é easier- você já é meio caminho andado através da distribuição de seus dados. Se você replicar seus dados uma ou duas vezes através de outros servidores no cluster, seus dados ainda estarão acessíveis, mesmo se um dos acidentes servidores, queimaduras, e morre.
Nem todos os bancos de dados abertos # 8208-source suporte a alta disponibilidade, a menos que você comprar o apoiou, pagou # 8208-para a versão do banco de dados da empresa que a desenvolve.
Uma exceção à regra altamente distribuível é o de bancos de dados do gráfico. Para responder eficazmente determinadas consultas gráfico em tempo hábil, os dados precisam ser armazenados em um único servidor. Ninguém tem resolvido este problema específico ainda.
considerar cuidadosamente se você precisa de uma loja de triple ou uma loja de gráfico. lojas triplas são geralmente distribuível, enquanto lojas de gráficos não são. Qual deles você precisa depende das perguntas que você deve suportar.