
Uma das decisões mais importantes que um desenvolvedor toma é qual banco de dados usar. Por muitos anos, as opções foram limitadas a diferentes variantes de bancos de dados relacionais que suportavam a linguagem de consulta estruturada (SQL). Isso inclui MS SQL Server, Oracle, MySQL, PostgreSQL, DB2 e muitos outros.
Nos últimos 15 anos, muitas novas bases de dados surgiram no mercado dentro da abordagem No-SQL. Isso inclui armazenamento de chave-valor, como Redis e Amazon DynamoDB, bancos de dados de colunas largas, como Cassandra e HBase, armazenamentos de documentos, como MongoDB e Couchbase, bem como bancos de dados gráficos e sistemas de busca, como Elasticsearch e Solr.
Neste artigo, tentaremos entender SQL e NoSQL, sem entrar em suas funcionalidades.
Além disso, teremos um pouco de diversão no processo.
Explicando SQL para a vovó
Vovó, imagine que eu não sou o único neto. Em vez disso, mamãe e papai se amaram como coelhos, tiveram 100 filhos e depois adotaram mais 50.
Então, você ama todos nós e não quer esquecer nenhum dos nossos nomes, datas de nascimento, sabores favoritos de sorvete, tamanhos de roupa, hobbies, nomes dos cônjuges, nomes dos filhos e outros fatos super importantes. No entanto, vamos encarar a verdade. Você tem 85 anos, e a boa e velha memória simplesmente não consegue lidar com isso.
Felizmente, eu, sendo o mais inteligente dos seus netos, posso ajudar. Por isso, eu venho à sua casa, pego algumas folhas de papel e peço que você faça biscoitos antes de começarmos.
Em uma das folhas de papel, fazemos uma lista chamada "netos". Cada neto é registrado com algumas informações essenciais sobre ele, incluindo um número único que agora irá indicar qual neto ele é. Além disso, por questões de organização, escrevemos os atributos nomeados no topo da lista, para que sempre soubéssemos que informações essa lista contém.
id
nome
data de nascimento
última visita
tamanho da roupa
sorvete favorito
adotado
1
Jimmy
09-22-1992
09-01-2019
L
Chocolate com menta
falso
2
Jessica
07-21-1992
02-22-2018
M
Estrada rochosa
verdadeiro
…continuamos a lista!
Lista de netos
Depois de um tempo, você entende tudo e estamos quase terminando a lista! No entanto, você se vira para mim e diz: "Esquecemos de adicionar um espaço para os cônjuges, hobbies, netos!" Mas não, não esquecemos! Isso vem a seguir e requer uma nova folha de papel.
Então eu tiro mais uma folha de papel e nela chamamos de lista Cônjuges. Nós adicionamos novamente os atributos que são importantes para nós no início da lista e começamos a adicionar nas linhas.
id
grandchild_id
nome
data de nascimento
1
2
João
06-01-1988
2
9
Fernanda
03-05-1985
…mais cônjuges!
Lista de cônjuges
Neste ponto, eu explico à avó que se ela quiser saber quem está casado com quem, ela só precisa fazer a correspondência id na lista netos com grandchild_id na lista de cônjuges.
Depois de algumas dezenas de biscoitos, eu preciso cochilar. "Você pode continuar, vovó?" Eu saio para descansar.
Eu volto algumas horas depois. E você é incrível, vovó! Tudo parece ótimo, exceto pela lista hobbies. Na lista há cerca de 1000 hobbies. A maioria deles se repete; o que aconteceu?
grandchild_id
hobby
1
ciclismo
4
ciclismo
3
ciclismo
7
corrida
11
ciclismo
…vamos continuar!
Desculpe, eu esqueci completamente de mencionar! Usando uma lista, você pode rastrear apenas hobbies. Então, na outra lista, precisamos rastrear netos, que se envolvem com isso hobbies. Vamos chamar isso "Lista Geral". Vendo que isso não parece te agradar, começo a me preocupar e volto ao modo de lista.
id
hobby
1
ciclismo
2
corrida
3
natação
…mais hobbies!
Lista de hobbies
Assim que temos nossa lista de hobbies, criamos nossa segunda lista e a chamamos de "Passatempos dos netos».
grandchild_id
hobby_id
4
1
3
1
7
2
…mais!
Lista Geral de hobbies dos netos
Depois de todo esse trabalho, a avó agora tem um ótimo sistema de lembrança para acompanhar sua família incrivelmente grande. E então — para me segurar um pouco mais — ela faz a pergunta mágica: "Onde você aprendeu a fazer tudo isso?"
Bancos de dados relacionais
Um banco de dados relacional é um conjunto de tabelas formalmente descritas (no nosso exemplo, são as folhas), a partir das quais se pode acessar dados ou agregá-las de várias maneiras sem a necessidade de reorganizar as tabelas bancos de dados. Existem muitos tipos diferentes de bancos de dados relacionais, mas infelizmente a lista em uma folha de papel não é uma delas.
Uma característica marcante dos bancos de dados relacionais mais populares é a linguagem de consulta SQL (Structured Query Language). Com isso, se a avó transferir seu sistema de lembrança para um computador, ela poderá obter rapidamente respostas a perguntas como: "Quem não me visitou no ano passado, está casado e não tem hobbies?"
Um dos sistemas de gerenciamento de banco de dados SQL mais populares é o MySQL, que é de código aberto. Ele foi desenvolvido principalmente como um sistema de gerenciamento de banco de dados relacional (RDBMS) para aplicativos baseados em tecnologia web.
Alguns recursos principais do MySQL:
- É bastante conhecido, amplamente utilizado e rigorosamente testado.
- Existem muitos desenvolvedores qualificados com experiência em SQL e bancos de dados relacionais.
- Os dados são armazenados em várias tabelas, o que facilita o estabelecimento de relações usando chaves primárias e estrangeiras (identificadores).
- É fácil de usar e eficiente, tornando-o ideal para empresas grandes e pequenas.
- O código-fonte está sob a GNU General Public License.
Agora esqueça TUDO.
Explicando NoSQL à avó
Vovó, temos uma família enorme. Temos 150 netos! Muitos deles são casados, têm filhos, têm hobbies, e assim por diante. Na sua idade, é impossível lembrar de tudo sobre todos nós. O que você precisa é de um sistema de memorização!
Felizmente, eu, não querendo que você se esqueça do meu aniversário e do meu sabor favorito de sorvete, posso ajudar. Então eu corro até a loja mais próxima, pego um caderno e volto para a sua casa.
O primeiro passo que dou é escrever "Netos" em letras grandes e negrito na capa do caderno. Em seguida, folheio a primeira página e começo a escrever tudo o que você precisa lembrar sobre mim. Depois de alguns minutos, a página fica assim.
{
"_id":"dkdigiye82gd87gd99dg87gd",
"name":"Cody",
"birthday":"09-12-2006",
"last_visit":"09-02-2019",
"clothing_size":"XL",
"favorite_ice_cream":"Fudge caramel",
"adopted":false,
"hobbies":[
"jogos de vídeo",
"computadores",
"culinária"
],
"spouse":null,
"kids":[
],
"favorite_picture":"file://scrapbook-103/christmas-2010.jpg",
"misc_notes":"Prefere bolo de sorvete no aniversário em vez de bolo de chocolate!"
} Eu: “Parece que está tudo pronto!”
Vovó: “Espere, e os outros netos?”
Eu: “Sim, verdade. Então vamos dedicar uma página para cada um.”
Vovó: “E eu vou precisar anotar todas as mesmas informações para todos, como fiz para você?”
Eu: “Não, só se você quiser. Deixa eu te mostrar.”
Pegando a caneta da vovó, folheio a página e rapidamente anoto as informações sobre meu primo que eu menos gosto.
{
"_id":"dh97dhs9b39397ss001",
"name":"Tanner",
"birthday":"09-12-2008",
"clothing_size":"S",
"friend_count":0,
"favorite_picture":null,
"remember":"Nasceu no mesmo dia que Cody, mas não é tão importante"
}Sempre que a avó precisa lembrar de algo sobre um dos netos, ela só precisa acessar a página certa no caderno dos netos. Todas as informações sobre eles estarão armazenadas bem ali, na página deles, que ela pode rapidamente alterar e atualizar.
Quando tudo já está feito, ela faz a mágica pergunta: "Onde você aprendeu a fazer tudo isso?"
Bancos de dados NoSQL
Existem muitos bancos de dados NoSQL (“não apenas SQL”). Em nossos exemplos, mostramos um banco de dados de documentos. Bancos de dados NoSQL modelam dados de maneiras que excluem as relações tabulares usadas em bancos de dados relacionais. Esses bancos de dados ganharam popularidade no início dos anos 2000 entre empresas que precisavam de clusters de bancos de dados na nuvem devido às suas exigências óbvias de escalabilidade (por exemplo, Facebook). Em tais aplicativos, a consistência dos dados era muito menos importante do que o desempenho e a escalabilidade.
No início, bancos de dados NoSQL eram frequentemente usados para tarefas nichadas de gerenciamento de dados. Principalmente, quando se tratava de aplicativos web e na nuvem, bancos de dados NoSQL processavam e distribuíam volumes significativos de dados. Engenheiros que trabalhavam com NoSQL também apreciavam a flexibilidade do esquema de dados (ou sua completa ausência), permitindo mudanças rápidas em aplicativos encomendados.
Características principais do NoSQL:
- Uma maneira muito flexível de armazenar dados
- Escalabilidade horizontal para clusters
- Possível consistência em persistência / distribuição
- Documentos que são identificados usando chaves únicas
Comparação detalhada
MySQL requer um esquema específico e estruturado.
NoSQL permite armazenar qualquer dado em um "documento".
MySQL suporta uma grande comunidade.
NoSQL tem uma comunidade pequena e em rápido crescimento.
NoSQL é simples de escalar.
MySQL precisa de mais gerenciamento.
MySQL usa SQL, que é aplicado em muitos tipos de bancos de dados.
NoSQL é um banco de dados baseado em design com implementações populares.
MySQL usa a linguagem padrão de consultas (SQL).
NoSQL não usa uma linguagem padrão de consultas.
MySQL tem muitas ferramentas ótimas de relatórios.
NoSQL tem algumas ferramentas de relatórios que são difíceis de padronizar.
O MySQL pode apresentar problemas de desempenho para grandes volumes de dados.
NoSQL oferece excelente desempenho com grandes dados.
Pense no 8base
Na empresa , onde trabalho, fornecemos uma área de trabalho para cada projeto com banco de dados relacional Aurora MySQL, que é hospedado na AWS. Embora NoSQL seja uma escolha lógica quando os requisitos do seu aplicativo exigem alto desempenho e escalabilidade, acreditamos que a consistência rigorosa dos dados, garantida pelo SGBD, é essencial na criação de aplicativos SaaS e outros softwares para empresas.
Para startups e desenvolvedores que estão criando aplicativos de negócios que requerem relatórios, integridade transacional e modelos de dados bem definidos, investir em bancos de dados relacionais é, em nossa opinião, a escolha certa.
Saiba mais sobre desenvolvimento com Aurora, Serverless e GraphQL através de 8base.com .
Fonte: habr.com
