3

Redis データベースで amazon.com のカテゴリ (書籍、映画、電子機器など) に似たデータをモデル化しようとしています。ユーザーに一貫したユーザー インターフェイスが表示されるように、HTML ページにレンダリングするときは順序が重要です。そのため、カテゴリを並べ替えセットに保存しました。

ZADD categories 0 "Books"
ZADD categories 1 "Movies"
ZADD categories 2 "Electronics"

次に、サブカテゴリごとに別の並べ替えセットを作成しました。

ZADD categories:books 0 "Fiction"
ZADD categories:books 1 "Non-Fiction"
ZADD categories:movies 0 "Horror"
[...]

ここから、製品をハッシュに格納できると考えました。

HMSET product:1000 category 0 subcategory 0 title "Redis Cookbook"
HMSET product:1001 category 1 subcategory 0 title "Nightmare on Elm Street"
[...]

私は Redis とキー/バリュー データベース ストアの両方に非常に慣れていないため、自分のアプローチに自信がありません。このモデルは長期的に機能しますか? 私が知っておくべきより良い/代替のアプローチはありますか? 私が懸念していることの 1 つは、名前を「同期」しておくことです。たとえば、トップレベルのカテゴリを「本」から「文学」に変更すると (ひどい例ですが、私は知っています)、本を「参照」するサブカテゴリのすべてのキーも更新する必要があります。

4

1 に答える 1

6

あなたの質問に逆に答えましょう。

製品をハッシュに保存する

それはいいアイデアです。一般に、エンティティはハッシュマップに格納します。

カテゴリー名の変更

カテゴリごとに内部識別子を使用する必要があります。次に、製品を保存するのと同じように、カテゴリの表示名をハッシュマップに保存します。この間接化は便利です。カテゴリの追加情報を保存できるからです。たとえば、後で各カテゴリの「最も人気のある製品」を表示することにした場合、このようなスキーマが役立ちます。

商品をカテゴリに保存する

のようなキーを作成して、category:books:products各製品の ID を保存できます。これは、データで何をしたいかによって、リスト、セット、またはソートセットにすることができます。

  1. 最近追加された製品など、製品に固有の順序がある場合は、リストを使用するのが理にかなっています。このように、リストの最初の要素が最新の製品です。
  2. 「最もダウンロードされた」または「最も閲覧された」などの基準で商品を並べ替える場合は、並べ替えセットを使用する必要があります。
  3. カテゴリ内の製品間に他の関係がない場合は、セットを使用します。

Setまたはを使用SortedSetすると、交差を実行できます。これらは、「O'Reilly が発行した書籍」などのアイテムのサブセットが必要な場合に便利です。これを行うには、書籍 ID を含む別のセット「publisher:preilly」を維持する必要があります。

カテゴリのコレクションを保存する

さて、あなたは を提案しましたがSortedSet、これは考えられる解決策の 1 つです。ただし、カテゴリの順序が動的に変更されない場合は、リストを使用することもできます。たとえば、カテゴリを常に昇順で表示する場合は、リストで十分です。

順序が動的に変更される場合は、SortedSet が役立ちます。たとえば、各カテゴリの製品数に基づいてカテゴリを表示する場合は、それらを SortedSet に格納することをお勧めします。

また、複数のリストまたはソートセットを使用できることも覚えておいてください。各コレクションは異なるユースケースを表すことができます。海外の顧客に本を販売したくないと仮定しましょう。その場合、別のキーcategories:overseasを用意して、表示するカテゴリを保存できます。

于 2012-08-20T11:11:09.383 に答える