以前、Riak を使用して、ActiveModel インターフェイスを公開する Ruby クライアント Ripple を使用して、同様のことを行いました。しかし、私はそれに対して本当にアドバイスする必要があります (他の人がそうしているように)。キー/値ストアの上に重い ORM を使用すると、その主な利点である速度が失われます。
現在、Ripple をスキップして、Riak と直接対話する方向に進んでおり、多くの速度を意識しています (Erlang に移行し、HTTP インターフェースではなく PBC を使用していますが、それは別の話です:D)。
オブジェクトには、JSON ドキュメントを Ripple 互換の形式で保存します。リップルをまだ使用しているため、この要件がありますが、リップルなしでこれをもう一度行う場合は、おそらくこの形式を使用するでしょう。
Riak リンクを使用してオブジェクトを結合し、ドキュメント自体に外部キーを保存しないでください。オブジェクトに保存できるリンクの数には制限があるので注意してください。あまり無理をしないでください (たとえば、ユーザー オブジェクトの各コメントへのリンクを保存するなど)。
Ripple (および Riak) はインデックスをサポートしていないため、独自のソリューションを展開する必要がありました。例として、ランダムに生成されたキー「fen2nf4j9fecd」を持つユーザー オブジェクトを「users」バケットに保存します。また、キー「tom」を持つオブジェクトを「users_index_by_username」バケットに保存し、「users」バケット内のオブジェクトへの Riak リンクを使用します。そうすれば、「tom」というユーザー名を持つユーザーを簡単に見つけることができます。
また、キー フィルタリングの使用を検討することもできます。まだ遊んでいませんが、パフォーマンスの数値は非常に良さそうです。バケットのキーを一覧表示しないように注意する必要があります。Riak はそのバケットのキーだけでなく、すべてのキーを検索します。
Riak はかなり野獣ですが、頭をつかめばきっと気に入っていただけるでしょう。複製が楽になり、「ただ動く」だけです。