¿Cuál es la forma más eficiente de implementar un sistema de publicación favorito?

4

Voy a implementar un sistema de publicaciones favoritas para que los usuarios puedan guardar sus publicaciones favoritas para leerlas más tarde.

Quiero saber cuál es el mejor enfoque para hacerlo teniendo en cuenta la posibilidad de que cientos de miles de usuarios utilicen esta función. Los usuarios podrán ver sus publicaciones favoritas en una página personalizada que lo harán.

He pensado en 3 formas diferentes posibles, quiero saber cuál sería la mejor en cuanto a rendimiento.

1.- Guardar todos los identificadores de usuario como una matriz en un postmeta llamado favoritos.

2.- Crear un tipo de publicación personalizado llamado favoritos.

3.- Creando una nueva tabla de base de datos 'wp_favorites' que almacena la ID de publicación, la ID de usuario y la fecha de la relación creada.

Entonces, ¿cuál de esos tres sería el mejor (como dije, en cuanto a rendimiento)? Y, ¿cuáles serían los pros y los contras de cada uno si alguno? Si hay una mejor manera, hágamelo saber.

    
pregunta Gixty 02.01.2015 - 00:33

3 respuestas

1

Usa una tabla personalizada. Créelo como una tabla de red y almacene el ID del sitio, de modo que pueda usar solo una tabla para toda la red.

row_id | site_id | post_id | user_id

No hay equivalente para una tabla de este tipo en las tablas centrales actuales. Evite los datos serializados, ya que ese formato es específico de PHP, por lo que no puede leer sus datos en ningún otro idioma (incluido SQL), y ordenar o buscar cualquier valor es simplemente incómodo.

Debes hacer un seguimiento de los sitios, usuarios y publicaciones ahora para eliminar las entradas coincidentes cada vez que se elimine uno de estos objetos.

    
respondido por el fuxia 02.01.2015 - 05:36
0

ACTUALIZACIÓN: No vi la parte en su pregunta acerca de que los usuarios pueden ver una página de los favoritos. En base a eso y al comentario de Stephens, creo que uso update_user_meta () y get_user_meta () y almacenar ID de publicación sería una mejor opción. De esa manera, sería más fácil ordenar y obtener los totales con un WP_User_Query

RESPUESTA ORIGINAL: Guarde los ID de usuario como una matriz en la tabla postmeta. update_post_meta() y get_post_meta() incluso manejará la serialización / deserialización de la matriz por usted.

El rendimiento no debería ser siempre su factor decisivo al encontrar una solución a un problema de programación. El rendimiento es importante, pero también lo es el código mantenible, legible y escalable. Si recorres la ruta de la tabla de la base de datos dedicada para obtener ligeras mejoras de rendimiento, tendrás que gestionar la creación de la tabla, así como todas las consultas de inserción y recuperación de datos personalizados

Creando un nuevo tipo de mensaje personalizado para almacenar metadatos de una publicación de un tipo de publicación diferente no tiene sentido y viene con la sobrecarga adicional de un nuevo objeto de publicación para una parte de datos en otro objeto de publicación.

Debería ser realista cuando piense en los números involucrados aquí, si está seguro de que cientos de miles de usuarios van a usar esta función, todas en favor de las mismas publicaciones, entonces tal vez una tabla de base de datos dedicada sea su mejor opción, pero creo que bastante improbable por lo que sugerí usar postmeta

    
respondido por el Andy 02.01.2015 - 01:00
0

El plugin User Bookmarks (descontinuado ahora) por Pippin's Plugins hizo una combinación: * Almacenar las publicaciones "favoritas" en meta de usuario como datos serializados. * almacenar el recuento total de favoritos en el metadatos de la entrada como un entero

Esto le permite ordenar por conteo de favoritos que es útil. Solo tienes que cambiar el recuento cuando las personas agreguen / eliminen marcadores.

Si sigues la ruta "crea tu propia tabla", te recomendaría usar Pods, ya que te ofrecen una buena API para trabajar con tablas personalizadas dentro de WordPress.

    
respondido por el Emma Arbogast 01.05.2015 - 11:03

Lea otras preguntas en las etiquetas