PARA SUA ENTREVISTA: Qual a diferença de NoSQL vs SQL? 🆘
O que é SQL?
- SQL é a sigla para "Structure Query Language" que significa "Linguagem de Consulta Estruturada". Trata-se de uma linguagem de consulta a banco de dados relacionais. Com o SQL, você pode executar vários comandos para criar, alterar, gerenciar, consultar, dentre outras informações no seu banco de dados. Costumamos dizer que bancos SQL seguem uma modelagem relacional, pois eles se baseiam no fato de que todos os seus dados sejam guardados em tabelas.
O que é NoSQL?
- NoSQL (Not Only SQL) é o termo utilizado para banco de dados não relacionais de alto desempenho, onde geralmente não é utilizado o SQL como linguagem de consulta. O NoSQL foi criado para ter uma performance melhor e uma escalabilidade mais horizontal para suprir necessidades onde os bancos relacionais não são eficazes. No geral, temos 4 tipos de bancos NoSQL:
- Documento: Os dados são armazenados como documentos. Os documentos podem ser descritos como dados no formato de chave-valor, como por exemplo, o padrão JSON. Um exemplo de banco de dados neste formato é o MongoDB.
- Colunas: Os dados são armazenados em linhas particulares de tabela no disco, podendo suportar várias linhas e colunas. também permitem sub-colunas. Um banco de dados dessa familia, por exemplo, é o Cassandra.
- Grafos: Os dados são armazenados na forma de grafos (vértices e arestas). O Neo4j é um banco que utiliza grafos.
- Chave-valor: Esta família de bancos NoSQL é a que aguenta mais carga de dados, pois o conceito dele é que um determinado valor seja acessado através de uma chave identificadora única. Um exemplo é o banco de dados Riak ou DynamoDB. Para saber mais sobre DynamoDB tem uma thread boa.
Resumindo a diferença dos dois:
- O conceito de modelo relacional (SQL) se baseia no fato de que todos os dados sejam guardados em tabelas. Ao modelo não-relacional (NoSQL) não se aplica o conceito de schema. Uma chave de valor é que é utilizada para recuperar valores, conjunto de colunas ou documentos.
Quais são as suas diferenças?
- Uma das diferenças nos bancos de dados NoSQL é que toda a informação que é guardada elas não precisam ter relação entre si, já no SQL isso é necessário. Por isso alguns lugares vamos ver que para se construir bancos NoSQL precisa ter uma boa experiência e noção para não ter dados duplicados ou tabelas onde não fazem sentido e não consiga correlacionar os dados.
Primeiramente obrigado pelo POST. Mas tem algumas coisas nele que não concordo:
- "NoSQL (Not Only SQL) é o termo utilizado para banco de dados não relacionais de alto desempenho"
- Dá a entender que o relacionais (SQL) não são. E as vezes são muito mais que os outros.
- "Uma das diferenças nos bancos de dados NoSQL é que toda a informação que é guardada elas não precisam ter relação entre si, já no SQL isso é necessário"
- Eu não acho essa afirmação verdadeira. Em um banco relacional você pode ter uma tabela que não tem relação com nada. Ou até várias.
Pra mim a maior diferença, e mesmo assim depende, pois nem todos os bancos nosql suportam seria: a capacidade de nao ter schema. Ou seja, se vc tem um documento com 3 atributos, e inserir um doc com 4 atributos, vc não vai tomar um erro. Em banco relacionais é resitrito, inclusive a tipagem exata.
A grande questão é que hoje essa clasificação nosql é muito ampla, como vc mesmo disse, vc tem diversos tipos de banco (documentos, chave-valor, grafos). Então traçar diferenças entre banco relacionais e nosql, não é muito trivial. Vou dar um outro exemplo, se vc quiser usando um banco relacional como chave-valor, vc consegue! Se vc quiser representar um grafo em um banco relacional, vc consegue! Se vc quiser armazenar timeseries em um banco relacional, vc consegue! E TUDO MUITO performático.
Não estou desdenhando do seu post, só acho legal deixar o conteúdo mais completo pois pra quem ta entrevistando algumas afirmações que vc colocou, não são 100% aplicáveis.