Ferramentas de código-fonte aberto para ajudar no fluxo de mineração de pontuações no quadro de líderes

12

Considere um fluxo contendo tuplas (user, new_score) representando as pontuações dos usuários em um jogo online. O fluxo pode ter de 100 a 1.000 novos elementos por segundo. O jogo tem 200K a 300K jogadores únicos.

Eu gostaria de ter algumas consultas permanentes como:

  1. Quais jogadores postaram mais de x pontuações em uma janela deslizante de uma hora
  2. Quais jogadores obtiveram x% de pontuação em uma janela deslizante de uma hora

Minha pergunta é: quais ferramentas de código aberto posso empregar para iniciar este projeto? Estou pensando em Esper no momento.

Nota: Acabei de ler "Mining Data Streams" (capítulo 4 de Mineração de conjuntos de dados maciços ) e sou bastante novo na mineração de fluxos de dados.

Tahir Akhtar
fonte

Respostas:

8

Esta não é uma solução completa, mas você pode procurar no OrientDB como parte da sua pilha. O Orient é um servidor de banco de dados Graph-Document escrito inteiramente em Java.

Nos bancos de dados de gráficos, os relacionamentos são considerados cidadãos de primeira classe e, portanto, atravessar esses relacionamentos pode ser feito rapidamente. O Orient também é um banco de dados de documentos que permite o tipo de arquitetura sem esquema que parece que você precisaria. A verdadeira razão pela qual sugiro Orient, no entanto, é por causa de sua extensibilidade. Ele suporta streaming via soquetes, e todo o banco de dados pode ser incorporado a outro aplicativo. Finalmente, ele pode ser dimensionado com eficiência e / ou pode funcionar inteiramente através da memória. Portanto, com alguma experiência em Java, você pode realmente executar suas consultas predefinidas no banco de dados na memória.

Estamos fazendo algo semelhante. Ao criar um aplicativo / site para colaboração em pesquisa em ciências sociais, nos deparamos com modelos de dados imensamente complexos. Acabamos escrevendo várias consultas usando a Gremlin Traversal Language (um subconjunto do Groovy, que é, obviamente, o Java em seu coração) e, em seguida, expondo essas consultas através do servidor de conexão binária do OrientDB. Portanto, o cliente abre um soquete TCP, envia uma mensagem binária curta e a consulta está sendo executada em Java diretamente no banco de dados na memória.

O OrientDB também suporta a gravação de consultas de função em Javascript, e você pode usar o Node.js para interagir diretamente com uma instância do Orient.

Para algo desse tamanho, eu gostaria de usar o Orient em conjunto com o Hadoop ou algo assim. Você também pode usar o Orient em conjunto com o esper.

Considere: Uma introdução à orientação: http://www.sitepoint.com/a-look-at-orientdb-the-graph-document-nosql/

Consultas complexas em tempo real: http://www.gft-blog.com/business-trends/leveraging-real-time-scoring-through-bigdata-to-detect-insurance-fraud/

Uma discussão sobre opções de streaming com java e orient: https://github.com/orientechnologies/orientdb/issues/1227

Apollo
fonte
Obrigado pela sugestão. Eu olhei para o neo4j anteriormente, mas nunca para o orientdb. Atualmente eu não posso imaginar um monte de benefício em modelagem de dados leadeboard como gráfico, mas eu ainda vou olhar para streaming de opções em orientdb
Tahir Akhtar
4

Li recentemente um artigo muito bom que sugere o uso do Twitter storm para uma tarefa que se parece muito com a sua.

Konstantin V. Salikhov
fonte
Eu li alguns conceitos básicos sobre o Apache Storm, parece que ele está preocupado com problemas relacionados à escalabilidade / confiabilidade do processamento de fluxo, deixando você lidar com os algoritmos reais. Esper por outro dados do processo alça para você com base em suas consultas
Tahir Akhtar