Re: [zope-pt] Meio milhão de notícias

2008-03-05 Por tôpico Fabiano Weimar dos Santos
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


Re: [zope-pt] Meio milhão de notícias

2008-03-05 Por tôpico Jean Rodrigo Ferri
Fabiano Weimar dos Santos escreveu:
  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?

Eu ia dar a sugestão de transformar essas notícias em arquivos HTML e 
fazer a importação via WebDAV ou FTP.

Abraço,

-- 
Jean Ferri


[zope-pt] Meio milhão de notícias

2008-03-04 Por tôpico vinicius_marco
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? 

  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..

  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?

  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. 

É isso aí pessoal. 

Toda dica é bem vinda. 

[]'s 

Marcov,