Desconstruindo NoSQL: em busca de melhores termos
Tags: ptbr, braziliandevs, nosql
Published: 2021-06-21 12:28:13

---
title: Desconstruindo NoSQL: em busca de melhores termos
published: true
description: Desconstruindo NoSQL: em busca de melhores termos
tags: ptbr, braziliandevs, nosql
cover_image: https://www.blazeclan.com/wp-content/uploads/2013/09/A-detailed-Outlook-to-No-SQL-Know-Hows.png
---
_Texto escrito em 2013_

<a style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; font-style: normal; color: #3a3a3a;" href="https://devkico.itexto.com.br/wp-content/uploads/2013/08/proibido_nosql.jpg"><img class="alignright size-full wp-image-1524" alt="proibido_nosql" src="https://devkico.itexto.com.br/wp-content/uploads/2013/08/proibido_nosql.jpg" width="199" height="167"></a>

Muito provavelmente&nbsp;<a title="Linguística: sempre aprontando das suas..." href="https://devkico.itexto.com.br/?p=1230">minha maior neurose é a linguagem</a>: talvez isto explique a razão pela qual o termo NoSQL me irrite&nbsp;tanto, pois como exporei neste post, é bastante inadequado e, acredito, pode nos gerar uma série de problemas em um futuro não muito distante. Na realidade, já vejo alguns hoje.

Este post possuí uma proposta: remover este termo do nosso jargão substituindo-o por algo que, acredito, faz muito mais sentido e descreve melhor a realidade.

<span style="font-family: Georgia, 'Times New Roman', serif; font-size: 20px; line-height: 28px;">A definição segundo Fowler</span>

<a href="http://www.martinfowler.com"><img class="alignright size-full wp-image-1526" alt="Martin Fowler" src="https://devkico.itexto.com.br/wp-content/uploads/2013/08/fowler.jpg" width="200" height="201"></a>No dia do meu aniversário ano passado Martin Fowler publicou em seu blog um post interessante no qual apresenta <a title="Fowler e o NoSQL" href="http://martinfowler.com/bliki/NosqlDefinition.html">uma definição do que vêm a ser NoSQL</a> que se tornou bastante aceita entre todos nós desenvolvedores e que usarei como base neste post.Curiosamente, não estou sozinho, o próprio Fowler diz em seu post que o termo é bastante fraco. Bom: ele apresenta cinco características definidoras destes sistemas gerenciadores de bancos de dados que, analisando com maior profundidade, nada definem.
<h2>Primeira característica: não usam o modelo relacional (ou a linguagem SQL)</h2>
<a href="http://www.educ.fc.ul.pt/docentes/opombo/hfe/momentos/escola/sofistas/protagoras.htm"><img class="size-full wp-image-1527" alt="Protágoras riu pra mim. :)" src="https://devkico.itexto.com.br/wp-content/uploads/2013/08/protagoras.jpg" width="200" height="227"></a> Protágoras riu pra mim. :)

Um rápido <a href="http://pt.wikipedia.org/wiki/Sofisma">sofisma </a>contra este que é o atributo mais popular. Se aponto para um SGBD e o caracterizo como relacional já o distingo de todos os demais que, consequentemente, seriam não relacionais, ou seja, ao nascer o modelo relacional criou-se o "nosql". Eu avisei que seria um rápido sofisma: &nbsp;não consegui segurar.

Por exemplo: se digo que meu computador não é de ouro - "NoGold" - &nbsp;isto quer dizer que ele pode ser de qualquer outra coisa, ou seja, não estou o caracterizando de uma forma que agregue significado.

Voltemos para a segunda parte desta característica: não usar a linguagem SQL. Novamente, uma definição engadora, pois se for levada à risca, Hadoop, que muitos caracterizam como NoSQL vai sair da lista, pois já há iniciativas como <a title="Big Data e SQL. Nice!" href="http://arstechnica.com/information-technology/2013/07/the-hot-new-technology-in-big-data-is-decades-old-sql/">esta </a>que levam a linguagem de consulta SQL para bancos de dados não relacionais. E convenhamos, iniciativas como <a href="http://www.dataversity.net/unql-a-standardized-query-language-for-nosql-databases/">UnQL</a> nada mais são do que tentativas de trazer para estes SGBDs todas as vantagens que o SQL nos dá.

(sobre os problemas do SQL, sugiro a leitura <a href="http://www.aosabook.org/en/nosql.html">deste </a>excelente texto)
<h2>Segunda característica: open source</h2>
Não há muito o que dizer a respeito pois não os diferencia em absolutamente nada. MongoDB, MySQL, PostgreSQL, Riak, Redis, tudo se iguala pensando neste atributo isoladamente.
<h2>Terceira característica: desenvolvidos para serem executados em grandes clusteres (ou clusters?)</h2>
O movimento NoSQL surge como uma alternativa de <a href="http://pt.wikipedia.org/wiki/Escalabilidade">escalabilidade</a>: ao invés da mais popular até então, a vertical, maior atenção foi dada à horizontal, ou seja, à possibilidade de atingirmos uma melhor performance adicionando novas máquinas à nossa rede distribuindo o processamento.

Ok, diversas soluções NoSQL foram criadas pensando nisto, no entanto há bancos de dados relacionais que também foram criados com o mesmo objetivo. Até então a maior parte das soluções relacionais escalava com muita dificuldade quando as bases de dados cresciam significativamente, então você começa a abrir mão de um <a href="http://en.wikipedia.org/wiki/ACID">ACID </a>completo, <a href="http://en.wikipedia.org/wiki/CAP_theorem">teorema de CAP</a> ganha popularidade, etc.

Mas vemos há anos soluções relacionais como Oracle, PostgreSQL ou soluções como <a href="http://www.justonedb.com/">JustOneDB </a>(mais nova, mas muito interessante este último) também obtém este resultado. Mais um atributo que não diz muita coisa. Alguém poderia dizer que estas soluções não surgiram para este fim, é verdade: mas conforme elas evoluiram com o tempo, este se tornou um requisito importante que em grande parte foi satisfeito.
<h2>Quarta característica: baseados nas propriedades da web do século XXI</h2>
Quais seriam estas características? Clusteres gigantes? Já falei sobre isto nos parágrafos anteriores. Baixo custo? Firebird, SQLite, Access (sim, Access), MySQL e outros são soluções de baixo custo. Necessidade de mudanças constantes nos atributos? Ok: você não devia estar usando um banco de dados relacional, pois o foco deste são registros (leia este <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.86.4262&amp;rep=rep1&amp;type=pdf">texto fantástico de 1979</a> sobre as limitações dos registros).

Novamente, muito amplo: e todo revendedor de soluções relacionais atualmente diz que estes são adequados para os tais desafios da web do século XXI.

(to torcendo para não aparecer um vendedor por aqui com aqueles folders "propriedades da web do século XXI")
<h2>Quinta característica: ausência de esquema</h2>
Este atributo acaba nos jogando de volta à primeira característica e outra: nos trás outro problema. O fato de que, tomado isoladamente igualar os modelos documental, chave-valor, baseado em grafos e outros.
<h2>Tá: qual a solução então?</h2>
A mais simples possível: evitar usar o termo NoSQL já que como expus não diz muita coisa. Ao invés é muito mais interessante usar apenas o nome que caracteriza o modelo usado. Por exemplo: ao invés de dizer coisas do tipo "eu uso uma solução NoSQL chamada MongoDB", diga "uso um SGBD documental chamado MongoDB".

Isto evitaria frases que não fazem muito sentido, como por exemplo "vou fazer um curso de NoSQL" (um curso eterno, pois os modelos são infinitos), "programo em NoSQL", etc. Começariam a surgir frases mais interessantes como "sou especialista no modelo documental, chave-valor, colunar, etc.".

Claro que eu vou continuar usando o termo (to usando neste post) pois há inércia e pressão social para tal, mas acredito que a partir do momento em que passarmos a usar mais os nomes dos paradigmas, melhor. E convenhamos, o termo, como o próprio Fowler diz em seu post, surgiu por acaso: pra quê eternizar o erro, não é mesmo?
<h2>E quando penso em NoSQL como "not only SQL"?</h2>
Pior ainda, porque agora você colocou o relacional JUNTO com o não relacional: tudo se igualou e nada foi caracterizado. Neste sentido, acho muito mais interessante a emergência de termos como <a href="http://www.martinfowler.com/bliki/PolyglotPersistence.html">persistência poliglota</a>&nbsp;(Fowler de novo) que, aliás, acredito ser o caminho que deveríamos seguir.

PS: esse Fowler é foda hein? Adoro os artigos dele em que há este tratamento conceitual.