Outils opensource pour aider à extraire le flux de scores des classements

12

Considérez un flux contenant des tuples (user, new_score) représentant les scores des utilisateurs dans un jeu en ligne. Le flux pourrait contenir de 100 à 1 000 nouveaux éléments par seconde. Le jeu a 200K à 300K joueurs uniques.

J'aimerais avoir des requêtes permanentes comme:

  1. Quels joueurs ont affiché plus de x scores dans une fenêtre coulissante d'une heure
  2. Quels joueurs ont gagné x% de score dans une fenêtre coulissante d'une heure

Ma question est quels outils open source puis-je utiliser pour relancer ce projet? Je pense à Esper pour le moment.

Remarque: Je viens de terminer la lecture de "Mining Data Streams" (chapitre 4 de Mining of Massive Datasets ) et je suis tout à fait nouveau dans l'exploration de flux de données.

Tahir Akhtar
la source

Réponses:

8

Ce n'est pas une solution complète, mais vous voudrez peut-être examiner OrientDB dans le cadre de votre pile. Orient est un serveur de base de données Graph-Document écrit entièrement en Java.

Dans les bases de données graphiques, les relations sont considérées comme des citoyens de première classe et, par conséquent, la traversée de ces relations peut être effectuée assez rapidement. Orient est également une base de données de documents qui vous permettrait le type d'architecture sans schéma dont vous auriez besoin. La vraie raison pour laquelle je suggère Orient, cependant, est à cause de son extensibilité. Il prend en charge le streaming via des sockets et la base de données entière peut être intégrée dans une autre application. Enfin, il peut être mis à l'échelle efficacement et / ou peut fonctionner entièrement via la mémoire. Ainsi, avec une certaine expertise Java, vous pouvez réellement exécuter vos requêtes prédéfinies sur la base de données en mémoire.

Nous faisons quelque chose de similaire. En créant une application / un site pour la collaboration en recherche en sciences sociales, nous nous sommes retrouvés avec des modèles de données extrêmement complexes. Nous avons fini par écrire plusieurs des requêtes en utilisant le Gremlin Traversal Language (un sous-ensemble de Groovy, qui est, bien sûr, Java en son cœur), puis d'exposer ces requêtes via le serveur de connexion binaire de l'OrientDB. Ainsi, le client ouvre un socket TCP, envoie un court message binaire et la requête s'exécute en Java directement sur la base de données en mémoire.

OrientDB prend également en charge l'écriture de requêtes de fonction en Javascript, et vous pouvez utiliser Node.js pour interagir directement avec une instance Orient.

Pour quelque chose de cette taille, je voudrais utiliser Orient en conjonction avec Hadoop ou quelque chose comme ça. Vous pouvez également utiliser Orient en conjonction avec esper.

Considérez: Une introduction à l'orientation: http://www.sitepoint.com/a-look-at-orientdb-the-graph-document-nosql/

Requêtes complexes en temps réel: http://www.gft-blog.com/business-trends/leveraging-real-time-scoring-through-bigdata-to-detect-insurance-fraud/

Une discussion sur les options de streaming avec java et orient: https://github.com/orientechnologies/orientdb/issues/1227

Apollon
la source
Merci pour la suggestion. J'ai regardé neo4j plus tôt mais jamais orientdb. Actuellement, je ne peux pas imaginer beaucoup d'avantages dans la modélisation des données de leadeboard sous forme de graphique, mais je continuerai à regarder les options de streaming dans orientdb
Tahir Akhtar
4

J'ai lu récemment un très bon article qui suggère d'utiliser Twitter Storm pour une tâche qui ressemble assez à la vôtre.

Konstantin V. Salikhov
la source
J'ai lu quelques notions de base sur Apache Storm, il semble qu'il soit préoccupé par les problèmes liés à l'évolutivité / fiabilité du traitement de flux, vous laissant gérer les algorithmes réels. Esper sur les autres données de processus de traitement pour vous en fonction de vos requêtes
Tahir Akhtar