Ruby onRails3.2.2とMySQLを使用しています。インスタンスの「組み合わせ」ごとに、他の2つのクラスに関連するすべてのレコードをクラスに関連するデータベーステーブルに格納することが「推奨」/「望ましい」かどうかを知りたいです。
つまり、私はモデルを持っUser
ていArticle
ます。ArticleUserAuthorization
すべてのユーザー記事承認オブジェクトを保存するために、N人のユーザーとM人の記事が与えられたときにN*MArticleUserAuthorization
レコードが存在するようにモデルを実装したいと思います。
そうすることで、私は次のように述べて使用することができActiveRecord::Associations
ます:
class Article < ActiveRecord::Base
has_many :user_authorizations, :class_name => 'ArticleUserAuthorization'
has_many :users, :through => :user_authorizations
end
class User < ActiveRecord::Base
has_many :article_authorizations, :class_name => 'ArticleUserAuthorization'
has_many :articles, :through => :article_authorizations
end
ただし、すべての組み合わせを格納する上記のアプローチでは、数十億の数十億の行を含む大きなデータベーステーブルが作成されます!!! さらに、理想的には、またはオブジェクトが作成されたときにすべての承認レコードを作成することを計画しています(つまり、前述のすべての「組み合わせ」を一度に作成するか、より適切には「遅延」バッチで作成することを計画しています...とにかく、このプロセスは他の数十億のデータベーステーブル行を作成します!!!)そして破壊するときにその逆を行います(数十億のデータベーステーブル行を削除することによって!!!)。さらに、orオブジェクトが更新されたときに、これらの行を一度に読み取って更新することを計画しています。User
Article
User
Article
だから、私の疑問は次のとおりです。
- このアプローチは「推奨」/「望ましい」ですか?たとえば、どのようなパフォーマンスの問題が発生する可能性がありますか?または、非常に大きなデータベーステーブルを持つデータベースを管理/管理するための悪い「方法」/「処方箋」ですか?
- 私の場合、どのように/できます/すべきですか(おそらく、ユーザー認証をより良い方法で処理する方法を「再考」することによって)?
注:オブジェクトを取得するときに「承認されたオブジェクト」のみUser
を取得するには、「アトミック」ユーザー承認ルール(つまりArticle
、ユーザーと記事オブジェクトごとに1つのユーザー承認レコード)が必要であるため、このアプローチを使用します。システムは、「admin」、「registered」などのユーザーグループに基づいていません。ArticleUserAuthorization
したがって、テーブルの可用性により、取得した各オブジェクトでユーザー承認に関連するメソッドを実行することを回避できると思いました(注:これらのメソッドには、パフォーマンスを低下させる可能性のあるMySQLクエリが含まれます- 「承認」メソッドの実装例については、前の質問を参照してください)。 「単に」アクセス/参加することによってArticleUserAuthorization
「ユーザーが承認した」オブジェクトのみを取得するためのテーブル。