ERROR BASE/1004

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ALEX170970
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 06 Dez 2007 18:12
Localização: Santos-SP

Mensagem por ALEX170970 »

alaminojunior escreveu:Este arquivo não está corrompido ? Já verificou com o Filefix ou outro programa.
Não verifiquei, mas gerei o arquivo novamente, e quando passa de 1.800.000 registros começa a dar erro 1004.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

ALEX170970 escreveu:
Maligno escreveu:Dúvida: você usa NTX?
Isso mesmo, NTX.

Só que agora estou trabalhando com o arquivo sem índice, desordenado, pois não consigo ordená-lo.
Ah, mas então você precisa testar a biblioteca SIX. Ela monta índices compactados e compostos, com várias chaves no mesmo arquivo. A indexação é muitíssimo mais rápida do que com NTX. Pegue a biblioteca do meu site, rode o demo e veja o potencial. A diferença é incrível. Aliás, é rápido pra gerar e rodar o demo. Você não terá que dispor de muito tempo. Vale a pena.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem por alaminojunior »

Me perdoe a insistencia, 8o| mas vc já verificou a integridade deste arquivo ?
E já que tocaram neste relevante detalhe, depois de verificada a integridade do mesmo, indexe com CDX.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Alex, vc precisa efetivamente ter todos esses 1.800.000 registros ativos? E em um único DBF? Você os consulta (ou faz qq uso deles) regularmente?

Eu acho sim uma boa idéia trocar o NTX pelo CDX (eu tb fiz isso), mas pra que esperar pela indexação de quase 2 milhões de registros (mesmo com uma RDD veloz) se dá pra quebrar em arquivos menores e/ou mandar coisa velha pro arquivo morto, diminuindo o tamanho das informações ativas e agilizando o processamento?

Um exemplo maluco, para explicar a minha opinião: imagina guardar todos os lançamentos do diário de todos os clientes do seu escritório de contabilidade, de todos os tempo, em um único DBF. Pra que? Melhor ter um DBF para cada exercício e para cada cliente, certo?
ALEX170970
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 06 Dez 2007 18:12
Localização: Santos-SP

Mensagem por ALEX170970 »

Eolo:

Na realidade, são mais de 32 milhões de registros de e-mails. Sei que após retirar as duplicidades, ficarão menos de 10 milhões. Necessito que seja um cadastro único, para evitar duplicidades.

Estou frequentemente adicionado novos endereços ao cadastro, e gerando novos arquivos .txt para cada atividade, sem repetições.

O Clipper 5.2 tem suporte a .CDX?
Como fazer para criar este índice?
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

32 milhões de eMails??? hummmm... :[
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Alex, vc pode ter os 32 milhões de emails, mas NÃO PRECISA SER EM UM ÚNICO ARQUIVO. Quebre em arquivos menores... Imagina o seguinte:
. arquivo EMAIL_A.dbf -> endereços e-mail começando com A
. arquivo EMAIL_B.dbf -> idem com B
. etc.

Com isso, seu 1 DBF de 32 milhões vai se tranformar em 26 arquivos, cada um com 1/26 avos dos registros...


"Ah, mas a distribuição não é uniforme!...". Então que tal o seguinte: crie um arquivo ONDE.dbf, com os campos abaixo.

Código: Selecionar todos

INICIO    FIM      ARQUIVO         OBS
AA        BZ       EMAIL001.dbf    Emails de AA até BZ, inclusive
CA        FZ       EMAIL002.dbf    Emails de CA até F|, inclusive
etc.
Pra ver por exemplo se o endereço "eolo.ventura@gmail.com" já está cadastrado, é fácil: primeiro pesquise nos campos INICIO / FIM do arquivo ONDE, pra ver onde esse endereço deveria estar. Aí vc descobre que esse arquivo deveria ser por exemplo o EMAIL111.dbf. Abra então este arquivo (que vai ter digamos 1/100 avos dos 32 milhões) junto com o respectivo indice e faça o SEEK...

Sacou a idéia?

Cara, você tem SÓ 32 milhões de emails? Junte 320 milhões e quebre em arquivos pequenos. Não vai precisar de nenhum novo software. Só usar a imaginação.


Quanto ao CDX, é muito parecido com o NTX. Vai no próximo post.
Editado pela última vez por Eolo em 30 Jan 2008 18:34, em um total de 1 vez.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

O CDX é sim muito melhor que o NTX. Muito. E a mudança é mínima.

Código: Selecionar todos

* NTX
use clientes new exl
index on codigo to clientes1 
index on nome to clientes2
index on cidade to clientes3
set index to clientes1, clientes2, clientes3
set orde to 1 // por codigo
set orde to 2 // por nome
set orde to 3 // por cidade

* CDX
use clientes new excl
index on codigo tag codigo to clientes
index on nome tag nome to clientes
index on cidade tag cidade to clientes
set index to clientes
set orde to 1 // por codigo
set orde to 2 // por nome
set orde to 3 // por cidade
No início do seu programa, inclua as seguintes linhas:
REQUEST DBFCDX
RddSetDefault("DBFCDX")

O resto (se eu não esqueci de algum pequeno detalhe) é igual.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Imagina o seguinte:
. arquivo EMAIL_A.dbf -> endereços e-mail começando com A
. arquivo EMAIL_B.dbf -> idem com B
. etc.
Alex, complementando, pra ficar mais claro: se vc quer saber se o email "alex@hotmail.com" já está ou não cadastrado, vc vai abrir o arquivo EMAIL_A.dbf... Opa, agora vc quer saber do "zoroastro@hotmail.com"? Abra o EMAIL_Z.dbf...
Responder