Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Colocar backend com banco de dados #4

Closed
flaviobarros opened this issue Oct 14, 2016 · 5 comments
Closed

Colocar backend com banco de dados #4

flaviobarros opened this issue Oct 14, 2016 · 5 comments

Comments

@flaviobarros
Copy link

Um recurso que eu acho que seria particularmente interessante é incluir um backend com bancos de dados, como SQLite por exemplo. Seria interessante em virtude de que manipular um arquivo de 1,5Gb pode ser probitivo em alguns computadores.

@flaviobarros
Copy link
Author

flaviobarros commented Oct 16, 2016

Só um comentário para ficar mais claro do que eu estou falando, eu fiz um exemplo de como isso poderia ser feito com dados das eleições 2016, usando o MonetDB como backend:

## Carregando os pacotes
library(DBI)
library(MonetDBLite)
library(dplyr)
library(tidyr)

## Criando o banco de dados na pasta local
dbdir <- "db/"

## Cria conexão com o banco
con <- dbConnect(MonetDBLite(), embedded = dbdir)

## Fazendo a ingestão do banco
csvfile <- 'votacao_sp.txt'

## Copiando os dados para o banco direto do csv
dbWriteTable(con, "votasp", csvfile, sep = ';', 
             col.names = c("DATA_GERACAO","HORA_GERACAO","COD_PLEITO",
                           "COD_ELEICAO","UF","COD_CARGO","NOME_CARGO",
                           "ZONA_ELEITORAL","SECAO_ELEITORAL","LOCAL_VOTACAO",
                           "NUM_PARTIDO","NOME_PARTIDO","COD_MUNICIPIO",
                           "NOME_MUNICIPIO","DATA_BU_RECEBIDO0",
                           "ELEITORES_APTOS","ELEITORES_FALTOSOS",
                           "COMPARECIMENTO","TIPO_ELEICAO","TIPO_URNA",
                           "DESC_TIPO_URNA","NUM_VOTAVEL","NOME_VOTAVEL",
                           "QUANT_VOTOS","TIPO_VOTAVEL","NUM_URNA_EFETIVADA",
                           "COD_URNA1","COD_URNA2","DATA_CARGA","COD_FLASHCARD",
                           "PERGUNTA_SECAO"))

## Conectando a um banco
eleicoes <- src_monetdb(dbname = 'votasp', con = con)

## Ligando a tabela
votasp <- tbl(eleicoes, "votasp")

Gostaria de saber a opinião de vocês a respeito pois esse feature seria uma mudança radical no pacote.

@silvadenisson
Copy link
Owner

Acredito que seria uma solução interessante, no entanto, acho que deveríamos deixar o pacote o mais simples possível. pois quanto mais sofisticação mais problemas temos com outros OS, por exemplo, entre os novo incrementos que foram feitos no pacote há alguma coisa que está fazendo ele funcionar com falhas no mac, ainda vou verificar o que é, mas já há problemas.

@flaviobarros
Copy link
Author

Entendo @silvadenisson, mas do jeito que está hoje pode ser inviável utilizar o pacote em alguns computadores com RAM reduzida. Outro ponto é que o processamento de consultas ficaria bem mais rápido.

Outra opção seria criar um outro pacote com estas funcionalidades. Se você não pretende mesmo incluir esse recurso me dá um toque eu faço um pacote em separado.

@meirelesff
Copy link
Collaborator

Flavio, tu chegou testar o tempo gasto entre as duas soluções? Tenho curiosidade de saber quão mais rápido ficaria. Se for pouca coisa, não sei se valeria à pena pelas razões apontadas pelo Denisson e pela mudança geral no código. Mas tu tem razão no ponto do uso de memória. Pra bases maiores, como a de gastos e receitas de financiamento nas eleições municipais, acho que podemos implementar a tua solução.

@flaviobarros
Copy link
Author

Eu diria que se couber na RAM, com um data.table da vida, pode ser que não tenha diferença. A grande vantagem dessa abordagem é que ela funciona com bases de dados menores que a RAM, iguais ou muito maiores que a RAM, praticamente com a mesma eficiência. Outro ponto é a economia de banda já que você estaria reutilizando o mesmo conjunto de dados todas as vezes.

Por curiosidade vou fazer o benchmark e posto aqui.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants