2

アプリケーションには、ユーザーのテーブルを含む MySQL データベースがあります。各ユーザーには独自の Redis ハッシュがあります。各ユーザー所有の Redis ハッシュには、質問と回答の文字列のキーと値のペアが含まれています。例 (Ruby):

user = User.find(1)
question = "What colour is the sky?"
answer = "Blue"
user_hash = Redis::HashKey.new(user.id)
user_hash[question] = answer
user_hash[question] # returns answer

ユーザーは、質問ごとに複数の回答を保存する機能が必要になります。たとえば、次のようになります。

question = "What colour is the sky?"
answers = ["Blue", "Grey", "Red"]

また、アプリケーションは、特定の単語を含むユーザーの質問文字列の検索など、各ユーザー ハッシュを範囲とする質問/回答のグループに対してメソッドを実行します。

1) この時点で、Redis ハッシュはアプリケーションに適切なデータ型ですか? また、そうである場合、2) 複数の回答を持つ質問/回答のペアを処理する最善の方法は何ですか?

4

1 に答える 1

2

これらは、ユーザー、質問、回答の3つのオブジェクトと考える必要があります。そうすれば、それらの関係は単純になります。ユーザーには質問があり、質問には回答があります。

これで、Redisでこれをモデル化するのは簡単です。

  • User、Question、Answerのオブジェクトはハッシュに保存されます
  • 質問には、id、text、userid、date_asked、date_modifiedなどのフィールドがあります
  • Answerには、id、text、userid、questionidなどのフィールドがあります

次に、質問に対する回答を保存する必要があります。キーを使用してRedisリストを作成しますquestion:$id:answers。これは回答IDのリストになります。

キーワードに基づいて検索するには、キーワードごとにRedisセットを作成する必要があります。このセットには、この単語を含む質問のIDを保存します。

たとえば、sadd tag:java 123 232 4231質問123、232、および4231にJavaが含まれていることを示します。同様に、キーワードごとにそのようなセットを追加します。

次に、javaとredisを含む質問をフィルタリングするには、とで共通部分を設定しtag:javaますtag:redis

于 2012-04-27T10:34:48.817 に答える