radar-parlamentar / radar

Estamos de mudança para o GitLab: https://gitlab.com/radar-parlamentar/radar.
http://radarparlamentar.polignu.org
84 stars 44 forks source link

Importar / exportar casa legislativa #96

Closed leonardofl closed 11 years ago

leonardofl commented 11 years ago

Fazer um script que exporte os dados de uma dada casa legislativa (Cx) do banco de dados (DB_S) e um script que importe os dados exportados em outra base de dados (DB_T). DB_T pode já ter outros dados. Sendo C o conjunto das casas legislativas em DB_T:

Motivação: uma melhoria (ou um bug fix) em um importador, que não seja mero acréscimo de mais dados, causa situação delicada no servidor de produção: normalmente é preciso remover TODOS os dados da base e executar TODOS os importadores novamente. Essa tarefa serve para que uma vez que o novo importador tenha sido executado com sucesso no ambiente de desenvolvimento, ele possa ser facilmente aplicado como um "patch" ao servidor de produção. Notem que já temos scripts de importação/exportação de dados*, mas aqui a coisa é ligeiramente diferente, pois oq já temos faz a exportação/importação de todos os dados, o que não é oq precisamos na situação descrita.

*https://github.com/leonardofl/radar_parlamentar/tree/master/radar_parlamentar/scripts

Obs1: durante o processo de importação/exportação os IDs podem se alterar, desde que se mantenha a consistência dos dados (na verdade será necessário que eles se alterem!). Obs2: caso o script seja feito com o Django, o banco de dados não precisa ser um parâmetro: a operação pode ser realizada no banco já configurado e utilizado pelo Django (já que normalmente a exportação será feita em uma máquina e a importação em outra).

guscl commented 11 years ago

Olá, estamos estudando o projeto assim como o Django . Iremos em breve enviar um feedback sobre esta Issue.

arthurmde commented 11 years ago

Iae pessoal, estamos com dúvidas sobre o que são aqueles Bancos na pasta radar_parlamentar/static/sqlite? E como está funcionando a deleção do Banco de Dados principal?

diraol commented 11 years ago

Arthur,

aqueles bancos na pasta indicada são "dumps" que realizamos de cada casa legislativa e disponibilizamos individualmente para que as pessoas possam baixá-los.

Eu pessoalmente acho que temos que retirá-los do versionamento, pois está ficando muito grande e não cabe (em minha opinião) colocá-los no git do projeto - porque é uma informação "de produção", não "do projeto" em si.

Quanto à deleção do BD principal, não me recordo se isso foi implementado.


Diego Rabatone Oliveira diraol(arroba)diraol(ponto)eng(ponto)br Identica: (@diraol) http://identi.ca/diraol Twitter: @diraol

Em 13 de maio de 2013 09:51, Arthur de Moura Del Esposte < notifications@github.com> escreveu:

Iae pessoal, estamos com dúvidas sobre o que são aqueles Bancos na pasta radar_parlamentar/static/sqlite? E como está funcionando a deleção do Banco de Dados principal?

— Reply to this email directly or view it on GitHubhttps://github.com/leonardofl/radar_parlamentar/issues/96#issuecomment-17809422 .

leonardofl commented 11 years ago

Não temos implementado mesmo a deleção dos dados de uma dada casa legislativa... (se não me engano, até falei q isso virava uma nova tarefa quebrada pra vcs)

ah arthur, por favor, registra aqui a solução pra essa issue q foi acordada entre a gente.

leonardofl commented 11 years ago

Di, se quiser abre uma nova issue pra gente discutir essa parada dos bancos...

arthurmde commented 11 years ago

Então o que havíamos discutidos foi fazer um script para exportar todo o banco de dados local para um XML que será lido e tratado por outro Script (que será rodado no Servidor) para tratar esses XMLs exportados, transformado-os em objetos da Models que podem ser utilizados, por exemplo, para atualizar ou inserir um registro (tratando suas dependências), ou até mesmo para excluir e popular o banco novamente. De acordo Leonardo? Acabamos de finalizar esse script de exportação para XML !!!

leonardofl commented 11 years ago

humm... acho q os objetos salvos no XML vão ser usados para serem recriados na outra base. Acho q não precisa considerar alteração e nem entendi como seria possível exclusão baseado nele.

Lembrando, o processe de importação vai ter dois passos: 1) limpa todos os dados da casa (praticamente uma funcionalidade separada, dá até pra criar outra issue) 2) lê o XML e importa seus dados (assim como fazem os outros importadores)

e legal q vcs já fizeram o exportador! se ele já estiver com testes, já podem mandar o pull request.

diraol commented 11 years ago

Algumas observações.

Estou respondendo por email, então não vi a lista de issues, por isso desculpem-me caso fale besteira.

A primeira coisa é que eu acho que "Importar" é uma issue e "exportar" é outra. =)

O "Importar" desta issue é o mesmo que "importar uma casa legislativa exportada por nosso próprio sistema"? Isso significaria apenas fazer um novo "importer", só que baseado no "nosso BD", certo?

Quanto à exportação, tenho duas perguntas: 1) Qual o objetivo da exportação?

2) Quanto ao formato, não sei se XML é o melhor caminho, qual o motivo da escolha? Independente disso, eu acho que, em se tratando de XML, seria muito bacana seguirmos o "estilo" do XML da Câmara dos Deputados. Explico-me. Exportar cada um dos campos de nossos objetos como uma "label" do XML pode gerar um overhead completamente desnecessário. O "Estilo" utilizado pela CDEP de usar atributos em uma única label me pareceu bem mais sensato e exuto (o que reduz tamanho e tempo de processamento).

Exemplificando melhor 1) Exemplo "Ruim":

..... MeuNome ..... MeuSexo ..... MinhaIdade

2) Exemplo "Melhor":

Abraços,


Diego Rabatone Oliveira diraol(arroba)diraol(ponto)eng(ponto)br Identica: (@diraol) http://identi.ca/diraol Twitter: @diraol

Em 13 de maio de 2013 16:43, Leonardo Leite notifications@github.comescreveu:

humm... acho q os objetos salvos no XML vão ser usados para serem recriados na outra base. Acho q não precisa considerar alteração e nem entendi como seria possível exclusão baseado nele.

Lembrando, o processe de importação vai ter dois passos: 1) limpa todos os dados da casa (praticamente uma funcionalidade separada, dá até pra criar outra issue) 2) lê o XML e importa seus dados (assim como fazem os outros importadores)

e legal q vcs já fizeram o exportador! se ele já estiver com testes, já podem mandar o pull request.

— Reply to this email directly or view it on GitHubhttps://github.com/leonardofl/radar_parlamentar/issues/96#issuecomment-17835621 .

leonardofl commented 11 years ago

"Importar" é uma issue e "exportar" é outra yep! melhor assim

Isso significaria apenas fazer um novo "importer", só que baseado no "nosso BD", certo? yep! por isso gostei dessa solução

1) Qual o objetivo da exportação? poder importar =) no nosso caso, é pra q VOCÊ (diego) não tenha que executar TODOS os importadores de novo no servidor de produção sendo que eu já executei o importador do senado na minha máquina.

Quanto ao formato, não sei se XML é o melhor caminho, qual o motivo da escolha? aleatório... poderia ser json, mas nada contra XML

sobre o formato do XML, o propósito é q seja algo diretamente relacionado com a nossa estrutura do nosso banco. é só pra gente pode importar do radar para o radar... então não faz sentido complicar mais a estrutura doq necessário

leonardofl commented 11 years ago

Obs: considere a "motivação" dessa issue (no 1o post dela)

saulotrento commented 11 years ago

HHHmmm... agora que eu entendi que estamos usando um XML intermediário no intuito de, digamos assim, "juntar" dois bancos de dados.

Parece que isso não vai ser muito complicado de implementar. Mas eu sou o único que acha deselegante criar esse XML intermediário? Eu teria pensado em um programa que diretamente lê dados de um banco de dados e os grava em outro. Ou estou esquecendo de algum detalhe?

leonardofl commented 11 years ago

Sim, falta um detalhe! pra fazer isso q vc disse, o programa no Django teria q se conectar em duas bases de dados ao mesmo tempo. Talvez seja possível, mas é bem diferente doq fazemos (não sei fazer isso). E outra, uma das bases tá no PC do developer e a outra no servidor. Onde esse programa rodaria? Ou a máquina do developer teria q ter acesso direito ao banco em produção (not nice) OU teríamos de qlqr forma mandar o banco do dev pro servidor, e aí se persisteria o problema dos IDs do banco, com o qual estava preocupado.

Na verdade essa solução é simples, elegante e não é difícil de implementar (tirando o fato de q algumas pessoas poderiam preferir json a xml, mas não me importo com isso). Veja, nós já temos uma estrutura de importadores: importamos dados do senado, dados da câmara... oq estamos fazendo é utilizar a mesma estrutura para importar dados de nós mesmo! só q agora temos q fazer o exportador tb.

Vou quebrar agora essa issue em 3 outras.

leonardofl commented 11 years ago

Quebrando esta issue nas issues #102, #103 e #104.

saulotrento commented 11 years ago

Legal, entendi!