PostgreSQL vs MongoDB: relacional ou documento?
PostgreSQL é um banco de dados relacional com excelente suporte a JSON; MongoDB é um banco de dados de documentos construído em torno de documentos flexíveis, semelhantes a JSON e com esquema leve.
PostgreSQL armazena tabelas relacionais mas também lida bem com dados semiestruturados via JSONB com indexação, cobrindo muitos casos de uso de documentos enquanto mantém joins e constraints. MongoDB armazena documentos BSON, escala horizontalmente via sharding e se adequa a esquemas em rápida evolução e padrões de leitura desnormalizados. A verdadeira questão é se seus dados são naturalmente relacionais ou têm forma de documento.
| PostgreSQL | MongoDB | |
|---|---|---|
| Modelo | Relacional (+ JSONB) | Documento (BSON) |
| Esquema | Definido, JSON flexível | Flexível por padrão |
| Joins | First-class | Limitado ($lookup) |
| Escala horizontal | Add-ons / particionamento | Sharding nativo |
| Melhor para | Mistura relacional + JSON | Dados de documento em evolução |
Caso de uso e escala
Postgres se adequa a dados com relacionamentos claros, transações entre entidades e relatórios. MongoDB se adequa a dados centrados em documentos, iteração rápida no esquema e sharding horizontal fácil. Note que o JSONB do Postgres cobre muitas necessidades de documentos, então você pode não precisar de um store de documentos separado.
Em CI
Ambos rodam como service containers; carregue fixtures e aguarde a prontidão. Testes de documentos costumam precisar de configuração cuidadosa de índices. Qualquer um roda de forma limpa em runners gerenciados, onde runners mais rápidos encurtam a inicialização do container e as etapas de seed/teste.
O veredito
Dados relacionais, transações e relatórios (com JSON onde necessário): PostgreSQL. Dados em forma de documento, em rápida evolução e com sharding nativo: MongoDB. Muitos times começam com Postgres e usam JSONB em vez de adicionar um banco de dados de documentos, recorrendo ao MongoDB quando documentos e escala horizontal predominam.