| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2009 20:21:13
|
gurumen
Thread.start()
![[Avatar]](/images/avatar/0ebf8ab72300320714488d4aa61daa74.png)
Membro desde: 03/07/2009 11:56:32
Mensagens: 34
Localização: Florianópolis - SC
Offline
|
Olá pessoal estou com um problema na escolha da melhor forma de armazenamento de dados.
Eu tenho um script que importa dados de um arquivo .xls e envia ao banco de dados, porem antes eu preciso fazer uma consulta ao banco e trazer algumas colunas utilizadas na importação. Após gravar essas colunas em alguma estrutura eu devo pesquisar se a linha do xls atual está presente no banco de dados.
Não sei se me entenderam mas o meu caso atual é que eu tenho um arquivo xls com 8000 registros e nestes registros possui uma árvore de níveis entre os elementos dentro dele
ex: 1, 1.1, 1.1.1, 2, 2.1, 2.2.
eu preciso buscar no banco o código(PK) e o codigo atual (exemplo acima) do registro pai e entao sempre que eu for inserir um registro do xls no banco de dados eu preencho o campo codigo pai no registro atual.
Preciso de uma estrutura de busca rapida onde que ao passar o codigo 1.1 ele me retorne o pai dele que é o índice(PK) dele o indice do registro 1.
OBS: do jeito que ta demora muito pra inserir os dados, pois antes da inserção de um registro no banco eu busco a PK dele e insiro junto. Ou seja se eu tenho 8000 registros no xls ele faz 8000 consultas na tabela. Isso esta demorando muito por isso a duvida na escolha de um armazenamento de dados.
Desde já agradeço..
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2009 21:35:56
|
luBS
JavaBaby
Membro desde: 10/05/2006 14:00:27
Mensagens: 86
Localização: São Paulo
Offline
|
Se o arquivo sempre tiver mais ou menos esse tamanho (8000 registros), eu faria tudo em memoria primeiro e depois gravaria no banco, entao ao inves de buscar e gravar no banco para cada linha, eu iria usar alguma estrutura baseada em hash.
Outra coisa eh mais logica, vamos supor que vc tem 200 filhos de 1.1, pq buscar 200x o 1.1 quando vc soh precisa buscar uma vez?! E dependendo de como o xls estiver organizado, vc insere o pai e todos os filhos vaum vir logo a seguir ateh que vc mude de nivel (quando 1.1 passar a ser 1.2, vc nao precisa mais da referencia para 1.1 pois tem certeza que ja processou todos seus filhos)
|
http://luizroos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2009 22:55:34
|
giulianocosta
JavaEvangelist
Membro desde: 11/08/2003 09:59:28
Mensagens: 442
Offline
|
Cara, dependendo de como estiver dispostos os teus dados no xls da até pra fazer SQL no xls através de um ODBC.
Se for o cara so, procure no google odbc e xls.
|
Giuliano Costa
Programador |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 09:21:10
|
gurumen
Thread.start()
![[Avatar]](/images/avatar/0ebf8ab72300320714488d4aa61daa74.png)
Membro desde: 03/07/2009 11:56:32
Mensagens: 34
Localização: Florianópolis - SC
Offline
|
luBS wrote:Se o arquivo sempre tiver mais ou menos esse tamanho (8000 registros), eu faria tudo em memoria primeiro e depois gravaria no banco, entao ao inves de buscar e gravar no banco para cada linha, eu iria usar alguma estrutura baseada em hash.
Outra coisa eh mais logica, vamos supor que vc tem 200 filhos de 1.1, pq buscar 200x o 1.1 quando vc soh precisa buscar uma vez?! E dependendo de como o xls estiver organizado, vc insere o pai e todos os filhos vaum vir logo a seguir ateh que vc mude de nivel (quando 1.1 passar a ser 1.2, vc nao precisa mais da referencia para 1.1 pois tem certeza que ja processou todos seus filhos)
Está exatamente assim o xls, esta organizado em pais com seus respectivos filhos. Você diz armazenas os registros num HashTable por exemplo e depois percorrer este hash e inserir no banco apos isso?
POrque o que eu tive vendo aqui é que nem todos os dados estão consistentes, alguns faltam pais entao eu estou inserindo o pai antes do filho.
This message was edited 1 time. Last update was at 28/07/2009 09:25:06
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 10:22:19
|
luBS
JavaBaby
Membro desde: 10/05/2006 14:00:27
Mensagens: 86
Localização: São Paulo
Offline
|
Falta de pai vc quer dizer que dada a entrada:
1
1.1
1.2.1
2.1.2
Esta faltando os pais 1.2, 2 e 2.1?
Se sim, eu estava pensando em algo desse tipo, veja se te ajuda (o que esta em list simula algo vindo do seu xls), foda que tah recursivo, ideal que não seja... mas para 8000 objetos nao deve fazer tanta diferença:
|
http://luizroos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2009 22:00:53
|
gurumen
Thread.start()
![[Avatar]](/images/avatar/0ebf8ab72300320714488d4aa61daa74.png)
Membro desde: 03/07/2009 11:56:32
Mensagens: 34
Localização: Florianópolis - SC
Offline
|
luBS wrote:Falta de pai vc quer dizer que dada a entrada:
1
1.1
1.2.1
2.1.2
Esta faltando os pais 1.2, 2 e 2.1?
Se sim, eu estava pensando em algo desse tipo, veja se te ajuda (o que esta em list simula algo vindo do seu xls), foda que tah recursivo, ideal que não seja... mas para 8000 objetos nao deve fazer tanta diferença:
É isso mesmo o que estou fazendo porém estou fazendo no banco de dados, mas entendi a idéia e é essa mesmo, manipular os dados na memoria e depois socar no BD.
Agradeço pelo script testei aqui e é isso mesmo amigo
Valeu.
[Resolvido]
|
|
|
 |
|
|
|
|