Ya he tenido experiencias con MongoDB, CouchDB, Redis, Tokyo Cabinet y otras bases de datos NoSQL. Recientemente me encontré con Riak y me parece muy interesante. Para empezar, decidí escribir un pequeño clon de twitter, el "mundo de hola" en NoSQL World. Para obtener un clon completamente funcional, es necesario ordenar los tweets cronológicamente. Después de leer los documentos de Riak, descubrí que Map-Reduce es la herramienta adecuada para este trabajo. En mi entorno de desarrollo funciona bastante bien, pero ¿cómo está el rendimiento en producción, con cientos de consultas paralelas? ¿Existen otros métodos, quizás más rápidos, para clasificar datos, o es posible almacenar los datos en forma ordenada (como Cassandra)?¿Cómo ordenar/ordenar datos en Riak?
Actualización: Creo que he encontrado otra solución a este problema: una simple lista vinculada. Entonces, una posible implementación podría ser que cada usuario obtenga su propio "espacio de tiempo", donde los enlaces a los tweets-datos se almacenan (los tweets se almacenan por separado en el contenedor "tweets"). Como sabría, esta línea de tiempo-cubo debe contener una clave llamada "primero", que se vincula con el último objeto línea de tiempo y es el punto de partida de la lista. Para insertar un nuevo tweet en la línea de tiempo, simplemente inserte un nuevo elemento en el cubo de la línea de tiempo, establezca el "siguiente" enlace de este nuevo elemento al "primer" elemento, luego de eso, haga que el nuevo elemento sea "primero".
En resumen: insertar un elemento como lo haría en una lista enlazada ...
Como con twitter, la línea de tiempo personal, sólo tiene capacidad para 20 tuits que se muestran al usuario. Para recibir los últimos 20 tweets, solo hay 2 consultas necesarias. Para acelerar las cosas, la primera consulta utiliza la capacidad de enlace de Riak para obtener los últimos 20 objetos, etiquetados por "siguiente". Finalmente, la segunda y última consulta utiliza las claves calculadas por la primera consulta para recibir los tweets en sí (usando map/reduce).
Para eliminar los tweets de los usuarios que acaba de seguir, usaría la capacidad de índice secundaria de Riak 1.0 para recibir los objetos de línea de tiempo relacionados/tweets.
Desde Riak 1,4 clasificación y paginación está disponible con índices secundarios: http://basho.com/basho-announces-availability-of-riak-1-4/ – nacmartin