Herramientas de código abierto para obtener ayuda en el flujo de minería de puntajes de la tabla de líderes

12

Considere una secuencia que contiene tuplas que (user, new_score) representan las puntuaciones de los usuarios en un juego en línea. La transmisión podría tener 100-1,000 elementos nuevos por segundo. El juego tiene 200K a 300K jugadores únicos.

Me gustaría tener algunas consultas permanentes como:

  1. Qué jugadores publicaron más de x puntajes en una ventana deslizante de una hora
  2. Qué jugadores obtuvieron un puntaje de x% en una ventana deslizante de una hora

Mi pregunta es qué herramientas de código abierto puedo emplear para impulsar este proyecto. Estoy considerando a Esper en este momento.

Nota: Acabo de leer "Flujos de datos mineros" (capítulo 4 de Minería de conjuntos de datos masivos ) y soy bastante nuevo en minería de flujos de datos.

Tahir Akhtar
fuente

Respuestas:

8

Esta no es una solución completa, pero es posible que desee considerar OrientDB como parte de su pila. Orient es un servidor de base de datos Graph-Document escrito completamente en Java.

En las bases de datos de gráficos, las relaciones se consideran ciudadanos de primera clase y, por lo tanto, atravesar esas relaciones se puede hacer con bastante rapidez. Orient es también una base de datos de documentos que le permitiría el tipo de arquitectura libre de esquemas que parece que necesitaría. Sin embargo, la verdadera razón por la que sugiero Oriente es por su extensibilidad. Admite la transmisión a través de sockets, y toda la base de datos puede integrarse en otra aplicación. Finalmente, se puede escalar de manera eficiente y / o puede funcionar completamente a través de la memoria. Entonces, con algo de experiencia en Java, puede ejecutar sus consultas preestablecidas en la base de datos en la memoria.

Estamos haciendo algo similar Al crear una aplicación / sitio para la colaboración de investigación en ciencias sociales, nos encontramos con modelos de datos inmensamente complejos. Terminamos escribiendo varias de las consultas utilizando el lenguaje transversal de Gremlin (un subconjunto de Groovy, que es, por supuesto, Java en su corazón), y luego exponiendo esas consultas a través del servidor de conexión binario de OrientDB. Entonces, el cliente abre un socket TCP, envía un mensaje binario corto y la consulta se ejecuta en Java directamente contra la base de datos en memoria.

OrientDB también admite la escritura de consultas de función en Javascript, y puede usar Node.js para interactuar directamente con una instancia de Orient.

Para algo de este tamaño, me gustaría usar Orient junto con Hadoop o algo así. También puedes usar Orient junto con esper.

Considere: Una introducción a Oriente: http://www.sitepoint.com/a-look-at-orientdb-the-graph-document-nosql/

Consultas complejas en tiempo real: http://www.gft-blog.com/business-trends/leveraging-real-time-scoring-through-bigdata-to-detect-insurance-fraud/

Una discusión sobre las opciones de transmisión con Java y Oriente: https://github.com/orientechnologies/orientdb/issues/1227

Apolo
fuente
Gracias por la sugerencia. He visto neo4j antes, pero nunca orientdb. Actualmente no puedo imaginar un gran beneficio en el modelado de datos de tablas de clasificación como gráfico, pero aún veré las opciones de transmisión en orientdb
Tahir Akhtar
4

Recientemente leí un artículo muy bueno que sugiere usar Twitter storm para una tarea que se parece bastante a la tuya.

Konstantin V. Salikhov
fuente
He leído algunos conceptos básicos sobre Apache Storm, parece que le preocupan los problemas relacionados con la escalabilidad / confiabilidad del procesamiento de flujo, lo que le permite manejar los algoritmos reales. Esper en el otro manejo de datos de proceso para usted en función de sus consultas
Tahir Akhtar