NoSQL significa "Não apenas 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 em um servidor, não é mais tão fácil de usar. Em outras palavras, eles não se expandem muito bem em um sistema distribuído. Todos os grandes sites que você mencionou Google, Yahoo, Facebook e Amazon (eu não sei muito sobre o Digg) têm muitos dados e os armazenam em sistemas distribuídos por vários motivos. Pode ser que os dados não se ajustem em um servidor ou haja requisitos para alta disponibilidade .
Teorema da CAP
As propriedades de um sistema distribuído podem ser descritas pelo teorema do CAP . Das três propriedades, você só pode ter no máximo duas:
- C OERÊNCIA
- Uma disponibilidade
- tolerância à criação de rede P
O Amazon Dynamo usa a Eventual Consistency para se aproximar e obter as três propriedades. Vale a pena ler o artigo Dynamo: armazenamento de valores-chave altamente disponível da Amazon ao aprender sobre os bancos de dados NoSQL e sistemas distribuídos. O Amazon Dynamo possui as propriedades A e P.
O Google adota uma abordagem diferente com o BigTable , que possui as propriedades C e A.
Outros bancos de dados NoSQL
Como escrevi no começo, existem muitos outros tipos de bancos de dados NoSQL, projetados para diferentes requisitos. Por exemplo, bancos de dados gráficos como o Neo4j , bancos de dados de documentos como CouchDB e bancos de dados de modelos / objetos como o OrientDB .
Finalmente, gostaria de dizer que os bancos de dados relacionais permanecerão populares. Eles são muito flexíveis e sustentáveis. Mas eles nem sempre são a melhor escolha.
NoSQL é um termo muito amplo e geralmente é referido como significando "Não apenas SQL". O termo está caindo em desuso na comunidade que não é RDBMS.
Você verá que o banco de dados NoSQL tem poucas características comuns. Eles podem ser divididos em algumas categorias:
Essa é uma pergunta enorme, 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 outros benefícios - tolerância da 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.
fonte
O 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 necessários. Os bancos de dados NoSQL geralmente podem ser dimensionados em diferentes servidores físicos facilmente, sem precisar saber em qual servidor os dados que você está procurando estão.
No entanto, existem algumas vantagens 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. Realmente existe há 50-60 anos. Naquela época, era chamado COBOL. A mesma idéia exata, apenas um grupo diferente surgiu com ela.
fonte
A dispensação básica da configuração relacional, das chaves primárias e estrangeiras e da sobrecarga adicional envolvida na manutenção da segurança das transações, geralmente proporciona aumentos extremos no desempenho. No entanto, isso não é exclusivo dos novos bancos de dados / datastores, como por exemplo, o MySQL foi ajustado para executar em "níveis NoSQL" ignorando as camadas.
Em resumo, muitas vezes você pode obter um desempenho impressionante se estiver bem em correr o risco de possivelmente perder dados. A maioria dos sistemas NoSQL faz isso. Por exemplo, o MongoDB encena as alterações de dados a serem gravadas quando for conveniente. Os dados em si são seguros e transacionais, 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 possui dados corrompidos.
É uma troca entre segurança e desempenho.
fonte
Um bom lugar para começar é a entrada da Wikipedia . Basicamente, em vez de relacionar dados em uma tabela para outra, você armazena as coisas como pares de valores-chave e não há esquema do banco de dados, eles são tratados no código.
Alguns sites usam o NoSQL e os servidores RDBMS típicos simultaneamente, mas para armazenar dados diferentes. Então você não precisa escolher um ou outro.
fonte
Eu trabalhei muito no banco de dados MongoDB NoSQL e Oracle.
Esquema
O banco de dados SQL possui 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 com base nos elementos de dados.
Escalabilidade
Os bancos de dados SQL são escaláveis verticalmente, o que significa que, se quisermos escalar o banco de dados SQL, precisamos dar um impulso ao hardware no qual o sistema DBMS está instalado. É aqui que às vezes vale a limitação da escalabilidade.
Os bancos de dados NoSQL são escaláveis horizontalmente, ou seja, se quisermos escalá-lo, 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 o SQL (Structured Query Language), que é muito poderoso atualmente.
Em termos de banco de dados NoSQL, as consultas se concentram na coleta e nos documentos. Às vezes, é chamado UnQL (Unstructured Query Language). Isso ainda está na 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
fonte