Página 2 de 2

Enviado: 25 Jan 2008 18:20
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.

Enviado: 25 Jan 2008 18:23
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.

Enviado: 25 Jan 2008 20:29
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.

Enviado: 26 Jan 2008 09:28
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?

Enviado: 30 Jan 2008 17:06
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?

Enviado: 30 Jan 2008 17:22
por Maligno
32 milhões de eMails??? hummmm... :[

Enviado: 30 Jan 2008 18:24
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.

Enviado: 30 Jan 2008 18:33
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.

Enviado: 30 Jan 2008 18:59
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...