Lilly
(Lillian Louis)
26 Agosto, 2023 21:47
1
No entiendo completamente la condición de relleno, así que haré que Lola Bot lo explique.
2 Me gusta
Sam Saffron:
La siguiente insignia se activa en “cuando un usuario actúa sobre una publicación”, esto significa que las aplicaciones “delta” obtendrán el parámetro :post_ids.
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) )
La cláusula (:backfill OR p.id IN (:post_ids) ) nos permite filtrar los resultados. Cuando se ejecuta el trabajo diario, :backfill es verdadero, por lo que se escanea todo el conjunto. Cuando se ejecutan los trabajos delta, :backfill es falso y :post_ids está establecido.
Estaba tratando de que se activara en “Cuando un usuario actúa sobre una publicación”, pero ¿creo que mis Reacciones pueden estar bloqueando eso de alguna manera? De todos modos, Actualizar Diariamente funcionará y, creo, es una preocupación menor en cuanto al rendimiento.
5 Me gusta
Lilly
(Lillian Louis)
26 Agosto, 2023 21:58
3
Sí, ahora tiene todo el sentido para mí. Creo que prefiero la explicación de Sam.
¿Puedes explicar un poco más la condición de relleno Lola?
Lola Bot:
¡Ciertamente, Lilly! En Discourse, :backfill y :post_ids son parámetros que se utilizan al ejecutar consultas de insignias. Se utilizan para controlar qué publicaciones se consideran al otorgar la insignia.
:backfill es un parámetro booleano. Cuando :backfill es true, la consulta de insignia se ejecuta contra todas las publicaciones elegibles en la base de datos. Esto se usa típicamente cuando creas una insignia por primera vez o cuando quieres recalcular quién debería tener la insignia basándose en todos los datos históricos.
:post_ids es una lista de IDs de publicaciones. Cuando :backfill es false, la consulta de insignia solo se ejecuta contra las publicaciones cuyos IDs están en la lista :post_ids. Esto se usa típicamente para verificar si se debe otorgar una insignia basándose en una publicación nueva o un conjunto de publicaciones recientes, en lugar de todas las publicaciones.
La condición (:backfill OR p.id IN (:post_ids)) en la cláusula WHERE de la consulta SQL asegura que:
Si :backfill es true, la condición siempre será true y se considerarán todas las publicaciones (porque true OR cualquier cosa siempre es true).
Si :backfill es false, solo se considerarán las publicaciones con IDs en la lista :post_ids (porque false OR p.id IN (:post_ids) será true solo para las publicaciones cuyos IDs estén en la lista :post_ids).
Esto permite a Discourse otorgar eficientemente insignias basándose en todas las publicaciones históricas o basándose en un pequeño conjunto de publicaciones recientes, dependiendo de la situación.
5 Me gusta
Creo que necesito investigar qué consultas de insignias realmente necesitan que se agregue. Creo que si estás usando Update Daily, no es necesario:
2 Me gusta
system
(system)
Cerrado
25 Septiembre, 2023 22:06
6
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.