2008/3/4 vinicius_marco <[EMAIL PROTECTED]>:
>
>
>
>
>
>
> Pessoal,
>
>  Estamos desenvolvendo um sítio que armazenará mais de meio milhão
>  de notícias já quando entrar em produção. Estes registros virão de uma
>  migração de uma base já existente.
>
>  Questões:
>
>  1. Zope/Plone agüenta o tranco?
>

Talvez.

Você já estimou o tamanho de seu ZODB? Você terá memória suficiente para ele?

Calculo: 500mil x 10 kb cada objeto = 4.7 GB

Agora, se você armazenar fotos associadas a noticias e seu objeto
subir para apenas 200 kb (uma foto JPEG em dois tamanhos mais o
conteúdo em si) dariam cerca de 95 GB. Como você precisa de 2x esse
tamanho em espaço em disco, precisarias de uns 190GB (fora espaço de
backup). Outra coisa interessante para prever é o consumo de memória
por instancia. Se você considerar que precisa de uns 10% do tamanho do
ZODB por instancia de Zope, precisarias de 500MB a 9,5GB de RAM por
instancia (e isso se sua aplicação for BEM otimizada).

Não sei se você percebeu, mas para um volume de informações como esse,
eu acho que vale a pena tomar cuidado e adotar soluções de SGDB
relacional e indexação externa (estilo XAPIAN)/Lucene).

>  2. Posso colocar todos os registros em uma única pasta (LargeFolder
>  - BtreeFolder)? Tenho que separar por algum critério (notícias de 2005
>  numa pasta chamada not_2005, not_2006, not_2007, por exemplo)? Sendo
>  que cada ano tem mais de 200.000 registros..

Poder você pode, mas quando for listar o conteúdo de uma pasta, o
resultado será um pouco exagerado. Talvez criar uma pasta por dia seja
mais adequado.

>
>  3. Instalamos o TextIndexNG3 por considerá-lo mais robusto que o
>  ZCTextIndex. Contudo estamos tendo problemas quando o usuário coloca
>  caracteres não convencionais no campo de busca. Ex.: 1. , (vírgula) 2.
>  Abertura de parenteses sem fechamento (parece que ele tenta
>  interpretar a consulta), etc. Vale à pena? Volto patra o ZCTextIndex?
>

Para um volume muito grande de informações eu sempre achei o TextIndexNG lento.

O seu problema com virgulas e parenteses é uma questão de
parametrização no splitter (da uma investigada no código :-).

>  4. A importação de cada registro da notícia que vem do banco SQL é
>  feita via um ExternalMethod que lê um arquivo texto do disco e insere
>  no ZODB via invokeFactory. Quando executamos a importação de um
>  arquivo com 3000 registros o comportamento é satisfatório até os
>  primeiros 100 registros (menos de um segundo por registro).. a partir
>  daí há uma degradação de performance muito grande, levando a inserção
>  durar mais de 3 segundos por registro. Existe algum macete para este
>  tipo de operação? Já tentamos realizar o commit a cada 50 registros
>  inseridos para aliviar o backlog do ZODB e tivemos um ganho rezoável.
>  Mas acima de 5000 registros por arquivo não vai nem com reza brava.
>

Talvez pq o ZODB começa a crescer e exigir um consumo de memória além
dos recursos disponíveis/desejáveis.

Durante a importação você chegou a monitorar a memória?

>  É isso aí pessoal.
>
>  Toda dica é bem vinda.
>
>  []'s
>
>  Marcov,
>
>  



-- 
Fabiano Weimar dos Santos (xiru)
Weimar Consultoria

Hospedagem Plone, Zope e Python
http://www.pytown.com

Responder a