Não existe o NoSQL!
NoSQL é um chavão.
Durante décadas, quando as pessoas falavam sobre bancos de dados, elas significavam bancos de dados relacionais. E quando as pessoas falavam sobre bancos de dados relacionais, elas significavam aquelas que você controla com a Linguagem de consulta estruturada de Edgar F. Codd. Armazenando dados de alguma outra maneira? Loucura! Qualquer outra coisa é apenas flatfiles.
Mas nos últimos anos, as pessoas começaram a questionar esse dogma. As pessoas se perguntavam se as tabelas com linhas e colunas são realmente a única maneira de representar dados. As pessoas começaram a pensar e codificar e criaram muitos novos conceitos de como os dados poderiam ser organizados. E eles começaram a criar novos sistemas de banco de dados projetados para essas novas maneiras de trabalhar com dados.
As filosofias de todos esses bancos de dados eram diferentes. Mas uma coisa que todos esses bancos de dados tinham em comum era que a Structured Query Language não era mais uma boa opção para usá-los. Portanto, cada banco de dados substituiu o SQL por suas próprias linguagens de consulta. E assim nasceu o termo NoSQL, como um rótulo para todas as tecnologias de banco de dados que desafiam o modelo clássico de banco de dados relacional.
Então, o que os bancos de dados NoSQL têm em comum?
Na verdade, não muito.
Você costuma ouvir frases como:
- NoSQL é escalável!
- NoSQL é para BigData!
- O NoSQL viola o ACID!
- O NoSQL é um armazenamento de chave / valor glorificado!
Isso é verdade? Bem, algumas dessas declarações podem ser verdadeiras para alguns bancos de dados comumente chamados NoSQL, mas cada uma delas também é falsa para pelo menos uma outra. Na verdade, a única coisa que os bancos de dados NoSQL têm em comum é que são bancos de dados que não usam SQL. É isso aí. A única coisa que os define é o que os diferencia um do outro.
Então, o que diferencia os bancos de dados NoSQL?
Portanto, deixamos claro que todos os bancos de dados comumente referidos como NoSQL são muito diferentes para avaliá-los juntos. Cada um deles precisa ser avaliado separadamente para decidir se é um bom ajuste para resolver um problema específico. Mas por onde começamos? Felizmente, os bancos de dados NoSQL podem ser agrupados em determinadas categorias, que são adequadas para diferentes casos de uso:
Orientado a documentos
Exemplos: MongoDB, CouchDB
Pontos fortes: Dados heterogêneos, trabalho orientado a objetos, desenvolvimento ágil
A vantagem deles é que eles não exigem uma estrutura de dados consistente. Eles são úteis quando seus requisitos e, portanto, o layout do banco de dados são alterados constantemente ou quando você está lidando com conjuntos de dados que pertencem um ao outro, mas ainda têm uma aparência muito diferente. Quando você tem muitas tabelas com duas colunas chamadas "chave" e "valor", vale a pena procurar essas.
Bancos de dados gráficos
Exemplos: Neo4j, GiraffeDB.
Pontos fortes: Mineração de dados
Embora a maioria dos bancos de dados NoSQL abandone o conceito de gerenciamento de relações de dados, esses bancos de dados o abraçam ainda mais do que os chamados bancos de dados relacionais.
Seu foco é definir dados por sua relação com outros dados. Quando você tem muitas tabelas com chaves primárias, que são as chaves primárias de duas outras tabelas (e talvez alguns dados que descrevam a relação entre elas), essas podem ser algo para você.
Lojas de valor-chave
Exemplos: Redis, Cassandra, MemcacheDB
Pontos fortes: Pesquisa rápida de valores por chaves conhecidas
Eles são muito simplistas, mas isso os torna rápidos e fáceis de usar. Quando você não precisa de procedimentos armazenados, restrições, gatilhos e todos esses recursos avançados de banco de dados e deseja apenas armazenamento e recuperação rápidos de seus dados, esses são para você.
Infelizmente, eles assumem que você sabe exatamente o que está procurando. Você precisa do perfil de User157641? Não tem problema, levará apenas microssegundos. Mas e quando você deseja que os nomes de todos os usuários com idades entre 16 e 24 anos tenham "waffles" como alimento favorito e entrem nas últimas 24 horas? Muita sorte. Quando você não possui uma chave definida e exclusiva para um resultado específico, não pode tirá-la da sua loja KV com tanta facilidade.
SQL está obsoleto?
Alguns defensores do NoSQL afirmam que seu banco de dados favorito do NoSQL é a nova maneira de fazer as coisas, e o SQL é uma coisa do passado.
Eles estão certos?
Não, é claro que não são. Embora haja problemas para os quais o SQL não é adequado, ele ainda tem seus pontos fortes. Muitos modelos de dados são simplesmente melhor representados como uma coleção de tabelas que se referem uma à outra. Especialmente porque a maioria dos programadores de banco de dados foi treinada por décadas para pensar nos dados de maneira relacional, e tentar pressionar essa mentalidade para uma nova tecnologia que não foi feita para isso raramente termina bem.
Os bancos de dados NoSQL não substituem o SQL - eles são uma alternativa.
A maioria dos ecossistemas de software em torno dos diferentes bancos de dados NoSQL ainda não está madura. Embora haja avanços, você ainda não possui ferramentas suplementares tão maduras e poderosas quanto as disponíveis para os bancos de dados SQL populares.
Além disso, há muito mais know-how para SQL ao redor. Gerações de cientistas da computação passaram décadas de suas carreiras em pesquisas focadas em bancos de dados relacionais, e isso mostra: A literatura escrita sobre bancos de dados SQL e modelagem de dados relacionais, tanto práticos quanto teóricos, poderia preencher várias bibliotecas cheias de livros. Como criar um banco de dados relacional para seus dados é um tópico tão bem pesquisado que é difícil encontrar um caso em que não haja uma prática recomendada geralmente aceita pelo manual.
A maioria dos bancos de dados NoSQL, por outro lado, ainda está engatinhando. Ainda estamos descobrindo a melhor maneira de usá-los.