Anteriormente utilizamos Riak para hacer algo similar, utilizando el Ripple de cliente de Ruby que expone una interfaz AciveModel. Sin embargo, realmente tengo que desaconsejarlo (como lo han hecho otros). Usando un ORM pesado encima de un almacén de claves/valores, realmente se pierde su principal ventaja, que es la velocidad.
Ahora nos estamos moviendo hacia saltar Ripple y hablar directamente con Riak para un montón de cosas conscientes de la velocidad (también nos estamos moviendo a Erlang y usando PBC en lugar de interfaz HTTP, pero esa es otra historia: D), así es cómo lo hacemos:
En nuestros objetos almacenamos un documento JSON, en un formato compatible con Ripple. Aunque tenemos un requisito de esto ya que aún usamos Ripple para algunas cosas, si tuviera que hacer esto de nuevo sin Ripple, probablemente usaría este formato.
Utilice los enlaces de Riak para unir objetos, no almacene claves externas en el documento. Tenga en cuenta que existe un límite en la cantidad de enlaces que puede almacenar en un objeto, así que no se vuelva loco con ellos (por ejemplo, guardando un enlace para cada comentario sobre el objeto del usuario).
Ripple (y Riak) no es compatible con los índices, por lo que tuvimos que rodar nuestra propia solución. Como ejemplo, almacenamos un objeto de usuario con una clave generada aleatoriamente, 'fen2nf4j9fecd' en el cubo 'usuarios'. También almacenamos un objeto con la clave 'tom' en el depósito 'users_index_by_username' con un enlace de Riak al objeto en el 'cubo de usuarios'. De esta forma, podemos encontrar fácilmente qué usuario tiene el nombre de usuario 'tom'.
También puede que desee ver en el uso de key filtering. Todavía no jugué con eso, sin embargo, he visto cifras de rendimiento que se ven bastante bien. Debe tener cuidado con Riak para no enumerar las claves de un depósito ya que debido a la forma en que se implementa, Riak busca todas las claves, no solo las claves de ese cubo.
Riak es una gran bestia, sin embargo, una vez que lo entiendas, te encantará. Hace la replicación sin esfuerzo, y 'solo funciona'.
En mi investigación, me he dado cuenta de muchas de las mismas cosas. Estoy al tanto de Riak Search, pero es un poco demasiado beta para mí. No estaba * consciente * de un límite en la cantidad de enlaces, es decir, buena información. Llegué a la misma conclusión acerca de rodar nuestros propios índices. Todavía estoy tratando de descubrir cómo evitar posibles condiciones de carrera. – btilly
Creo que el límite en el número de enlaces solo ocurre si se usa la interfaz HTTP, ya que hay un límite en el tamaño total de los encabezados. No soy 100% sin embargo. También mencioné el producto incorrecto, me refería al filtrado de claves, no a la búsqueda de riak (editada). –