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