Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marceloy

4.000.000 de registros

Recommended Posts

Boa tarde ...NUNCA ENCONTREI UM OBSTACULO TÃO GRANDE ... imagina que tenho um banco de dados dbase com uma tabela contendo 4,3 MILHÕES de registros e um sistema em PHP (ta .. eu sei que devo migrar a base .. mas por enquanto tem que ser assim).. imagina agora que devo gerar um relatorio devolvendo os registros que compreendem as datas pesquisadas sobre um certo valor identificador do registro (um campo nome no registro .. que pode se repetir) .. assim eu faço a pesquisa pelo nome e pelas datas de inicio e fim.pelo que conheço de dbase .. tenho que varrer a base INTEIRA a procura dos registros e fazer a comparação em cada um dos registros da base.. estou fazendo certo ???cara .. trava a maquina !!!!ALGUEM ME DA UMA LUZ ????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz, o banco tá em DBASE??? :-/

Nunca trabalhei com .dbf, mas já ouvi alguns comentários não muito bons. Tem certeza de que não vale a pena perder um pouco de tempo pra migrar isso aí?

 

Sinceramente, não vejo muita solução pra esse problema... acho que o PHP não suporta um laço que rode 4,3 milhões de vezes procurando por um registro. Mas em todo caso, você pode tentar aumentando o tempo de execução do script (o padrão é de 30 segundos):

 

ini_set("max_execution_time", "600"); // 10 minutos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marceloy...

 

A melhor opção no seu caso seria realmente fazer a importação para outro sistema de dados, até mesmo o Access.

 

Mas, de qualquer forma, a lentidão excessiva pode ser um pouco mais amenizada caso o arquivo esteja beleza, oq eu quero dizer com isto é que, por exemplo, todo arquivo .DBF deve haver um correspondente .IDX, que representa a indexação desta tabela, se não existir este arquivo, para sua massa de dados, vai ser mais lenta que o que poderia ser considerado normal.

 

Eu nunca trabalhei com DBF com PHP, mas já trabalhei em outros tipos de sistemas. Verifique se existe o correspondente IDX, pode ser até mais que 1 arquivo IDX relacionado com apenas 1 DBF.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Prog,Possuo os arquivos de indexação NSX (que segundo o pessoal do sistema anterior, em Clipper, é mais rápido que o IDX), mas não sei como seria sua relação com o PHP.O PHP consegue identificar e interagir com esses arquivos ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

O PHP consegue identificar e interagir com esses arquivos ???

Sinceramente? Não sei, só fazendo o teste. Deixe os arquivos de indexação na mesma pasta dos arquivos DBF.

Uma outra sugestão, tente abrir a tabela usando a flag de somente leitura, acho que isto fará com que a carga seja mais rápida.

 

Método de como o PHP trabalha com arquivos dBase:

O PHP carrega todo o conteúdo da base de dados para um vetor e você faz a navegação dos dados por este vetor, ou seja, indiscutivelmente ele vai armazenar todo o conteúdo da base de dados na memória do servidor, independente da quantidade de informação, ele vai ler todo o arquivo, ou seja, quanto maior, mais demorado.

Não é aconselhável usar algum tipo de include para cada página, a partir do momento que você fez a carga para o vetor, salve esta informação, por exemplo, numa variável de sessão e passe a fazer a manipulação somente nesta variável.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dica:

 

As ferramentas da EMS (SQL Manager) possue integrado a funcionalidade de importar dados de arquivos DBF para banco de dados Firebird, Postgre, MySQL e ainda outros, dependendo do manager utilizado.

 

http://www.sqlmanager.net/products/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Somente dando um parecer...Fiz um script (método luzitano) que conseguiu otimizar o tempo de busca no banco ..O resultado ficou assim:Com o Hardware atual (Hard de Testes):model name : AMD Athlon 64 Processor 2800+cpu MHz : 1802.296cache size : 512 KBRAM : 512 MB|registros| |segundos|100.000 : 3.4361200.000 : 6.98673300.000 : 10.8022400.00 : 14.64932500.000 : 18.23029600.000 : 22.0285800.000 : 29.845141.000.000 : 37.896021.200.000 : 44.879221.500.000 : 57.109072.000.000 : 77.154972.500.000 : 96.17573.000.000 : 116.915863.500.000 : 138.361254.000.000 : 158.480784.464.051 : 184.51169[ ]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro marceloy,

 

já trabalhei com importação dos dados de DBase para MySQL.

Sinceramente não foi com uma base tão grande quanto esta, mas mesmo assim demorava pra caramba.

Cerca de 25000 registros levava alguns minutos para serem importadas. Isto porque o DBase não é exatamente um SGBD (Sistema Gerenciador de Banco de Dados) e por isso não possui ferramentas de indexação eficientes.

Sei que esta sugestão não vem exatamente de encontro com o que você queria, mas sinceramente, para trabalhar com uma base de dados tão grande com PHP você realmente necessitará migrar de base.

O próprio PHP aconselha que não se use o DBase pois ele (PHP) não tem um suporte eficiente para este tipo de base de dados.

 

"Nós recomendamos que você não use seus arquivos dbase como seu banco de dados de produção. Escolha ao invés um servidor SQL real, MySQL ou Postgres são escolhas comuns com o php. O suporte ao Dbase esta aqui para permitir a você importar e exportar dados para e apartir do seu banco de dados web, porque o formato é normalmente entendido por planilhas e organizadores do Windows."

 

http://br2.php.net/manual/pt_BR/ref.dbase.php

 

Vlw Amigão...

T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.