ソーシャル ネットワーキング サイトのデータベースに閲覧権限を保存してアクセスするためのスキームを作成したいと考えています。この質問は、ここにある他の質問と似ています。たとえば、リレーショナル データベースでは、閲覧権限は通常どのように実装されていますか? データベースでユーザー権限を指定する最も効率的な方法は何ですか? 、しかし、主に 1 つの重要な違いがあります。私は、これらの人々のようにリレーショナル データベースを使用することを余儀なくされておらず、他のソリューションを探すことができました。また、最終的にリレーショナル ソリューションを選択したとしても、適切な方法で更新を処理できる限り、事前に計算されたあらゆる種類の構造を格納するためにキャッシュを使用することもできます。
いくつかのアイテムは、同様のアクセス権設定 (写真、ステータス更新など) を共有する必要があります。これらは、私が今処理したい主要な設定です。
- プライベート
- 公衆
- 友達が利用可能
- 友達の友達が利用可能
- 利用可能な私のグループ
最初の 2 つはもちろん単純ですが、最後の 2 つは複雑に見えます。現在の実装では、アイテムごとにフラグを設定したリレーショナル データベースを使用していますが、サブクエリや複数のクエリを使用せずに解決する方法が思い浮かびません。もちろん、項目とグループ、さらにはユーザーを組み合わせた多対多のテーブルを使用することもできますが、何かが変更されるたびに膨大な量の更新が発生するのではないかと心配しています。
現在、実際のコンテンツを取得するのは簡単ですが、アクセス許可の確認に非常に多くの時間を費やしています。また、1 回のリクエストで大量の写真を取得できますが、異なるルールが適用される可能性があるため、閲覧権限を個別に確認する必要があります。このソリューションは、まったく拡張できないようです。
また、特定のアイテムの特定のユーザーまたはグループの例外を処理したいと考えています。また、品目区分によって扱いが異なる場合があります。たとえば、写真にタグ付けされているユーザーに、その写真を表示する権利を与えることができます (たとえば、ネットいじめに対抗するため)。
- 他の人はこれをどのように解決しますか?
- リレーショナル データベースでこれを機能させる賢い方法はありますか?
- 多くのクラスのアイテムを同様の方法で処理する必要がある場合、これを DRY 方法で行うことはできますか?
- グラフデータベースなど、調査すべき他の種類のデータベースはありますか? その場合、特定のソフトウェアに関する提案はありますか?