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
Li recentemente um artigo muito bom que sugere o uso do Twitter storm para uma tarefa que se parece muito com a sua.
fonte