、私はユーザーテーブル、カテゴリテーブル、および多対多リレーションシップを行うユーザーカテゴリテーブルを持っています。 この構造を赤ちゃんに持たせる方が良いでしょうか?リレーショナルデータベースでは、レディスで多くのリレーションを多数保持する方法
11
A
答えて
27
Redisでは、リレーションシップは通常セットで表されます。集合は一方向関係を表現するために使用できるので、多対多の関係を表すためにオブジェクトごとに1組が必要です。
リレーショナルデータベースモデルとRedisデータ構造を比較しようとすると、かなり役に立たなくなります。 Redisでは、すべてが非正規化された方法で保存されます。
例:私たちは、このデータ構造を持っていたら
# Here are my categories
> hmset category:1 name cinema ... more fields ...
> hmset category:2 name music ... more fields ...
> hmset category:3 name sports ... more fields ...
> hmset category:4 name nature ... more fields ...
# Here are my users
> hmset user:1 name Jack ... more fields ...
> hmset user:2 name John ... more fields ...
> hmset user:3 name Julia ... more fields ...
# Let's establish the many-to-many relationship
# Jack likes cinema and sports
# John likes music and nature
# Julia likes cinema, music and nature
# For each category, we keep a set of reference on the users
> sadd category:1:users 1 3
> sadd category:2:users 2 3
> sadd category:3:users 1
> sadd category:4:users 2 3
# For each user, we keep a set of reference on the categories
> sadd user:1:categories 1 3
> sadd user:2:categories 2 4
> sadd user:3:categories 1 2 4
、集合代数を使用してクエリを実行するのは簡単です:
# Categories of Julia
> smembers user:3:categories
1) "1"
2) "2"
3) "4"
# Users interested by music
> smembers category:2:users
1) "2"
2) "3"
# Users interested by both music and cinema
> sinter category:1:users category:2:users
1) "3"
4
IMHO Redisは構造化クエリー(SQL)を作成するためのものではなく、高速アクセス可能なデータ用のものです。 user_idをキーとする「テーブル」を作成します。 。次に、user_idを照会し、必要なものを処理します。これは正規化の反対です。ステータスの更新など、データの順序が重要な場合は、データをプッシュしてリストにポップすることができます。たとえば、テーブル "status"にはuser_idがキーになり、データはリストになります。あなたはデータをlpushし、例えば最後の20要素を照会します。
関連する問題
- 1. 1対多のリレーションで多対多リレーションを取得する
- 2. 多対多のリレーショナルデータベース
- 3. JPAで多対多の関係を正しく保持する方法
- 4. 多くのリレーションを選択
- 5. リレーショナルデータベース内で制約の多い多対多関係を表現する最良の方法は何ですか?
- 6. Doctrine多対多リレーション
- 7. rで多くのエッジとリレーションを持つネットワークアナリシス?
- 8. 多対多リレーションのLaravelログリビジョン
- 9. 汎用リレーションを持つ多相JPAエンティティの実装方法
- 10. 複合多対多リレーション?
- 11. 多対多リレーションMVC ASP.NET
- 12. ショッピングカート(Django)で多対多のリレーションを持つさまざまなモデルを照会する方法
- 13. QueryDSLの多対多リレーションの述語BooleanExpressionの作成方法
- 14. Ruby on Railsで多対多のリレーションを照会する
- 15. 多対多リレーションを持つPHPExcel Laravel Excelを生成
- 16. グリッド内の多くのリレーションから数える方法Yii2検索モデル
- 17. エンティティ・フレームワークのビュー・モデルを介して多対多リレーションを保存する6
- 18. Laravel雄弁 - 1つのリレーションに多く
- 19. リレーションとオフセット多対多の関係
- 20. Sparkの交差多対多リレーション
- 21. 多対多リレーションの無限ループ
- 22. Entity Framework C# - 多対多リレーションを持つ子を持つオブジェクトのクローン
- 23. 多対多リレーションを持つテーブルに値を挿入できません。
- 24. Laravel 5の1対多の(hasMany)リレーションを更新する方法
- 25. 多くのモデルから多数のモデルのメンテナンスを完全に保持
- 26. Hibernateの多対多リレーションは空のコレクションを返します
- 27. 多態性リストとリレーショナルデータベース
- 28. hybrisの1対多のリレーション
- 29. Symfony2の多対多リレーションを編集する
- 30. Entity Frameworkの多対多リレーションを更新する
ありがとうございます!私はレディスにとって新しく、それは非常に面白いです:) – starikovs
カテゴリスンバーの名前を取得する方法カテゴリ:2:カテゴリ番号を与えるため、これを持つユーザー – vaibhav