Os 14 tipos de bancos de dados: Nunca esteve tão na moda o modelo baseado em sistemas distribuídos quanto hoje em dia. Em meados dos anos 2000 era muito comum ver aplicações desktop com o banco de dados acoplado nela, escritos em linguagens como VB6, Delphi e afins. Ocorre que tais soluções não funcionam do melhor modo para estruturas maiores ou para o uso colaborativo. Por isso, outras tecnologias emergiram como PHP, ASP, ASP.NET.
Com o passar dos tempos padrões de alto nível de comunicação se estabeleceram para que um sistema A falasse com um sistema B, como o SOAP baseado em XML para arquiteturas SOA. Essa tecnologia fez muito sucesso mas demonstrou certo desgaste com o passar do tempo. Até que hoje em dia a arquitetura baseada em microserviços é considerada a alvorada do software, onde diversos pequenos serviços (ou nem tão pequenos assim), se comunicam com grande independência.
Nesse contexto temos uma complexidade importante do lado do banco de dados, uma vez que cada microserviço deve ter um banco de dados independente. Assim, mais do que isso, passou a ser notório que há uma diversidade de bancos de dados com propósitos particulares. Por isso, o artigo Os 14 tipos de bancos de dados vai explorar o conhecimento sobre esses diversos tipos de bancos.
Sumário
- Tipos de bancos de dados
- 1 – Banco de dados Relacional
- 2 – KeyValue Store – Banco Chave-Valor
- 3 – Document Store – Banco de dados de documentos
- 4 – Time Series Database – Banco de dados de séries temporais
- 5 – Graph Database- Banco de dados de Grafos
- 6 – Search Engine Database – Banco de dados de busca
- 7 – Object Oriented Database – Banco de dados Orientado a objetos
- 8 – Resource Description Framework Store Database – Banco de dados RDF
- 9 – Wide Column Stores – Banco de dados de coluna esparça
- 10 – Multivalue Database – Banco de dados multivalorado
- 11 – Vector Database – Banco de dados de vetores
- 12 – Native XML Database – Banco de dados XML Nativo
- 13 – Spatial Database – Banco de dados espacial
- 14 – EventStore Database – Banco de dados de eventos
- Conclusão de ‘Os 14 tipos de bancos de dados’
Tipos de bancos de dados
Existem muitos tipos com propósitos específicos. É importante conhece-los que a decisão correta seja tomada. Além disso há alguns bancos de dados que suprem mais de um propósito. Vamos a eles, do 1 ao 14.
1 – Banco de dados Relacional
Os bancos de dados relacionais são os mais conhecidos, embora tenham perdido espaço para os demais tipos nas últimas décadas. Ele é baseado em linhas e colunas muito bem estabelecidas e tipadas para armazenamento dos dados. Tais linhas e colunas são organizadas em tabelas que, por sua vez, podem ter colunas relacionadas de uma tabela para outra. Esse modelo é muito robusto suportando uma grande quantidade de propósitos, embora tenha desempenho melhor para uns casos e não para outros.
A linguagem de SQL é uma referência quando falamos de banco de dados, que foi construída para lidar com consultas a esse tipo de banco. Ela suporta comandos como SELECT, INSERT, UPDATE, DELETE e muitos outros. Esses comandos são capazes de lidar com dados de uma só tabela ou de várias tabelas ao mesmo tempo.
Esses são exemplos de bancos de dados relacionais: Oracle, MySQL, SQL Server, PostgreSQL, SQLite, MariaDB.
2 – KeyValue Store – Banco Chave-Valor
O banco de dados chave-valor é utilizado para guardar dados pontuais, de fácil acesso. Esses bancos são, de modo geral, muitos práticos de serem trabalhados. O Redis, por exemplo, é um dos mais conhecidos do mercado, muito utilizado para uma estratégia de caching de aplicações. Já o ETCD, por exemplo, é o banco de dados escolhido para ser a base do kubernetes, guardando informações relevantes dos pods e aplicações.
Bancos de dados desse tipo mantém dados em em estruturas como:
{
"nome": "Thiago",
"email": "[email protected]",
}
Esses são exemplos de bancos de dados chave-valor mais conhecidos: Redis, Memcached, Etcd, Hazelcast.
3 – Document Store – Banco de dados de documentos
Além disso, os bancos de dados orientados a documentos têm uma estrutura otimizada para lidar com arquivos JSON ou semelhantes. Assim, um exemplo bastante conhecido é o MongoDB que trabalha com um formato denominado BSON (Binary json) que é estruturados para trafegar binários, dando a ele agrande desempenho.
Por isso esse formato de banco tem ganhado um grande número de adeptos pela facilidade de se iniciar o desenvolvimento de uma nova aplicação. Assim, veja que é possível criar uma aplicação no MongoDB praticamente sem a necessidade de fazer modelagem do banco de dados. Isso porque é possível tentar guardar um documento no banco de dados e, a partir daí, o banco se estrutura criando as forma adequada para o armazenamento. Isso pode tornar tudo bem fácil, porém, isso pode criar um banco desorganizado e potencialmente lento: é fundamental realmente conhecer o banco de dados para fazer o melhor uso dele.
Os exemplos de bancos de dados mais comuns baseados em documentos são MongoDB, DynamoDB, CosmoDB, Firebase.
4 – Time Series Database – Banco de dados de séries temporais
Já os bancos de dados de séries temporais são pensados para lidar com sequencias de dados baseados no tempo. Por isso financeiras que precisam lidar com as cotações, ou negócios que lidam com informações climáticas, energia, etc. são alguns exemplos de cenários onde um banco como esses é aplicável.
E também o InfluxDB é conhecido por sua velocidade, sendo muito utilizado para o mercado financeiro, IoT e afins. Já o TimescaleDB é outra referência, sendo aplicado como uma extensão do PostgreSQL, oferecendo uma facilidade a mais para quem lida com esse banco. Além desses, o KDB e o Graphite também são exemplos conhecidos desse tipo de banco de dados.
5 – Graph Database- Banco de dados de Grafos
Grafo é uma estrutura de dados muito rica onde elementos são dispostos em nós (ou vértices) ligados através de arestas com outros nós. Então o Neo4J é um exemplo de banco de dados para lidar com esse formato. Ele pode lidar com aplicações que possuem uma riqueza de relacionamentos, por exemplo: relação entre membros de redes sociais, recomendação de produtos, rotas de transporte, hierarquias organizacionais, entre outros.
Assim o Neo4J é o mais popular e lida com uma linguagem particular para suas queries denominado Cypher Query Language. Outros bancos como OrientDB, Memgraph e NebulaGraph possuem características particulares, mas o conceitual é o mesmo. Veja um exemplo de queries para o Net4J em Cypher Query Language:
MATCH (alice:User {name: 'Alice'})-[:FRIEND]->(friend:User)
RETURN friend;
6 – Search Engine Database – Banco de dados de busca
Tenho algumas lembranças de quando eu estudava o Apache Lucene. Essa é uma ferramenta fantástica que organiza os dados de um modo contrário que é habitual. Ao invés de termos tabelas com dados, nós temos os dados e indicamos quais são as ‘tabelas’. Podemos chamar isso de indexação inversa.
Pois bem, a partir dessa ferramenta surgiram outras como o ElasticSearch ou Solr, que gerenciam pools de Lucenes de modo inteligente e de maneira mais manutenível e escalável. Várias dessas soluções são amplamente utilizadas em buscadores de e-commerces, sites institucionais e afins.
Vale um destaque para o ElasticSearch, que participa de uma ferramenta de APM chamada ELK (ElasticSearch, Logstash e Kibana). Mas não devemos confundir o ElasticSearch apenas como banco de dados de busca com o ElasticSearch enquanto APM.
O Search Engine database é um de Os 14 tipos de bancos de dados mais importantes. Os exemplos que pedem algum destaque como banco de dados de busca são: ElasticSearch, Splunk, Solr, OpenSearch, Sphinx.
7 – Object Oriented Database – Banco de dados Orientado a objetos
Esse modelo de banco de dados é muito interessante por suportar objetos. Ao contrário dos bancos de dados relacionais eles podem, inclusive, considerar polimorfismos ou encapsulamentos. Não podemos desconsiderar que há, no banco relacional conceitos como functions e procedures suprindo o papel de encapsulamento até certo ponto, mas nunca lidando com objetos como o OO faz. Veja um exemplo de query para o ObjectDB escrita em C# utilizando JPQL (Java Persistence Query Language).
string jpql = "SELECT e FROM Employee e JOIN e.Department d WHERE d.Name = @deptName";
IQueryable<Employee> query = dbContext.CreateQuery<Employee>(jpql);
query = query.SetParameter("deptName", "IT");
List<Employee> employees = query.ToList();
Alguns exemplos de bancos de dados orientados a objetos são: Iris, Caché, Db4o, ObjectStore, Marisse, GigaSpaces, ObjectDB.
8 – Resource Description Framework Store Database – Banco de dados RDF
O RDF (Resource Description Framework) é um padrão definido para W3C para recursos (URIs) numa estrutura de grafo, como a conexão entre páginas web através de links. Já os RDFdbs são bancos de dados construídos exclusivamente para lidar com esse propósito.
Exemplos de Resource Description Framework Store Databases: MarkLogic, Apache Jena, RDF4J, 4Store, Strabon.
9 – Wide Column Stores – Banco de dados de coluna esparça
Esse tipo de banco de dados considera que as estruturas de armazenamento são dinâmicas, podendo ter mais ou menos colunas a medida da sua necessidade. Imagine objetos que possuem colunas vazias: num banco relacional é possível que várias tuplas tivesses uma coluna nula à toa. Esse modelo sabe lidar com isso e simplesmente ignora a existência de tais colunas.
Alguns exemplos de bancos de dados esparços ou amplos (ou de coluna ampla): Cassandra, HBase, Datastax Enterprise, ScyllaDB, Accumulo, Elassandra.
10 – Multivalue Database – Banco de dados multivalorado
O formato multivalorado de banco de dados tem semelhança com alguns já comentados, como o chav-valor. Imagine que no valor do banco chave-valor você armazena multiplos valores. Alguns modelos suportam estruturas inteiras construíndo árvores complexas. Eles se diferem do banco de dados orientado a objetos por não ter capacidades polimórficas.
Alguns exemplos de banco de dados multivalorados são: Adabas, jBASE, Model 204, D3, SciDB, OpenInsight, Rasdaman, OpenQM.
11 – Vector Database – Banco de dados de vetores
Há um tipo especial de bancos de dados para lidar com vetores. Vamos imaginar que tenhamos um conjunto de dados, mas que alguns deles indicam uma alta chance de sucesso para algo, e outros uma baixa chance. Nesse caso é possível traçar um reta atravessando o meio de modo a separar os dados em dois blocos. Pois bem, essa técnica é conhecida como SVM (Support Vector Machine), técnica bastante conhecida na IA para classificação de dados.
Os bancos de dados de vetores possuem estruturas específicas para cálculos e manutenção de dados desse tipo. Eles dão suporte a consultas para descoberta de similaridade, indices invertidos, hashes, manutenção de árvores, etc.
Esses são alguns exemplos de bancos de baseados em vetores: Kdb, Chroma, Pinecone, Milvus, Weaviate, Deep Lake, MyScale.
12 – Native XML Database – Banco de dados XML Nativo
Esse tipo de banco de dados lida com objetos serializados em XML. Eles possuem estruturas que facilitam a manipulação e a indexação para a melhor manipulação desses dados. Eles possuem estruturas nativas para lidar com queries XPath e XQuery de modo a facilitar o uso.
let $valor := doc("exemplo.xml")//elemento/campo
return $valor/text()
Alguns exemplos de bancos de dados com XML Nativo MarkLogic, Virtuoso, BaseX, Sedna, eXist-db, searchxml.
13 – Spatial Database – Banco de dados espacial
Os bancos de dados espaciais partencem a um tipo de banco ligado aos GIS (Geographic Information System). Assim esses bancos são especializados em lidar com dados relacionados a um espaço físico, seja uma planta específica de um imóvel, seja um cidade, seja um planeta distante.
Por isso modelos como esse lidam com dados como: melhor rota para chegar do ponto A ao ponto B; observação de distâncias; entre outros. Então eles estão acoscumados a lidar com dados complexos e com cálculos naturalmente pesados.
Alguns exemplos desses bancos de dados são PostGis, Aerospike, SpatialLite, GeoMesa, H2HIS, SpaceTime.
14 – EventStore Database – Banco de dados de eventos
Por fim, esse é o último da lista de Os 14 tipos de bancos de dados. Então, os bancos de dados de eventos sabem lidar com estruturas temporais sobre fatos que ocorrem em determinados sistemas. Além disso, aqui no blog temos vários artigos falando sobre DDD como o artigo Domain Driven Design Tático que fala sobre os Domain Events. Mas em resumo um evento é um acontecimento num tempo e num local. Imagine, por exemplo, um e-commerce: ele pode lançar um evento chamado ProdutoVendido. Por exemplo, um produto pode ser um telefone celular, vendido no dia 01/01/2023 10:20 para João da Silva. Portando outros sistemas podem de alguma maneira ler esse evento e tomar novas ações.
Os bancos de dados de eventos são especializados nesse tipo de característica. Note que isso não compete com RabbitMQ ou Apacha Kafka, uma vez que ele tem o propósito de armazenar os dados e não de servir como um sistema de controle de filas.
Alguns exemplos desse tipo de banco de dados: EventStoreDb, NEventStore, DB2 Event Store.
Conclusão de ‘Os 14 tipos de bancos de dados’
O artigo tenta explicar e dar exemplos dos 14 diferentes tipos de bancos de dados que existem hoje. Nada impede de amanhã um novo tipo ganhar força, tendo em vista a variedade de dados que é crescente nos tempos atuais. Note que alguns desses bancos suportam multiplos conceitos ao mesmo tempo. Mas ao final de tudo, analise com cuidade considerando as necessidades tecnológicas, as necessidades de negócio/custo, e as capacidades do time na hora de decidir por utilizar um tipo ou outro.
Ele atua/atuou como Dev Full Stack C# .NET / Angular / Kubernetes e afins. Ele possui certificações Microsoft MCTS (6x), MCPD em Web, ITIL v3 e CKAD (Kubernetes) . Thiago é apaixonado por tecnologia, entusiasta de TI desde a infância bem como amante de aprendizado contínuo.