Projeto desenvolvido como Trabalho de Graduação em Análise e Desenvolvimento de Sistemas na Universidade de Taubaté (UNITAU).
O experimento compara o desempenho de estratégias de inserção de 1 milhão de registros no PostgreSQL e no MariaDB. O objetivo é avaliar quanto a forma de executar a carga — linha a linha, em lotes ou por mecanismos nativos — influencia o tempo total de uma migração de dados.
- Individual: um
INSERTpor registro, com uma única transação ecommitao final. - Individual com commit por registro: um
INSERTe umcommitpara cada registro. - Lote: inserções agrupadas em lotes de 1.000, 10.000, 50.000 e 100.000 registros.
- Carga nativa:
COPYno PostgreSQL eLOAD DATA LOCAL INFILEno MariaDB.
Cada estratégia foi executada em tabelas com e sem restrições UNIQUE nas
colunas email e cpf. Para cada cenário foram realizadas seis execuções
sequenciais: a primeira foi tratada como aquecimento (warmup) e descartada, e
as cinco restantes foram utilizadas no cálculo das médias.
Tempos médios, em segundos, para inserir 1 milhão de registros:
| SGBD | Cenário | Individual | Commit por registro | Melhor lote | Carga nativa |
|---|---|---|---|---|---|
| PostgreSQL | Sem UNIQUE |
181,04 | 2.143,25 | 30,96 (50 mil) | 13,60 (COPY) |
| PostgreSQL | Com UNIQUE |
229,43 | 2.198,56 | 42,32 (100 mil) | 29,07 (COPY) |
| MariaDB | Sem UNIQUE |
243,52 | 2.174,25 | 27,15 (1 mil) | 9,21 (LOAD DATA) |
| MariaDB | Com UNIQUE |
263,34 | 2.212,12 | 36,04 (1 mil) | 17,30 (LOAD DATA) |
Os resultados mostram que:
- realizar um
commitpor registro foi a alternativa mais lenta nos dois bancos; - inserções em lote reduziram expressivamente o tempo em relação às inserções individuais;
- os mecanismos nativos apresentaram os menores tempos em todos os cenários;
- as restrições
UNIQUEaumentaram o custo de escrita devido à manutenção dos índices; - neste ambiente, a escolha da estratégia teve impacto maior que a escolha entre os dois SGBDs.
Sem UNIQUE, o COPY foi aproximadamente 158 vezes mais rápido que o commit
por registro no PostgreSQL. No MariaDB, o LOAD DATA foi cerca de 236 vezes
mais rápido.
Os números representam um ambiente local e controlado, com dados sintéticos, ausência de concorrência e versões/configurações específicas. Portanto, não devem ser interpretados como uma comparação universal de desempenho entre PostgreSQL e MariaDB.
- Python 3.13
- PostgreSQL 16
- MariaDB 11
- Docker Compose
psycopgePyMySQL- pandas e Matplotlib
- uv para gerenciamento do ambiente Python
- Docker com Docker Compose
- uv
- Git LFS, caso queira utilizar o CSV de 1 milhão de registros versionado no repositório
uv syncdocker compose up -dOs serviços serão disponibilizados com as credenciais definidas em
docker-compose.yml:
| Serviço | Endereço | Banco | Usuário | Senha |
|---|---|---|---|---|
| PostgreSQL | localhost:5432 |
postgres |
postgres |
postgres |
| MariaDB | localhost:3306 |
mariadb |
root |
mariadb |
Para baixar o arquivo já versionado:
git lfs pullOu gere um novo CSV sintético:
uv run python -m scripts.gerar_csv 1000000O arquivo será criado em data/1000000_pessoas.csv.
PostgreSQL:
uv run python -m scripts.analise_postgres 1000000_pessoas.csvMariaDB:
uv run python -m scripts.analise_mariadb 1000000_pessoas.csvOs arquivos brutos são gravados em result/. A execução completa pode levar
algumas horas, principalmente devido aos cenários com commit por registro.
uv run python -m scripts.gerar_grafico result/<arquivo_resultado.csv>
uv run python -m scripts.gerar_grafico result/<arquivo_resultado.csv> --otimizadoOs gráficos gerados são salvos em scripts/graficos/.
.
├── data/ # conjunto de dados sintéticos
├── result/ # resultados brutos dos benchmarks
├── scripts/
│ ├── analise_postgres.py # benchmark do PostgreSQL
│ ├── analise_mariadb.py # benchmark do MariaDB
│ ├── gerar_csv.py # geração dos registros sintéticos
│ ├── gerar_grafico.py # consolidação visual dos resultados
│ ├── ddl.py # estruturas das tabelas
│ └── utils.py # funções compartilhadas
├── docker-compose.yml
├── pyproject.toml
└── uv.lock
Autor: Victor Augusto Soares de Oliveira
Orientador: Prof. Dr. Luis Fernando de Almeida
Instituição: Universidade de Taubaté — 2026