DataForge é um motor de ETL (Extract, Transform, Load) de alto desempenho, desenvolvido em C++17 moderno. Projetado do zero com foco em performance e modularidade, o sistema é capaz de processar arquivos de dados de múltiplos formatos (CSV, JSON) em escala de gigabytes, oferecendo uma fundação robusta para pipelines de engenharia de dados complexos e carregando os resultados em um formato binário de alta performance.
O projeto nasceu como um estudo aprofundado sobre arquitetura de software de baixo nível, concorrência, gerenciamento de dependências (Git Submodules) e os benefícios de C++ para manipulação de grandes volumes de dados.
- Núcleo de Alto Desempenho em C++17: Utiliza recursos modernos de C++ para garantir máxima eficiência e segurança no gerenciamento de memória, sem a sobrecarga de um garbage collector.
- Arquitetura Modular e Extensível: O design do motor é baseado em uma clara separação de responsabilidades (Extract, Transform, Load), permitindo que novos formatos sejam adicionados com mínimo impacto.
- Processamento Paralelo (Multithreading): O pipeline de ETL foi re-arquitetado com o padrão Produtor-Consumidor, usando
std::threadpara que as etapas de Extração e Transformação/Carga ocorram em paralelo, otimizando o uso de I/O e CPU. - Extração Polimórfica de Dados: Suporte nativo para extração de dados de arquivos CSV e JSON através de uma interface de extração comum, demonstrando o uso eficaz dos padrões de projeto Strategy e Factory.
- Motor de Agregação (Transform): Implementa a lógica de transformação principal, realizando agregações complexas (
GROUP BY,SUM,COUNT,AVG) em memória de forma eficiente comstd::unordered_map. - Carregamento (Load) em Formato Binário: Integração com a biblioteca externa fast-serializer para salvar os dados processados em um formato binário customizado, resultando em arquivos de saída compactos e de leitura extremamente rápida.
- Projetado para Arquivos Gigabytes: A lógica de processamento é baseada em streaming, lendo os dados registro a registro para manter o consumo de memória baixo e constante.
A organização do DataForge segue as melhores práticas de engenharia de software, com uma clara separação entre interface (include), implementação (src), dependências (vendor), testes e outros artefatos.
dataforge-etl/
├── vendor/ # Dependências externas (via Git Submodules)
│ └── fast-serializer/
├── src/ # Código-fonte (.cpp)
│ ├── core/ # Motor principal, pipeline, extratores, loader e fábrica
│ ├── aggregator/ # Módulo de Transformação (agregação GROUP BY)
│ └── ...
├── include/ # Arquivos de cabeçalho (.h/.hpp)
│ ├── common/ # Estruturas de dados comuns (ex: DataRow.h)
│ ├── core/ # Interfaces e declarações do motor principal
│ └── ...
├── tests/ # (Planejado) Testes unitários e de integração
├── data/ # Dados de exemplo para teste
│ ├── input/ # Arquivos de entrada (CSV, JSON)
│ └── output/ # Arquivos de saída gerados (.dfb)
├── build/ # Diretório de saída da compilação (ignorado pelo Git)
├── .gitmodules # Arquivo de configuração do submódulo
├── Makefile # Automatiza o processo de build
└── README.md # Esta documentação
Para compilar e executar o projeto, você precisará de:
- Um compilador C++ com suporte a C++17 e
pthreads(ex:g++versão 8 ou superior) makepara executar a compilação automatizadagitpara clonar o repositório
-
Clone o repositório (incluindo o submódulo):
git clone --recurse-submodules https://github.com/caio2203/dataforge-etl.git cd dataforge-etl -
Compile o projeto:
make
O executável final será gerado em
build/dataforge. -
Execute o motor de ETL: O programa espera dois argumentos: o arquivo de entrada e o nome do arquivo de saída.
# Exemplo com um arquivo CSV ./build/dataforge data/input/vendas.csv data/output/resultado.dfb
Este projeto está completo.
- Arquitetura modular e extensível definida.
- Interface de extração de dados (
IDataExtractor). - Implementação de extrator para CSV e JSON.
- Desenvolvimento da biblioteca
fast-serializerem repositório separado. - Integração da biblioteca via
Git Submodulespara a etapa de Load. - Implementação do módulo
Aggregator(a etapa Transform). - Adição de suporte a multithreading no pipeline de ETL.
- Pipeline E->T->L (Extract->Transform->Load) completo e funcional.
Contribuições são bem-vindas! Se você tem ideias para novas funcionalidades, melhorias de performance ou correções de bugs, por favor, siga estes passos:
- Faça um "Fork" do repositório.
- Crie uma nova branch para sua feature (
git checkout -b feature/minha-feature). - Faça o commit de suas alterações (
git commit -m 'Adiciona minha-feature'). - Envie para a sua branch (
git push origin feature/minha-feature). - Abra um "Pull Request".
Este projeto está licenciado sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.