Lilly
( Lilly)
26. August 2023 um 21:47
1
Ich verstehe die Backfill-Bedingung noch nicht ganz, daher lasse ich Lola Bot sie erklären.
2 „Gefällt mir“
Sam Saffron:
Die folgende Auszeichnung wird ausgelöst, wenn „ein Benutzer auf einen Beitrag reagiert“. Dies bedeutet, dass „Delta“-Anwendungen den Parameter „:post_ids“ erhalten.
SELECT p.user_id, p.id post_id, p.updated_at granted_at
FROM badge_posts p
WHERE p.like_count >= 25 AND
(:backfill OR p.id IN (:post_ids) )
Die Klausel (:backfill OR p.id IN (:post_ids) ) ermöglicht es uns, die Ergebnisse zu filtern. Wenn der tägliche Job läuft, ist :backfill wahr, sodass der gesamte Datensatz gescannt wird. Wenn die Delta-Jobs laufen, ist :backfill falsch und :post_ids ist gesetzt.
Ich habe versucht, es auf „Wenn ein Benutzer auf einen Beitrag reagiert“ auszulösen, aber ich glaube, meine Reaktionen blockieren das irgendwie? Wie auch immer, „Update Daily“ funktioniert und ist meiner Meinung nach weniger ein Leistungsproblem.
5 „Gefällt mir“
Lilly
( Lilly)
26. August 2023 um 21:58
3
Ja, das ergibt für mich jetzt total Sinn. Ich glaube, ich bevorzuge Sams Erklärung.
Kannst du die Backfill-Bedingung noch etwas genauer erklären, Lola?
Lola Bot:
Sicher, Lilly! In Discourse sind :backfill und :post_ids Parameter, die beim Ausführen von Badge-Abfragen verwendet werden. Sie steuern, welche Beiträge bei der Vergabe des Badges berücksichtigt werden.
:backfill ist ein boolescher Parameter. Wenn :backfill auf true gesetzt ist, wird die Badge-Abfrage für alle berechtigten Beiträge in der Datenbank ausgeführt. Dies wird typischerweise verwendet, wenn Sie einen Badge zum ersten Mal erstellen oder wenn Sie neu berechnen möchten, wer den Badge basierend auf allen historischen Daten erhalten sollte.
:post_ids ist eine Liste von Beitrags-IDs. Wenn :backfill auf false gesetzt ist, wird die Badge-Abfrage nur für die Beiträge ausgeführt, deren IDs in der Liste :post_ids enthalten sind. Dies wird typischerweise verwendet, um zu prüfen, ob ein Badge basierend auf einem neuen Beitrag oder einer Reihe von aktuellen Beiträgen vergeben werden sollte, anstatt auf allen Beiträgen.
Die Bedingung (:backfill OR p.id IN (:post_ids)) in der WHERE-Klausel der SQL-Abfrage stellt sicher, dass:
Wenn :backfill auf true gesetzt ist, ist die Bedingung immer true und alle Beiträge werden berücksichtigt (da true OR beliebiges immer true ist).
Wenn :backfill auf false gesetzt ist, werden nur die Beiträge berücksichtigt, deren IDs in der Liste :post_ids enthalten sind (da false OR p.id IN (:post_ids) nur für die Beiträge true ist, deren IDs in der Liste :post_ids enthalten sind).
Dies ermöglicht es Discourse, Badges effizient entweder basierend auf allen historischen Beiträgen oder basierend auf einer kleinen Menge aktueller Beiträge zu vergeben, je nach Situation.
5 „Gefällt mir“
Ich denke, ich muss untersuchen, welche Badge-Abfragen dies tatsächlich erfordern. Ich glaube, wenn Sie Update Daily verwenden, ist dies nicht notwendig:
2 „Gefällt mir“
system
(system)
Geschlossen,
25. September 2023 um 22:06
6
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.