evatalk / eva-api

:robot: EV.G Virtual Assistant - API
GNU General Public License v3.0
4 stars 1 forks source link

CSV GIGANTEEE!! #12

Closed ghost closed 6 years ago

ghost commented 6 years ago

E ae, povo.. Então, tava tentando ler o CSV que vocês compartilharam comigo, mas temos alguns problemas.

O primeiro, é de encoding, já que tá formatado pro UTF-16, nós temos que decodificar TODO o CSV para então podermos utilizar ele de forma apropriada para a aplicação.

O segundo problema, que é acarretado justamente pelo primeiro, é a performance. Diga aí, o programa já tem que decodificar um arquivo com mais de 5gb de informações (que irá crescer ainda mais conforme o tempo), e ainda buscar linha-a-linha os dados de algum usuário. Tipo, imagina só o cenário de um monte de gente fazendo requisição simultaneamente para o servidor, vai trava tudo!!

Gostaria de saber se existe algum SGBD que eu possa consultar ou é só esse CSV mesmo? Pq se for só esse CSV, precisaremos discutir alguma estratégia para resolver esse problemão.

ghost commented 6 years ago

@leonardo-minora , @tenpontes tem como me dar uma luz, ae?

tenpontes commented 6 years ago

O problema de ser UTF-16 se resolve com ICONV. Nem leva muito tempo. Faz uma vez e tá feito.

O arquivo descompactado não tem tudo isso não (5gb). Aqui pelo menos ele fica com algo em torno de 2.5 gb.

Quanto ao SGBD fica a critério de vcs. Podem subir o CSV num banco caso achem que vai melhorar a performance. Eu faço analise de dados desses dados e só trabalho com CSV. Nunca pedi acesso direto ao banco ou acesso a alguma view pq o pessoal da Infra da Enap é cruel... Além disso que formos depender de acesso a banco para sair do outro lado com a solução, vamos ficar esperando uma eternidade...

ghost commented 6 years ago

Certo, tipo, fui ver o formato do arquivo csv que vocês me passaram, e na verdade, nem UTF-16 ele é:

$ file -i 2018021902_matriculas_webcef.csv 
>>> 2018021902_matriculas_webcef.csv: application/octet-stream; charset=binary

Eu pesquisei como que faz pra converter um arquivo binário, e alguns cara disseram pra usar o comando cat <INPUT_FILE> | tr -d '\0' > <OUTPUT_FILE> só que acaba sendo convertendo para o formato UTF-16LE, que tipo, ainda apresenta um monte de problemas.

Se tiver como, tem como vc me passar os comandos certinhos pra eu converter esse arquivo de binário para um encoding que a gente possa usar? (UTF-8 ou UTF-16)

tenpontes commented 6 years ago

iconv -f UTF-16LE -t UTF-8 file_in > file_out

ghost commented 6 years ago

@tenpontes, tem algum problema deu pedir o seu número para gente manter contato pelo whatsapp? Tem alguns dados sigilosos que talvez não sejam interessantes de serem mostrados aqui. Gostaria de lhe enviar a saída de umas das leituras do csv para vc me ajudar a lidar com alguns problemas.

Caso não tenha problema, vou pedir pro Minora me passar o número. Não é interessante passar por aqui não, já que é seu número pessoal.