Fórum Lentidao para inserir #37810

06/08/2003

0

Olá

Estou migrando um sistema em clipper para delphi. Os bancos (.dbf) eu estou importando com o Datapump.
O problema é que ele está muito lento para navegar ou inserir dados. Algumas tabelas tem no máximo 30000 registros.
Como ainda estou implantando, só algumas tabelas estão com PK ou indexadas e outras não. Estou usando Datasets e coloco todas num DataModule e abro todas quando inicio o programa, pois muitas possuem campos lookup e fica difícil controlar quais deverão ficar abertas ou não. Eu estou carregando todos os registros para o usuário poder navegar.
Será que a lentidão para inserir é por causa do banco de dados que foi importado ou está faltando algum ajuste no sistema que estou fazendo? :?: :? :?:
Alguém já importou assim antes?

[ ]´s
Ivonei


Ivonei

Ivonei

Responder

Posts

06/08/2003

Afarias

|O problema é que ele está muito lento para navegar ou inserir dados.

É necessário ter mais informações para poder dizer o q vc está fazendo errado. Componentes q está usando, operações q está realizando, etc.


|Algumas tabelas tem no máximo 30000 registros.

Se vc *não* carregar os 300.000 registros no cliente, não tem problema


|Como ainda estou implantando, só algumas tabelas estão com PK ou
|indexadas e outras não.

Ai está um dos (prováveis) problemas


|Estou usando Datasets e coloco todas num DataModule e abro todas
|quando inicio o programa, pois muitas possuem campos lookup e fica
|difícil controlar quais deverão ficar abertas ou não.

Isto não é típico de aplicações Cliente/Servidor. Se vai sair de DBASE para um SGDB vc terá que mudar o projeto de seu sistema tb.


|Eu estou carregando todos os registros para o usuário poder navegar.

Este procedimento está completamente equivocado.


|Será que a lentidão para inserir é por causa do banco de dados que foi
|importado ou está faltando algum ajuste no sistema que estou
|fazendo?

Me parece q vc está usando oInterbase como se fosse DBase ... isso não funciona. Mude sua abordágem para Cliente/Servidor.


T+


Responder

Gostei + 0

07/08/2003

Ivonei

|Algumas tabelas tem no máximo 30000 registros.

Se vc *não* carregar os 300.000 registros no cliente, não tem problema
[color=blue:537948f61b]Não é 300.000. É 30.000. Achei que não são muito registros para carregar todos de uma vez. É que coloco DBGrids para o usuário navegar.[/color:537948f61b]

|Como ainda estou implantando, só algumas tabelas estão com PK ou
|indexadas e outras não.

Ai está um dos (prováveis) problemas
[color=blue:537948f61b]Pois é. Estava pensando que depois de acertar todos os PK´s e índices, a lentidão de carregar os registros iria diminuir bastante. [/color:537948f61b]


|Estou usando Datasets e coloco todas num DataModule e abro todas
|quando inicio o programa, pois muitas possuem campos lookup e fica
|difícil controlar quais deverão ficar abertas ou não.

Isto não é típico de aplicações Cliente/Servidor. Se vai sair de DBASE para um SGDB vc terá que mudar o projeto de seu sistema tb.
[color=blue:537948f61b]Então não devo abrir todas as tabelas no OnCreate do DataModule? Se eu importar o DBase para o Interbase e usar a mesma estrutura só acrescentando PK´s e índices não poderei usar a mesma estrutura das tabelas importadas?[/color:537948f61b]


|Eu estou carregando todos os registros para o usuário poder navegar.

Este procedimento está completamente equivocado.
[color=blue:537948f61b]Como assim? Como poderei fazer o usuário navegar (através de botões ou DBGrids) sem carregar todos os registros. Você pode me dar uma dica?[/color:537948f61b]

|Será que a lentidão para inserir é por causa do banco de dados que foi
|importado ou está faltando algum ajuste no sistema que estou
|fazendo?

Me parece q vc está usando oInterbase como se fosse DBase ... isso não funciona. Mude sua abordágem para Cliente/Servidor.
[color=blue:537948f61b]Tem como você me dar uma dica de como fazer isto? Ou tem algum material que diga como? O interbase é completamente novo para min. Já comprei alguns livros e li algumas apostilas de Interbase. Mas só falam como criar tabelas, indices, que o interbase é um banco de dados, etc. Não falam que não pode carregar todos os registros, os cadastros devem ser assim ou assado (os exemplos são mixurucas e não mostram a realidade de se trabablhar com dezenas de tabelas e milhares de registros).[/color:537948f61b]

[color=blue:537948f61b]Quero agradecer sua dedicação à este forum e pela ajuda até agora prestada.[/color:537948f61b]

[ ]´s
Ivonei


Responder

Gostei + 0

07/08/2003

Afarias

|Não é 300.000. É 30.000. Achei que não são muito registros para
|carregar todos de uma vez. É que coloco DBGrids para o usuário
|navegar.

Ainda assim é uma grande quantidade de registros para se navegar. Acho pouco provável q um usuário consiga facilmente navegar 30.000 registros em um Grid -- e faça algum proveito disso.


|Pois é. Estava pensando que depois de acertar todos os PK´s e índices, a
|lentidão de carregar os registros iria diminuir bastante.

Vai se vc usar pesquisas que usem os índices. Se vc for carregar todo o banco, dá no mesmo.


|Então não devo abrir todas as tabelas no OnCreate do DataModule?

definitivamente: NÃO


|Se eu importar o DBase para o Interbase e usar a mesma estrutura só
|acrescentando PK´s e índices não poderei usar a mesma estrutura das
|tabelas importadas?

A estrutura das tabelas não é problema (a princípio) -- a estrutura da aplicação É!


|Como assim? Como poderei fazer o usuário navegar (através de botões
|ou DBGrids) sem carregar todos os registros. Você pode me dar uma
|dica?

Carregue apenas os registros q o usuário necessita trabalhar naquele momento. Permita q o usuário possa entrar com parâmetros para pesquisar apenas um pequeno conjunto de registros q ele precisa realmente.

Por exemplo, se vc quer uma lista de ocorrências do sistema (vendas, etc) vc pode consultar apenas as de uma determinada data ou período, ou ainda de um cliente ou fornecedor específico -- depende das suas necessidades.


|Tem como você me dar uma dica de como fazer isto? Ou tem algum
|material que diga como? O interbase é completamente novo para min.
|Já comprei alguns livros e li algumas apostilas de Interbase. Mas só
|falam como criar tabelas, indices, que o interbase é um banco de dados,
|etc. {...}

Humm... eu não tenho nada para recomendar agora, más procure material na Internet. Faça uma busca no Google ou procure material de técnicos/universidades/empresas. Se for comprar um livro, procure os livros técnicos que falam de Sistemas de Bancos de Dados e Arquiterura Cliente/Servidor -- esses livros que vc cita não servem de base para a criação de aplicações reais, só para intrudizir algumas operações básicas.

O conceito básico de cliente/servidor é q vc deve trazer do banco (servidor) para o cliente (estação) apenas os registros necessários (normalmente um pequeno conjunto de registros) -- desta forma vc reduz o tráfego de rede e o trabalho das estações, deixando sua aplicação mais veloz.


|Quero agradecer sua dedicação à este forum e pela ajuda até agora
|prestada.

:wink:


T+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar