5

バックエンドに分散キー/値ストアを使用して何かを実装する方法を評価中です。オブジェクト リレーショナル マッパーから取得するものと同様のオブジェクト モデルをサポートするキー/値の上にレイヤーを配置したいと考えています。

他の人がこれを行っている例を誰か教えてもらえますか? 私は主にデザインのアイデアを探していますが、気に入ったものに出くわしたら、自分で書く代わりにそれを使うかもしれません. おそらく、Riak の上に Perl で実装することになるでしょうが、それらの決定は最終的なものではありません。

4

2 に答える 2

4

以前、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 はかなり野獣ですが、頭をつかめばきっと気に入っていただけるでしょう。複製が楽になり、「ただ動く」だけです。

于 2011-04-14T10:12:34.003 に答える
1

このためのレイヤーは、たとえあったとしても、それほど多くは必要ありません。

これはピートのためのキー/値ストアです。言語に存在するシリアル化メカニズムを使用して、型付きオブジェクトとの間でバックエンドのオブジェクトに変換します。他に何をする必要がありますか?

一方の側でリレーショナル モデルを扱っているため、ORM ははるかに複雑です。キーバリューストアはそうではありません。

于 2011-04-11T19:17:45.280 に答える