Il mio suggerimento sarebbe di valutare i prodotti di chat con l’obiettivo di integrarli in modo fluido. Ephemera non appartiene a Discourse.
Dovrai fare molta attenzione qui. Forse è meglio avere un solo argomento ‘chat’ alla volta ed eliminare quelli vecchi con scrupolo, perché ogni megatopic che continua a esistere comporta una pesante penalità sulle prestazioni del server, e tale penalità aumenta con ogni singola visualizzazione della pagina.
È comunque meglio integrare uno strumento di chat vero e proprio, come descritto qui:
Concordo al 100% con questo. A volte aggiungono valore alla comunità, ma non nella misura da rendere necessarie modifiche al codice, a mio parere.
Potresti approfondire un po’ questo impatto sulle prestazioni? Si riferisce a discussioni chiuse e archiviate? Chiudere le discussioni a 10k messaggi va bene, ma eliminarle sarebbe un’altra cosa del tutto.
La mia comunità ama Discourse ed è basata sui forum da oltre 15 anni. Non useranno una chat e reagirebbero molto negativamente alla cancellazione delle discussioni vecchie. Se ci sarà un problema di prestazioni serio e crescente dovuto semplicemente all’esistenza di queste discussioni, dovrò oppure renderizzarle come pagine statiche o migrare su un’altra piattaforma.
So che la nostra comunità non si adatta bene a come immagini l’uso di Discourse, ma è la comunità di cui sono responsabile e ci sono cambiamenti che non posso imporre loro. In realtà, non siamo mai stati più forti come comunità di quanto non siamo ora usando Discourse. Mi dispiacerebbe dover passare a un’altra piattaforma quando tutti sono così contenti della nostra configurazione attuale.
I megatopici devono essere per lo più nascosti: anche se sono chiusi e/o archiviati, più utenti accedono a un megatopic, peggio si comporta il tuo server. Idealmente, i megatopici dovrebbero essere cancellati in modo da averne solo uno attivo alla volta? È il mio consiglio. Più megatopici hai, più rischi corri.
Se puoi investire molto denaro nel problema, potresti sovradimensionare massicciamente il tuo server e supportare più megatopici, ma ciò influenzerà comunque le prestazioni mediane per tutti gli argomenti.
Anche quando un argomento viene chiuso, genera dati, traffico e carico.
Ricorda che la posizione di lettura di ogni utente viene registrata per ogni argomento. Ogni post può essere messo “mi piace”, l’interazione con i megatemi è ancora possibile dopo la loro chiusura, per non parlare della quantità di rumore che può introdurre nei risultati della tua ricerca.
Ciò non spiega ancora perché i megatopici in particolare causino problemi. Perché un argomento di 10.000 post è peggiore di dieci argomenti da 1.000 post ciascuno? Con quest’ultimi c’è lo stesso numero totale di post potenzialmente likeabili o ricercabili, ma dieci volte più posizioni di lettura e argomenti da cercare. Basandomi solo sulla tua spiegazione, concluderei che un maggior numero di argomenti più piccoli sia peggio. Quindi deve esserci qualcosa di più.
Perché stai caricando un solo argomento alla volta. Puoi gestire 10 argomenti da 1.000 uno alla volta senza problemi, ma gestire 10.000 tutti insieme è molto più difficile.
Sono curioso riguardo ai dettagli specifici. Vengono caricati di default solo un certo numero di post prima di scorrere, quindi chiaramente non è dovuto al numero di post visibili. È dovuto alla timeline? Al riepilogo dell’argomento? In generale, a causa di vari algoritmi lineari o super-lineari basati sul numero totale di post nell’argomento?
Non mi interessano particolarmente i megatopic, a seconda di cosa si considera “mega”. Nella sezione che frequento di più nella community che uso, l’argomento con più post ha circa 3.600 post, ma il decimo in classifica ne ha solo 600. Il venticinquesimo in classifica ne ha solo 300. Al momento sono più curioso da un punto di vista tecnico.
Ecco una query per l’esploratore di dati che ho scritto per tentare di rispondere alla tua domanda. Puoi provarla con diversi argomenti e offset.
-- [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
Ecco un argomento di dimensioni normali e uno enormemente grande:
Tempo di esempio: 3,4 ms
-> Scansione dell'indice usando index_posts_on_topic_id_and_sort_order su posts (costo=0,43..1925,22 righe=477 larghezza=8)
tempo di esempio: 353,9 ms, 739,6 ms (il tempo varia a seconda della cache del database)
-> Scansione dell'indice usando index_posts_on_topic_id_and_sort_order su posts (costo=0,43..605155,88 righe=161255 larghezza=8)
Credo di aver visto tempi superiori a 750 ms.
Ecco i tempi mediani e al 99° percentile. Il tempo mediano è sorprendentemente buono, ma la natura della mediana è tale che non puoi capire se al 60° percentile la situazione sia molto, molto peggiore rispetto al caso mediano.
Ecco un altro server (ha un numero enorme di categorie, il che gli causa anch’esso un impatto sulle prestazioni, quindi non è un confronto equo senza megatopici), ma puoi vedere che le prestazioni mediane sono dimezzate e il caso peggiore è molto migliore:
Anch’io, solo per curiosità.
Capisco che navigare in un megatopic potrebbe comportare scarse prestazioni, come spiegato qui:
Tuttavia, non capisco come uno o più megatopic possano influenzare la navigazione in altre pagine del forum, ad esempio nella lista dei topic. ![]()
Aggiungendo un carico elevato al server. Ogni singolo megatopic carico equivale a una penalità delle prestazioni di 100 volte! Vedi il post direttamente sopra il tuo.
Ciao,
Il forum che sto attualmente importando su Discourse ha molti argomenti enormi:
(e i post non sono ancora stati tutti importati!)
Dato che gli argomenti enormi non funzionano bene con Discourse, cosa dovrei fare in pratica (intendo proporre in futuro una chat per la comunità, forse Discord, ma vorrei sapere cosa fare con gli argomenti attuali)?
Cancellarli?
Dividerli e chiuderli?
Se li divido, quanti messaggi per argomento? Il valore predefinito di 10000 è sufficiente o forse consigliate di ridurlo?
Dividere in 10.000 chunk dovrebbe essere più che sufficiente.
Inoltre, la maggior parte di questi sembra ok. La vera perdita inizia a 10k e la maggior parte di ciò che è mostrato nello screenshot è ben al di sotto dei 10k.
Quali sono le ultime novità sull’impatto delle prestazioni del mega topic? Il nostro argomento di follow-up sulla pandemia di COVID si avvicina alle 10.000 pubblicazioni e stiamo analizzando possibili rallentamenti recenti.
Non so quali dovrebbero essere le statistiche del server, ma posso condividere le nostre per una comunità con molti megatopic. Attualmente abbiamo 15 topic chiusi con 10k messaggi e oltre 50 aperti con più di 2k messaggi. La maggior parte dell’attività del forum si concentra in un numero relativamente ridotto di topic molto attivi in un dato momento.
Attualmente utilizziamo un server DigitalOcean con 4 CPU virtuali, 8 GB di memoria e 160 GB di disco, che costa 40 dollari al mese. Forse una volta ogni pochi mesi alcuni utenti ricevono per brevissimo tempo il messaggio “carico estremo”. Questo accade solo durante eventi in diretta quando molti utenti pubblicano contemporaneamente, ad esempio con una media di più messaggi al minuto in un singolo topic per un’ora o due.
In tutti gli altri momenti le prestazioni sono fluide e senza problemi. Siamo attualmente sulla strada per aver bisogno di più spazio su disco molto prima di dover aggiornare qualsiasi altra cosa.
È un numero accettabile, 2k post non sono un grosso problema; una mezza dozzina di topic da 10k+ dovrebbe andare bene (specialmente se sono chiusi). La zona di pericolo si presenta quando ci sono molti megatopic attivi. Definirei “molti” come più di una mezza dozzina.
Sebbene gli argomenti mega non siano generalmente un problema qui da Meta, sembrano essere un modo naturale per organizzare le discussioni per molte comunità. In altre parole, la discussione non ha un punto di rottura naturale.
Inderes è un’azienda finlandese che fornisce analisi finanziarie per il mercato azionario. Di recente hanno lanciato la propria comunità su Discourse, che è stata un enorme successo, considerando la regione e la nicchia.
Le discussioni sono organizzate principalmente per titolo azionario o strumento di investimento. Ad esempio, $AAPL o $TSLA. Ora, in soli due anni circa, molti di questi argomenti si stanno avvicinando al traguardo delle 10.000 voci. Una prova di concetto fantastica per Discourse (una comunità vivace costruita da zero), ma che mette anche in evidenza il problema degli argomenti mega.
Se non altro, puoi dividerla per anno. Questo è trattato nel primo messaggio. I megatopic possono funzionare per un po’, ma se ce ne sono troppi, alla fine faranno crollare il tuo sito.
(Inoltre, la ricerca diventa un incubo quando hai decine di migliaia di post nello stesso “topic”, ecc. – fondamentalmente hai costruito una chat room.)




