Minha sugestão é avaliar produtos de chat com o objetivo de integrá-los de forma perfeita.
O Ephemera não pertence ao Discourse.
Minha sugestão é avaliar produtos de chat com o objetivo de integrá-los de forma perfeita.
O Ephemera não pertence ao Discourse.
Você precisará ter muito cuidado aqui. Talvez seja melhor ter apenas um tópico de ‘chat’ por vez e excluir os antigos religiosamente, pois cada megatópico que continua existindo impõe uma penalidade de desempenho intensa ao servidor, e essa penalidade aumenta a cada visualização de página.
O ideal, no entanto, é integrar uma ferramenta de chat real, conforme
Concordo 100% com isso. Às vezes, eles agregam valor à comunidade, mas não na medida que justifique alterações no código, na minha opinião.
Você poderia explicar um pouco mais sobre essa penalidade de desempenho? Isso se aplica a tópicos fechados e arquivados? Fechar tópicos aos 10 mil está tudo bem, mas excluí-los seria algo completamente diferente.
Minha comunidade adora o Discourse e é baseada em fóruns há mais de 15 anos. Eles não vão usar uma sala de chat e reagiriam muito negativamente se tópicos antigos fossem excluídos. Se houver um problema de desempenho sério e crescente simplesmente pela existência desses tópicos, vou precisar ou renderizá-los como páginas estáticas ou migrar para outra plataforma.
Sei que nossa comunidade não se encaixa bem na forma como vocês imaginam o uso do Discourse, mas essa é a comunidade da qual sou responsável, e há algumas mudanças que não posso forçá-los a fazer. Na verdade, nunca estivemos tão fortes como comunidade quanto estamos agora usando o Discourse. Eu odiaria ter que mudar para outra plataforma quando todos estão tão satisfeitos com nossa configuração atual.
Megatópicos precisam estar majoritariamente ocultos — mesmo que estejam fechados e/ou arquivados, quanto mais usuários acessarem um megatópico, pior será o desempenho do seu servidor. Idealmente, os megatópicos deveriam ser excluídos, de modo que você tenha apenas um ativo por vez? Essa é a minha recomendação. Quanto mais megatópicos você tiver, maior o risco que corre.
Se você puder investir bastante dinheiro no problema, poderia superdimensionar massivamente seu servidor e suportar mais megatópicos — mas isso ainda impactará o desempenho mediano de todos os tópicos.
Mesmo quando um tópico é fechado, ele gera dados, tráfego e carga.
Lembre-se de que a posição de leitura de cada usuário é registrada para cada tópico. Cada postagem pode ser curtida, a interação com megatópicos ainda é possível após serem fechados, sem mencionar a quantidade de ruído que isso pode introduzir nos seus resultados de pesquisa.
Isso ainda não explica por que, em particular, os megatópicos causam problemas. Por que um tópico com 10.000 postagens é pior do que dez tópicos com 1.000 postagens cada? Com estes últimos, há o mesmo número total de postagens que podem ser potencialmente curtidas ou pesquisadas, mas dez vezes mais posições de leitura e tópicos para serem pesquisados. Com base apenas na sua explicação, eu concluiria que um maior número de tópicos menores é pior. Então, deve haver mais a considerar.
Porque você está carregando apenas um tópico por vez. Você pode pegar 10 tópicos de 1.000 um de cada vez sem problemas, mas pegar 10.000 de uma vez é muito mais difícil.
Tenho curiosidade sobre os detalhes, no entanto. Apenas um certo número de postagens é carregado por padrão, antes que você role a página, então claramente não se deve ao número de postagens visíveis. Será por causa da linha do tempo? Por causa do resumo do tópico? Ou, de modo geral, por causa de vários algoritmos lineares ou superiores a lineares baseados no número total de postagens no tópico?
Não me importo muito com megatópicos, dependendo do que você considera “mega”. Na seção que mais frequento na comunidade que utilizo, o tópico com mais postagens tem cerca de 3,6 mil, mas o 10º mais alto tem apenas 600. O 25º mais alto tem apenas 300 postagens. Neste momento, estou mais curioso sob uma perspectiva técnica.
Aqui está uma consulta do Explorador de Dados que escrevi para tentar responder à sua pergunta. Você pode testá-la com diferentes tópicos e offsets.
-- [params]
-- int :topic_id = 107216
-- int :offset = 10000
SELECT "posts"."id" FROM "posts"
WHERE ("posts"."deleted_at" IS NULL)
AND "posts"."topic_id" = :topic_id
AND "posts"."post_type" IN (1,2,3) ORDER BY "posts"."sort_order" ASC LIMIT 20
OFFSET :offset
Aqui temos um tópico de tamanho normal e um tópico absurdamente grande:
Exemplo de tempo: 3,4ms
-> Index Scan usando index_posts_on_topic_id_and_sort_order em posts (cost=0.43..1925.22 rows=477 width=8)
tempo de exemplo: 353,9ms, 739,6 ms (o tempo varia dependendo do cache do banco de dados)
-> Index Scan usando index_posts_on_topic_id_and_sort_order em posts (cost=0.43..605155.88 rows=161255 width=8)
Acredito ter visto tempos superiores a 750ms.
Aqui estão os tempos da mediana e do percentil 99. O tempo mediano é surpreendentemente bom, mas a natureza da mediana é que você não pode dizer se, no percentil 60%, o desempenho é muito, muito pior do que no caso mediano.
Aqui está outro servidor (ele tem um número absurdo de categorias, o que também causa um impacto no desempenho, então não é uma comparação justa sem megatópicos), mas você pode ver que o desempenho mediano é metade e o pior caso também é muito melhor:
Eu também, apenas por curiosidade.
Entendo que navegar em um megatópico pode ter desempenho ruim, conforme esta explicação:
No entanto, não entendo como um ou vários megatópicos podem impactar a navegação em outras páginas do fórum, até mesmo na lista de tópicos, por exemplo. ![]()
Ao adicionar muita carga ao servidor. Cada megatópico carregado equivale a uma penalidade de desempenho 100 vezes maior! Veja a postagem logo acima da sua.
Olá,
O fórum que estou atualmente importando para o Discourse tem muitos tópicos gigantes:
Como os tópicos gigantes não funcionam bem no Discourse, o que devo fazer na prática (pretendo sugerir um chat no futuro para a comunidade, talvez o Discord, mas quero saber o que fazer com os tópicos atuais)?
Deletá-los?
Dividi-los e fechá-los?
Se eu os dividir, quantas mensagens por tópico? O valor padrão de 10000 é suficiente ou você recomenda diminuí-lo?
Dividir em 10 mil trechos deve ser suficiente.
Além disso, a maioria desses parece OK. O verdadeiro sangramento começa em 10 mil e a maior parte do que é mostrado na captura de tela é bem menos que 10 mil.
Qual é a última atualização sobre o impacto de desempenho do mega tópico? Nosso tópico de acompanhamento da pandemia de COVID está se aproximando de 10 mil posts e estamos analisando possíveis lentidões recentes.
Não sei quais devem ser as estatísticas do servidor, mas posso compartilhar as nossas para uma comunidade com muitos megatópicos. Atualmente, temos 15 tópicos fechados com 10 mil posts e mais de 50 abertos com mais de 2 mil posts. A maior parte da atividade do fórum ocorre em um número relativamente pequeno de tópicos muito ativos a qualquer momento.
Atualmente, operamos em um servidor DigitalOcean com 4 CPUs virtuais, 8 GB de memória e 160 GB de disco, o que custa US$ 40/mês. Talvez uma vez a cada poucos meses, alguns usuários recebam brevemente a mensagem de “carga extrema”. Isso só acontece quando há algum evento ao vivo ocorrendo e muitos usuários estão postando ao mesmo tempo — como uma média de várias postagens por minuto em um único tópico ao longo de uma ou duas horas.
Em todos os outros momentos, o desempenho é tranquilo e sem problemas. Estamos no caminho certo para precisar de mais espaço em disco muito antes de precisar atualizar qualquer outra coisa.
Esse é um número razoável, 2 mil posts não é grande coisa, algumas dezenas de tópicos com mais de 10 mil posts provavelmente estão bem (especialmente se estiverem fechados), a zona de perigo é quando você tem muitos megatópicos que estão ativos. Eu definiria “muitos” como mais de algumas dezenas.
Embora os tópicos mega geralmente não sejam um problema aqui na Meta, eles parecem ser uma maneira natural de organizar discussões para muitas comunidades. Em outras palavras, a discussão não tem um ponto de interrupção natural.
A Inderes é uma empresa finlandesa que fornece análise financeira para o mercado de ações. Eles lançaram recentemente sua comunidade no Discourse e tem sido um sucesso massivo, considerando a região e o nicho.
A discussão é organizada principalmente por ação ou veículo de investimento. Por exemplo, $AAPL ou $TSLA. Agora, em apenas dois anos ou mais, muitos desses tópicos estão se aproximando da marca de 10 mil. Uma prova de conceito fantástica para o Discourse (uma comunidade vibrante, construída do zero), mas que também destaca o problema dos tópicos mega.
Se nada mais, você pode dividi-la por ano. Isso é abordado no primeiro post. Megatópicos podem funcionar por um tempo, mas se houver muitos deles, eventualmente farão seu site cair.
(Além disso, a busca se torna um pesadelo quando você tem dezenas de milhares de posts no mesmo “tópico”, etc — basicamente, você construiu um chat.)