2010-08-22 2 views
9

Tengo una aplicación donde la entidad principal es Story y los usuarios pueden votar por cada historia. Cada voto incrementa un vote_count para la historia.Cómo ordenar por un contador cuando se usan contadores de fragmentos

Me preocupa la contención de escritura en la historia, por lo que planeo usar un sharded counter para cada historia para rastrear los votos.

Ahora mi pregunta: ¿cómo podría obtener una lista de historias ordenadas por número de votos? Por ejemplo: muestre las 50 historias con más votos.

Mi idea inicial es realizar una tarea periódicamente que lea los valores del contador y actualice una propiedad en la historia real. Estaría bien que los resultados de la consulta por votación estuvieran un poco desactualizados.

Respuesta

2

Parece que puede estar haciendo un poco de optimización prematura. Me saltaría los contadores deshilachados hasta que sea obvio que los necesitas. Si estás bastante seguro de que lo harás, entonces, por supuesto, comienza con ellos. En cuanto a ejecutar una tarea periódica y el almacenamiento en caché da como resultado una propiedad para cada historia, esa puede ser otra optimización prematura.

No tengo experiencia directa con el motor de la aplicación de Google, así que espero que alguien que lo haga tenga algo de información para compartir.

+1

Re optimización prematura: estoy de acuerdo en que es probablemente demasiado para una aplicación nueva sin contención de escritura demostrada, pero considere esto como una pregunta de aprendizaje y suponga que la aplicación recibirá 10 escrituras/segundo en los contadores. – cope360

+0

Es una pregunta interesante. Nunca había escuchado hablar de contadores deshilachados antes, así que espero recibir más respuestas. –

+0

Agregué un enlace a la pregunta si desea ver cómo funcionan. – cope360

1

La adición periódica de datos puede ser una buena estrategia para contrarrestar la dispersión de dispersión de los contadores.

También puede probar otras estrategias para contar y sin fragmentos, como se ha descrito en otra parte:

http://blog.notdot.net/2010/04/High-concurrency-counters-without-sharding

(no a mantener su contador en Memcache y lavar periódicamente el valor acumulado para el almacén de datos)

¿Cuán importante es su aplicación para los pequeños errores de conteo?

Cuestiones relacionadas