O NoSQL é mais evolutivo do que revolucionário. Essencialmente, combina as idéias existentes de "armazenamento externo de banco de dados" com "o uso de estruturas de dados familiares, e não de tabelas relacionais".
Existem mais tipos de bancos de dados do que relacionais, por exemplo, bancos de dados hierárquicos . Embora arcaico pelos padrões de hoje, combinou muito bem com as estruturas de dados de seus dados (por exemplo, registros COBOL ). O ponto é que os dados no banco de dados foram modelados de perto como os registros foram dispostos nas linguagens de programação que os usavam.
Avançando rapidamente para a invenção de bancos de dados relacionais , onde finalmente o banco de dados separava preocupações e, quando normalizado adequadamente, é uma ótima maneira de visualizar a maioria dos tipos de dados e relacionamentos entre eles. É realmente fácil de entender em comparação com outros tipos de bancos de dados. No entanto, o que falha totalmente é armazenar dados de uma maneira que espelha objetos e classes em um programa. Portanto, a invenção do mapeamento objeto-relacional . Em outras palavras, o design do banco de dados é realmente um obstáculo ao design do programa que o utiliza, e é por isso que precisamos de bibliotecas ORM como o Hibernate. Embora limpo e consistente, sempre há aquela dúvida persistente no fundo da minha mente de que algo não está bem ali.
Isso deu origem a mais dois tipos de bancos de dados, bancos de dados de objetos e NoSQL .
Ambos tentam resolver os problemas introduzidos pelos bancos de dados relacionais, sem nos expor aos horrores alucinantes dos bancos de dados hierárquicos. Os dados ainda são dispostos em repositórios que se parecem vagamente com tabelas, mas, na realidade, são mais como estruturas de dados de programação do que tabelas relacionais. Enquanto os bancos de dados de objetos seguem regras bem definidas, meu entendimento é de que o NoSQL é arbitrário. Por exemplo, uma tabela pode ser visualizada como uma tabela de hash ou uma matriz. Não há uma maneira fácil e bem definida de consultá-los usando uma ferramenta arbitrária análoga ao Oracle SQL Developer ou SQL Server Management Studio .
A idéia é que se possa definir estruturas de dados que são facilmente pesquisadas em código, em vez de reunir consultas SQL que são mais adequadas para um mecanismo de banco de dados SQL, em vez de expressar a consulta desejada. Por exemplo, correspondências parciais ou difusas são mais difíceis e apresentam pior desempenho em um banco de dados relacional, enquanto um banco de dados NoSQL pode ter uma estrutura otimizada para essa pesquisa e concluída em uma fração do tempo.
Existem idiomas para consultar o NoSQL. No entanto, não existe uma linguagem universal como o que é o SQL para bancos de dados relacionais.
Edição tardia:
Embora eu esteja familiarizado o suficiente com os bancos de dados NoSQL, essa pergunta foi o ímpeto para eu comprar um livro de qualidade sobre o tópico e começar a lê-lo com o objetivo de ser um verdadeiro especialista no assunto. Os comentários restantes são baseados no NoSQL Distiled: um breve guia para o mundo emergente da persistência poliglota de Pramod Sadalage e Martin Fowler .
Os autores afirmam que os bancos de dados relacionais não se adaptam bem aos clusters capazes de atender aos dados necessários para sites como Amazon e Google: o NoSQL foi desenvolvido para atender a esse nicho, relaxando a simultaneidade e a durabilidade no ACID para atender ao grande número de consultas que usam amplamente dados estáticos (portanto, as transações ACID não são tão importantes).
Além disso, eles afirmam que os bancos de dados NoSQL operam sem um esquema (página 10) que permite que os bancos de dados NoSQL modifiquem a estrutura dos dados mais facilmente. Não tenho certeza de que a presença ou ausência de um esquema formal seja importante a esse respeito, pois os bancos de dados SQL também permitem modificar esquemas. Independentemente disso, os dois autores renomados fazem a alegação, portanto vale a pena examinar.
Acredito que esses dois pontos principais servem apenas para reforçar meu argumento principal de que o NoSQL é evolutivo, não revolucionário. Eles ainda armazenam dados e fazem melhorias incrementais na escala e modificabilidade. Eles também argumentam que o NoSQL não busca usurpar bancos de dados relacionais como o rei do armazenamento de dados, apenas para fornecer um meio alternativo de armazenamento de dados para os tipos de dados que precisam ser escalados e transformados de uma maneira que (eles acreditam) bancos de dados não suportam o suficiente.