Realmente depende de sus conjuntos de datos. La regla número uno para el diseño NoSQL es definir primero sus escenarios de consulta. Una vez que realmente comprenda cómo desea consultar los datos, entonces puede buscar en las diversas soluciones NoSQL que existen. La unidad de distribución predeterminada es la clave. Por lo tanto, debe recordar que necesita poder dividir sus datos entre las máquinas de su nodo de manera efectiva, de lo contrario terminará con un sistema escalable horizontalmente con todo el trabajo que todavía se está haciendo en un nodo (aunque con mejores consultas según el caso).
También debe pensar en el teorema CAP, la mayoría de las bases de datos NoSQL son finalmente consistentes (CP o AP) mientras que los DBMS relacionales tradicionales son CA. Esto afectará la forma en que manejas los datos y la creación de ciertas cosas, por ejemplo, la generación de claves puede ser engañosa.
Recuerde también que, en algunos sistemas como HBase, no existe un concepto de indexación. La lógica de la aplicación deberá generar todos sus índices y las actualizaciones y eliminaciones deberán administrarse como tales. Con Mongo puedes crear índices en los campos y consultarlos de manera relativamente rápida, también existe la posibilidad de integrar Solr con Mongo. No solo necesita consultar por ID en Mongo como lo hace en HBase, que es una familia de columnas (también conocida como la base de datos de estilo Google BigTable) en la que esencialmente tiene pares clave-valor anidados.
Así que una vez más se trata de sus datos, lo que desea almacenar, cómo va a almacenarlo y, lo más importante, cómo quiere acceder a él. El proyecto de Lily parece muy prometedor. El trabajo en el que estoy involucrado nos lleva una gran cantidad de datos de la web y lo almacenamos, lo analizamos, lo desglosamos, lo analizamos, lo transmitimos, lo actualizamos, etc. No usamos solo un sistema, sino muchos que son los más adecuados para el trabajo en cuestión. Para este proceso, utilizamos diferentes sistemas en diferentes etapas, ya que nos brinda un acceso rápido donde lo necesitamos, brinda la capacidad de transmitir y analizar datos en tiempo real y, lo que es más importante, realiza un seguimiento de todo a medida que avanzamos (como pérdida de datos en un el sistema es un gran problema). Estoy usando Hadoop, HBase, Hive, MongoDB, Solr, MySQL e incluso buenos archivos de texto antiguos. Recuerde que para producir un sistema que use estas tecnologías es un poco más difícil que instalar MySQL en un servidor, algunas versiones no son tan estables y realmente necesita hacer las pruebas primero. Al final del día, realmente depende del nivel de resistencia del negocio y de la naturaleza de misión crítica de su sistema.
Otra ruta que nadie hasta ahora ha mencionado es NewSQL, es decir, RDBMS escalables horizontalmente ... Hay algunos como el clúster MySQL (creo) y VoltDB que pueden adaptarse a su causa.
De nuevo se trata de comprender sus datos y los patrones de acceso, los sistemas NoSQL también son no rel, es decir, no relacionales y están ahí para adaptarse mejor a los conjuntos de datos no relacionales. Si sus datos son intrínsecamente relacionales y necesita algunas características de consulta SQL que realmente necesiten hacer cosas como productos cartesianos (alias uniones), entonces es mejor que se quede con Oracle e invierta algún tiempo en la indexación, fragmentación y ajuste del rendimiento.
Mi consejo sería jugar con algunos sistemas diferentes.Sin embargo, para su caso de uso creo que una base de datos de Column Family puede ser la mejor, creo que hay algunos lugares que han implementado soluciones similares a problemas muy similares (creo que NYTimes usa HBase para monitorear los clics de la página de usuario). Otro gran ejemplo es Facebook y me gusta, están usando HBase para esto. Aquí hay un artículo realmente bueno que puede ayudarlo a lo largo de su camino y explicar algunos puntos más arriba. http://highscalability.com/blog/2011/3/22/facebooks-new-realtime-analytics-system-hbase-to-process-20.html
El punto final sería que los sistemas NoSQL no son el todo y el final. Poner sus datos en una base de datos NoSQL no significa que vaya a funcionar mejor que MySQL, Oracle o incluso archivos de texto ... Por ejemplo, vea esta publicación en el blog: http://mysqldba.blogspot.com/2010/03/cassandra-is-my-nosql-solution-but.html
Me gustaría echarle un vistazo;
MongoDB - Documento - CP
CouchDB - Documento - AP
Redis - En memoria de la llave-valor (familia no columna) - CP
Cassandra - Familia de columnas: disponible & Tolerante a la partición (AP)
HBase - Columna Familia - Consistente & partición Tolerante (CP)
Hadoop/colmena - También echar un vistazo a Hadoop en streaming ...
Hypertable - Otra CF CP DB.
VoltDB - Un producto de aspecto muy bueno, una base de datos relación que se distribuye y se podría trabajar para su caso (puede ser una mudanza más fácil). También parecen proporcionar soporte empresarial que puede ser más adecuado para un entorno de producción (es decir, dar a los usuarios de negocios una sensación de seguridad).
De cualquier forma esa es mi 2c. Jugar con los sistemas es realmente la única forma en que vas a descubrir lo que realmente funciona para tu caso.
¿Cómo son sus datos? – NightWolf
1.) ¿Existen varios cientos de registros por usuario, o cada usuario tiene solo unos pocos? 2.) ¿La mayoría de las consultas contienen una condición user_id? 3.) ¿Las estadísticas en todo el conjunto de datos son de tiempo crítico? (probablemente nada que el usuario vea) 4.) ¿Necesita que el conjunto de resultados sea ordenado (por ejemplo, alfabéticamente por país)? De cualquier manera, deberías probar el próximo [ArangoDB v2.6] (http://arangodb.org/). – CoDEmanX