Quais são as diferenças entre o NoSQL e um RDBMS tradicional?
Nos últimos meses, o NoSQL tem sido frequentemente mencionado nas notícias técnicas. Quais são suas características mais significativas em relação a um RDBMS tradicional? Em que nível (físico, lógico) ocorrem as diferenças?
Onde estão os melhores lugares para usar o NoSQL? Por quê?
NoSQL significa "Not only SQL" e geralmente significa que o banco de dados não é um banco de dados relacional, que tem sido muito popular nas últimas décadas.
A razão pela qual o NoSQL tem sido tão popular nos últimos anos é principalmente porque, quando um banco de dados relacional cresce a partir de um servidor, ele não é mais tão fácil de usar. Em outras palavras, eles não escalam muito bem em um sistema distribuído. Todos os grandes sites que você mencionou Google, Yahoo, Facebook e Amazon (não sei muito sobre o Digg) têm muitos dados e armazenam os dados em sistemas distribuídos por vários motivos. Pode ser que os dados não caibam em um servidor ou que haja requisitos de alta disponibilidade .
Teorema CAP
As propriedades de um sistema distribuído podem ser descritas pelo Teorema CAP . Das três propriedades você só pode ter no máximo duas:
O Amazon Dynamo usa a consistência eventual para chegar perto das três propriedades. Vale a pena ler o artigo Dynamo: Amazon's Highly Available Key-value Store ao aprender sobre bancos de dados NoSQL e sistemas distribuídos. O Amazon Dynamo tem as propriedades A e P.
O Google adota uma abordagem diferente com BigTable , que possui as propriedades C e A.
Outros bancos de dados NoSQL
Como escrevi no início, existem muitos outros tipos de bancos de dados NoSQL, projetados para diferentes requisitos. Por exemplo, bancos de dados gráficos como Neo4j , bancos de dados de documentos como CouchDB e bancos de dados multimodelo/objetos como OrientDB .
Finalmente, gostaria de dizer que os bancos de dados relacionais continuarão populares. Eles são muito flexíveis e de fácil manutenção. Mas nem sempre são a melhor escolha.
NoSQL é um termo muito amplo e normalmente é referido como "não apenas SQL". O termo está caindo em desuso na comunidade não RDBMS.
Você verá que o banco de dados NoSQL tem poucas características comuns. Eles podem ser divididos em algumas categorias:
Esta é uma grande questão, mas é bastante bem respondida nesta Pesquisa de Bancos de Dados Distribuídos .
Para uma resposta curta:
Os bancos de dados NoSQL podem dispensar várias partes do ACID para obter alguns outros benefícios - tolerância de partição, desempenho, distribuição de carga ou escala linear com a adição de novo hardware.
Quanto a quando usá-los - isso depende inteiramente das necessidades do seu aplicativo.
NoSQL é um tipo de banco de dados que não possui um esquema fixo como um RDBMS tradicional. Com os bancos de dados NoSQL o esquema é definido pelo desenvolvedor em tempo de execução. Eles não escrevem instruções SQL normais no banco de dados, mas usam uma API para obter os dados de que precisam. Os bancos de dados NoSQL geralmente podem ser dimensionados em diferentes servidores físicos facilmente, sem a necessidade de saber em qual servidor os dados que você está procurando estão.
No entanto, existem algumas desvantagens para toda essa flexibilidade: os bancos de dados NoSQL são bastante carentes em comparação com os sistemas RDBMS como SQL Server, Oracle, DB2, MySQL, etc. Não há Service Broker, log de transações, pacotes ETL, etc.
NoSQL não é algo novo. Na verdade, existe há 50-60 anos. Naquela época, era chamado COBOL. Mesma ideia exata, apenas um grupo diferente surgiu com isso.
Basicamente, dispensar a configuração relacional, com chaves primárias e estrangeiras e com a sobrecarga adicional envolvida na manutenção da segurança transacional, geralmente oferece aumentos extremos no desempenho. No entanto, isso não é exclusivo dos novos bancos de dados/armazenamentos de dados, como, por exemplo, o MySQL foi ajustado para funcionar em "níveis NoSQL" ignorando camadas.
Em resumo, muitas vezes você pode obter um desempenho impressionante se estiver disposto a correr o risco de possivelmente perder dados. A maioria dos sistemas NoSQL faz isso. Por exemplo, o MongoDB prepara as alterações de dados para serem gravadas quando for conveniente. Os dados em si são seguros e transacionalmente seguros, mas mantidos em armazenamento volátil (memória). Se você perder energia, não poderá ter 100% de certeza de que não perdeu dados ou de que não tem dados corrompidos.
É uma troca entre segurança e desempenho.
Um bom lugar para começar é a entrada da Wikipedia . Essencialmente, em vez de relacionar dados em uma tabela a outra, você armazena as coisas como pares de valores-chave e não há esquema de banco de dados, em vez disso é tratado no código.
Alguns sites usam o NoSQL e os servidores RDBMS típicos simultaneamente, mas para armazenar dados diferentes. Assim você não precisa escolher um ou outro.
Trabalhei muito no banco de dados MongoDB NoSQL e Oracle.
Esquema
O banco de dados SQL tem seu próprio esquema predefinido para armazenar dados estruturados.
No banco de dados NoSQL, não há esquema predefinido, aqui o esquema é o elemento mais dinâmico baseado nos elementos de dados.
Escalabilidade
Os Bancos de Dados SQL são escaláveis verticalmente, o que significa que, se quisermos dimensionar o banco de dados base SQL, precisamos aumentar o hardware no qual o Sistema DBMS está instalado. É aqui que às vezes vai para a limitação da escalabilidade.
Os bancos de dados NoSQL são escaláveis horizontalmente, o que significa que, se quisermos escaloná-los, precisamos adicionar mais nós e criar uma rede de distribuição com base em nossa própria necessidade e energia necessária. É assim que eles reduzem a carga no banco de dados
Recuperação de dados
Em bancos de dados baseados em SQL, para definir e manipular dados podemos usar SQL (Structured Query Language), que é muito poderosa atualmente.
Em termos de banco de dados NoSQL, as consultas se concentram em coleções e documentos. Às vezes é chamado de UnQL (Linguagem de Consulta Não Estruturada). Isso ainda está em fase de evolução, portanto, varia de fornecedor para fornecedor do banco de dados NoSQL.
Para saber mais sobre as principais diferenças, meu blog: Diferença entre banco de dados SQL e NoSQL