Poderia talvez gerar um registro de pendência para este procedimento. Ao invés de gerar vários inserts geraria apenas um. Depois algum job do cron poderia varrer esta tabela de pendências e gerar os registros no intervalo de tempo aceitável.

Att.
Alex


Wagner Bonfiglio escreveu:
Bom, tentando explicar um pouco o motivo de tanta inserção:

como o Alexandre falou, sobre a previsão de crescimento.. A idéia
desde o começo foi crescer muito mais que estamos atualmente, mas não
foi pensado na consequencia que teriamos nesse banco de dados.

Na verdade não fui eu que modelei, mas já passamos por alguns
problemas e algumas coisas já foram melhoradas porque começou a dar
problema em certo ponto.
Atualmente o problema que surgiu agora, com mais de 1000 usuarios e
11000 filmes é essa inserção na hora do cadastro.

Quanto a esta inserção, que eu concordo que está errada pois quanto
mais cresce o número de filmes e/ou usuários esse problema vai
aumentar ainda mais, era algo necessário na idéia inicial devido a um
cálculo, como eu falei. O que acontece? Cada usuário tem um certo
nível de similariedade com cada outro usuário. Isso é calculado a cada
nota que um usuário dá. Além disso, a cada X notas, as notas sugeridas
pra os filmes que você não assistiu também é calculada.
Para evitar que esses INSERTS sejam feitos na hora do cálculo, fazemos
tudo na hora do cadastro. Há algum tempo isso não era problema,
demorava menos de 1 minuto, mas agora está começando a virar
problema...

Bom, agora acho que dá pra entender melhor o caso e porque da opção dos
INSERTS na hora do cadastro. Faltou uma visão de problemas que isto
ocasionariam no futuro.

Mas enfim, estamos trabalhando em mudar isso já, mas faltam algumas
idéias de quais as melhores opções e quais idéias só vão resolver
momentaneamente e teremos mais prolemas no futuro.

Agradeço as respostas até agora e qualquer outra sugestão/crítica/etc
será muito bem-vinda!

Grato,
    Wagner Bonfiglio

2008/7/8 Shander Lyrio <[EMAIL PROTECTED]>:
Wagner Bonfiglio escreveu:

Eu tenho um site sobre filmes, que também é uma reede social. Temos
atualmente cerca de 1000 usuários e 11000 filmes.
 >
A modelagem, devido a alguns cálculos que são feitos, acabou definindo
que cada usuário tenha uma entrada em uma tabela relacionando cada um
dos outros usuários, além de uma entrada em outra tabela que relaciona
cada usuário com cada filme.

Ou seja, quando um usuário é criado, eu tenho que inserir 1000
entradas na tabela q liga usuarios com usuarios, e 11000 entradas na
tabela que relaciona filmes com usuarios.
       Afe Deus, quais cálculos levaram vocês a uma modelagem destas??

Isso é feito através de uma função em plpgsql disparada por uma
trigger no insert da tabela de usuarios.
       Nuss.

O problema pro usuário é ter que esperar esses 12000 inserts
acontecerem (atualmante esta demorando 2min, mas a tendencia é
continuar crescendo tanto em usuarios como em filmes) durante o
cadastro.

Já não sei mais o que fazer para melhorar isso, pois tem muitos
usuários que não esperam os inserts e fecham a página no meio,
causando diversos erros na hora de tentar logar no site...
       Que tal refazer a modelagem. Esta forma de fazer está claramente
equivocada.

Minhas dúvidas são:
 - essa prática de inserir todas essas entradas na hora do cadastro é
errado ou não tem problema?
       É errado, melhor dizendo, não recompendávelem  pelo menos 99,99999% dos
casos.

 - a demora é porque o servidor está muito lento (ou seja, esses 12000
inserts deveriam ser mais rapidos)??
       A demora é porque a forma de fazer está equivocada. Para que ou porque
isso tudo?? Poderia explicar melhor para tentarmos ajudar mais
efetivamente??

 - você chegou aqui entendendo o que eu quis dizer? hahaha não sei se
fui muito claro no problema, mas uma coisa interessante de citar é que
essas entradas entre todos os clientes e entre os clientes e todos os
filmes é importante pois o site calcula notas sugeridas para cada
usuário, dependendo dos votos deles e da semelhança dos votos com
outros usuários.
       Existem formas muito mais simples de se fazer estes cálculos, caso
contrário o orkut teria um lag de horas ao se cadastrar um novo usuário.
Vocês precisam repensar esta forma, ou contratar uma consultoria para
fazê-lo. Mas nada poderá ser feito se vocês não tiverem a clara idéia de
que isto precisa ser mudado.

Bom, se precisarem de mais detalhes sobre o caso eu posso comentar
mais aqui (não sei se tem problema em passar o site, então achei
melhor nem colocar o link). Mas espero que possam me ajudar de
qualquer forma, qualquer toque será bem vindo!
       Veja, seu problema não é o PostGreSql, é modelagem. A forma de fazer
não está legal e precisa ser repensada. Acredito que um DBA na equipe
pudesse auxiliar mais efetivamente.

--
Shander Lyrio
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a