Projeto para estudo de Streams no Node.js, que trabalha recebendo, transformando e enviando fluxo de dados sem a necessidade de colocá-los em sua totalidade na memória, dessa forma conseguindo trabalhar com grandes quantidades de dados de forma eficiente, utilizando pedaços (chunks) dele e armazenando em buffer somente a quantidade de dados possível para a memória disponível. Nesse projeto utilizei o Docker para limitar a memória em 80Mb, e mesmo assim é possível receber links de CSV muito acima desse limite. Foi utilizado a biblioteca CSV-parse para fazer o parte de CSV para JSON já que a própria implementa Stream para fazer essa conversão, recebendo dados da response do Axios que também é uma Stream.
Atualmente existem 4 tipos de Streams:
- Readable: operação de leitura de uma fonte especifica.
- Writable: operação de gravação em um destino especifico.
- Duplex: funciona tanto para leitura como para gravação.
- Transform: é um tipo de Duplex onde os dados podem ser modificados.
Para a criação de um fluxo de 2 ou mais streams, são utlizados métodos e eventos, sendo o readable.pipe o responsável pela comunicação entre elas.
Desenvolvimento
npm run dev
Compilado
npm start
Docker
docker-compose up -d
Os endpoints para execução estão no arquivo requests.http e caso tenha a extensão do VSCode chamada "REST Client" pode enviar a request diretamente por ele.
// 100 rows
POST http://localhost:3000
Content-Type: application/json
{
"data": {
"link": "https://github.com/datablist/sample-csv-files/raw/main/files/organizations/organizations-100.csv",
"delimiter": ","
}
}
###
// Error
POST http://localhost:3000
Content-Type: application/json
{
"data": {
"link": "https://www.google.com",
"delimiter": ","
}
}