2

http://www.infoq.com/presentations/newport-evolving-key-value-programming-modelは KV ストアに関するビデオであり、redisがオブジェクトの属性を格納するための列ベースのスタイルを促進するという前提が全体にあります。オブジェクトをシリアル化して単一のキーの下に格納するのではなく、個別のキーの下で。

(この質問はredis 固有のものではありませんが、一般的な KV ストアの一般的なスタイルとベスト プラクティスです。)

たとえば「人」のブロブの代わりに、redis は、オブジェクトの属性が別のキーとして格納される列ベースのスタイルを推奨します。

R.set("U:123:firstname","Billy")
R.set("U:123:surname","Newport")
...

これがベストプラクティスなのか、人々が異なるアプローチを取るのか、私は興味があります.

  • たとえば、単一のキーの下でオブジェクトを「ピクル」できます。これには、単一のリクエストで取得または設定できるという利点があります。

  • または、人は、最初の項目がフィールド名インデックスなどのリストになる可能性がありますか?

これは私に考えさせました-階層的なキーストアが欲しいです、例えば

R.set(["U:123","firstname"],"Billy")
R.set(["U:123","surname"],"Newport")
R.get(["U:123"]) returns [("firstname","Billy"),("surname","Newport")]

次に、トランザクションを追加します。

with(R.get(["U:132"]) as user):
  user.set("firstname","Paul")
  user.set("lastname","Simon")

スケーリングの観点から、get と set のバッチ処理が重要になりますか?

これをサポートしている、または他の適用可能なアプローチを持っている主要なストアはありますか?

4

1 に答える 1

1

追加の Set を使用してオブジェクトの個々のメンバーを追跡することにより、Redis で同様の動作を得ることができます。

SET U:123:firstname Billy
SADD U:123:members firstname
SET U:123:surname Cobin
SADD U:123:members surname

GET U:123:firstname => Billy
GET U:123:firstname => Cobin
SORT U:123:members GET U:123:* -> [Billy, Cobin]
or
SMEMBERS U:123:members -> [firstname, surname]
MGET U:123:firstname U:123:firstname

完全に一致するわけではありませんが、多くの状況で十分です。hurlが Redis でこのパターンを使用する方法に関する興味深い記事があります。

于 2010-01-21T09:18:18.890 に答える