Praticamente toda aplicação criada hoje precisa armazenar informações de algum jeito. Entretanto, lidar com armazenamento de informações não é algo exatamente simples, pois é necessário tratar inúmeros problemas, como modificação concorrente de dados, criação de índices para realização de consultas mais eficiente, leitura dos dados no disco de maneira eficiente, compressão de dados (em alguns casos), cache das consultas para consultas muito frequentes, e também garantir que só para citar alguns dos casos de uso. Hoje, apresentaremos alguns exemplos de SGBDs, o que são, numa definição mais precisa, e alguns exemplos que você pode encontrar facilmente na web e dos quais falaremos mais em outros posts aqui no blog.
Afinal, o que é um SGBD?
Para muitos, um SGBD, ou sistema gerenciador de banco de dados, é apenas um software "que armazena dados". Não está errado definir assim, mas...é muito simplista para o que esses softwares tem que fazer com extrema precisão e cuidado para garantir que as consultas, sejam escritas, sejam atualizações, não sejam perdidas por algum eventual problema relacionado aos variados componentes tanto do computador quanto da rede. Um exemplo é o uso do disco (seja ele HD ou SSD, aqui): Quando você escreve um dado no disco, normalmente o sistema operacional, quando te diz que está "TUDO OK" com a escrita, está apenas dizendo que bem...ele recebeu aquela atualização..Mas, isso não quer dizer que o dado foi efetivamente escrito no disco. Para isso, existe outra chamada (que varia de sistema operacional para sistema operacional) e que, essa sim, força o sistema operacional a salvar o dado fisicamente no disco.
Por causa disso e de outros probleminhas é que SGBDs normalmente passam por inúmeros testes para garantir que está tudo ok e seguro. Um exemplo disso é que bancos de dados precisam garantir segurança, e para garantir isso da melhor forma possível, é necessário, além da proteção por usuário e senha, suporte a permissão de acesso e também criptografia.
Mas...claro que esses não são as únicas coisas com o qual SGBDs precisam se preocupar pois, além de gravar dados, esse tipo de sistema também precisa ler dados, e o principal: LER DADOS RÁPIDO! Mas..ler dados pode ser extremamente ineficiente caso você não tenha salvo eles num formato adequado para as consultas que pretende fazer. Mas...como descobrir que formato adequado é esse? Simples! Com o uso de indices, que permitem armazenar os dados em um formato especial no qual apenas os dados das colunas indexadas são armazenadas, evitando, assim, que todas as colunas precisem ser pesquisadas para atender a consulta.
Mas... Se índices fazem uma cópia dos dados da colunas indexadas? Aí é outra tarefa para os SGDBs, que ainda precisam descobrir quando usar e quando não usar um determinado índice para atender uma determinada consulta.
Já dá para ver que SGBDs são bem complexos, né? Isso porque nem mencionei ainda que tudo isso ainda deve ser acompanhado de... Concorrência. Pois afinal um SGBD não pode se reservar a atender apenas uma consulta por vez a qualquer momento do tempo, né? Imagina só se você não pudesse postar uma foto no Facebook porque tem alguém em algum lugar do mundo postando? Ia ser meio louco o tamanho correto da fila, certo? Pois então, por isso que SGBDs tem que lidar com concorrência.
Mas.. Concorrência não é algo simples de lidar. O que fazer se dois ou mais processos tentam modificar o mesmo registro ao mesmo tempo? Tem que garantir consistência aqui também. E se um processo manda uma consulta buscando por um registro no exato momento que ele está sendo apagado? É, não é coisa simples de lidar.
O que eu quero mostrar com tudo isso é que SGBDs tendem a ser super complexos. São inúmeras questões pra lidar, muito mais do que eu consigo listar num único Post aqui no Blog. Pra variar, você pode ver que SGBDs realmente não podem ser em nada comparados com aquele sistema de armazenamento em flat file (ou seja, que pega um dado, salva em um arquivo de forma estruturada e trabalha com ele de maneira básica) que todo programador curioso já criou alguma vida na vida, e que o sistema como um todo é muito mais complexo do que somente um sistema qualquer que "armazena dados".
Tipos de SGBDs
Existem vários tipos de SGBDs. E um "tipo" não necessariamente exclui o outro (na verdade, está mais para "característica" do que para tipo, mas preferi chamar assim para simplificar), por exemplo, um banco de dados pode ser relacional e não-distribuído ao mesmo tempo. Ou pode ser orientado a documentos e distribuído, por exemplo. Veja a lista abaixo:
- Relacional - SGBD que exige a criação e manutenção de "esquemas" de tabelas (relações) para poder manipular dados. Ou seja, exige que você crie tabelas, com colunas, para que você possa inserir, atualizar, remover e pesquisar dados nelas;
- Objeto-Relacional - É similar a SGBD relacionais, mas com um modelo de banco de dados orientado a objetos, com objetos, classes e herança sendo diretamente suportadas tanto a nível de schema quanto em nível de linguagem de consulta;
- Orientado a Documentos - SGBD que não exige que você crie tabelas (relações) para inserir/atualizar/remover/pesquisar dados. Nesse modelo, cada registro é por si só um "documento", que pode ou não possuir todos os campos dos demais registros;
- Chave-Valor - Normalmente chamado de "Key Value", nesse banco de dados as operações são quase sempre baseadas em uma determinada chave, que precisa ser única em todo o banco de dados e que identifica um determinado valor, seja ele um objeto, uma string, um inteiro..o que for;
- Distribuído - SGBDs que suportam trabalhar com mais de uma máquina. Seja replicando, seja dividindo (normalmente chamado de sharding) os dados entre várias máquinas e permitindo que elas sejam consultadas de forma..distribuída, dividindo o processamento da consulta entre várias máquinas;
- Orientado a Colunas - SGBDs que armazenam os dados como seções de colunas de dados em vez de linhas, como a maioria dos SGBDs relacionais fazem;
- Em memória - SGBDs que trabalham com dados apenas em memória, não sendo capaz de ler e salvar dados de forma persistente no disco;
Obviamente, há vários outros tipos de SGBDs, mas já dá para ter uma noção de que trata-se de uma área de software muito diversificada, e portanto dois softwares, ambos caracterizados como SGBDs, podem muito bem ser totalmente diferentes um do outro.
Exemplos de SGBDs
Alguns exemplos válidos de SGBDs (dos quais falaremos no futuro aqui no blog, acompanhe para não perder as novidades) são:
- MySQL - Desenvolvido pela Oracle, é relacional e está entre a lista de SGBDs mais populares atualmente, com mais de 10 milhões de instalações feitas;
- PostgreSQL - Desenvolvido pela comunidade, é objeto-relacional, extremamente poderoso e com muitos recursos voltados para as mais variadas áreas;
- MongoDB - Desenvolvido pela 10gen, é orientado a documentos, distribuído e é o SGBD mais popular na área de SGBDs orientados a documentos;
- Apache Cassandra - Desenvolvido pela Apache Foundation, é distribuído e foi originalmente concebido pela galera do Facebook;
Novamente, a lista de SGBDs conhecidos é muito grande. E portanto resolvi mencionar apenas alguns exemplos aqui, de tipos mais variados, para que você possa ter uma simples ideia da variedade de SGBDs que podem ser encontrados na internet.
Por último, quero atentar apenas para dois fatos a respeito da nomenclatura do SGBD:
- "Sistema Gerenciador de Banco de Dados" e "Banco de Dados" são entidades diferentes: "Banco de dados" é a entidade que é administrada pelo Sistema Gerenciador de Banco de Dados, e que corresponde a coleções organizadas de dados que se relacionam de forma a criar algum sentido. No MySQL, por exemplo, "Banco de Dados" é o nome que se dá a uma determinada coleção de tabelas (pois uma tabela obrigatoriamente pertence a um banco de dados), enquanto "Sistema Gerenciador de Banco de Dados" é o nome que se dá ao MySQL por si só (pois este é quem gerencia o banco de dados, as tabelas e tudo o mais);
- SGBD (Sistema Gerenciamento de Banco de Dados) em inglês é chamado de "DBMS", ou Database Management Systems, sendo portanto uma tradução direta;
Bom, a principio é isso. Como este post é focado no conceito de SGBD, não há, dessa vez, links para documentação/download/repositórios. Deixo apenas o pedido para que, para quaisquer dúvidas, comentários ou sugestões, que você sinta-se a vontade para mandar um comentário para este post. \o/
Ah, e se você curtiu, não se esqueça de acompanhar o blog para não perder os próximos posts. Até a próxima! 🙂
PS: Esse é o meu primeiro post de conceitos aqui no blog. O que você achou? Manda nos comentários! Sua opinião é muito bem vinda aqui. =)
Deixe um comentário