Bancos De Dados

Bancos de Dados


📖 Contexto

Antes de iniciar a implementação, precisamos decidir o banco de dados.
Como a linguagem do projeto ainda não foi definida, avaliaremos opções considerando:

  • Maturidade
  • Flexibilidade
  • Custo
  • Desempenho
  • Ecossistema de drivers/ORMs
  • Facilidade de operação (self-hosted vs. gerenciado)

O que é um Banco de Dados (resumo)

  • Relacionais (SQL): modelo tabular, transações ACID, SQL (ex.: PostgreSQL, MySQL, SQLite).
  • Não relacionais (NoSQL): modelos flexíveis (documentos, chave-valor, grafo etc.) para casos de uso específicos (ex.: MongoDB, Redis).

Compatibilidade por Linguagem (drivers/ORMs populares)

Observação: lista não exaustiva; todos são multiplataforma.

BancoPythonNode.js.NETGoRubyPHPRust
PostgreSQLpsycopg, asyncpg, SQLAlchemy, Django ORMpg, Prisma, Sequelize, KnexNpgsql, EF Corepgx, GORM (postgres)ActiveRecord, SequelPDO_PGSQLsqlx, Diesel
MySQL/MariaDBmysqlclient, PyMySQL, SQLAlchemy, Django ORMmysql2, Prisma, Sequelize, KnexMySqlConnector, Pomelo EF Corego-sql-driver/mysql, GORMActiveRecord, SequelPDO_MYSQL, mysqlisqlx, Diesel
SQLitesqlite3 (stdlib), SQLAlchemy, Django ORMbetter-sqlite3, sqlite3, Prisma, KnexMicrosoft.Data.Sqlite, EF Coremattn/go-sqlite3, GORMActiveRecordPDO_SQLITErusqlite, sqlx
MongoDBpymongo, motor (async)mongodb, MongooseMongoDB .NET Drivermongo-go-drivermongo, MongoidExtensão mongodbmongodb crate
Redisredis (redis-py)redis, ioredisStackExchange.Redisgo-redisredisphpredisredis crate

Quando usar cada um (resumo)

  • PostgreSQL (SQL): robustez, consultas complexas, dados relacionais, integrações avançadas (JSONB, extensões).
  • MySQL/MariaDB (SQL): simples, muito difundido, ótimo para leituras intensivas.
  • SQLite (SQL, arquivo único): protótipos, apps locais/embarcados, testes.
  • MongoDB (Documentos): esquema flexível, iteração rápida em modelos de dados variáveis.
  • Redis (Chave-valor em memória): cache, sessões, filas/pub-sub (uso complementar).

Vantagens & Desvantagens

PostgreSQL

  • ✅ Rico em recursos (CTEs, JSONB, extensões), ACID forte, confiável.
  • ❌ Pode demandar mais tuning; um pouco mais “pesado” para apps mínimas.

MySQL/MariaDB

  • ✅ Amplo suporte, ótimo desempenho em leituras, fácil operação.
  • ❌ Menos recursos SQL avançados que Postgres; particionamento/consultas complexas podem exigir workarounds.

SQLite

  • ✅ Zero configuração, leve, perfeito para prototipagem e testes.
  • ❌ Não indicado para alta concorrência/escala horizontal.

MongoDB

  • ✅ Flexível (documentos), bom para dados sem esquema rígido, fácil de evoluir.
  • ❌ Modelagem relacional complexa fica mais difícil; transações multi-documento exigem cuidado.

Redis

  • ✅ Latência baixíssima; excelente para cache/sessões/filas.
  • ❌ Memória é cara; não é banco primário para dados críticos a longo prazo.