私は長年のPHP開発者であるため、現在Ruby On Railsを学習しようとしています。そのため、ページのような独自のコミュニティを構築しています。
私はかなり遠くまで来て、MySQLを使用してユーザーモデルなどを作成しました。
しかし、それから私はMongoDBのことを聞いて、もう少し調べてみると、それはちょっといいと思います。
だから私はそれを設定し、レールとMongoDB間の接続にmongomapperを使用しています。
現在、サイトのニュースページに使用しています。
また、すべてのユーザーのプロファイルページがあり、他のユーザーが自分のプロファイルにアクセスして小さなメッセージを書くことができるように、自分のゲストブックが含まれています。
私の考えは、ユーザーモデルをMySQLの使用からMongoDBの使用を開始するように変更することです。
まず、各ユーザーのモデルがどのように設定されているかを示します。
ユーザーモデル:
class User < ActiveRecord::Base
has_one :guestbook, :class_name => "User::Guestbook"
ゲストブックモデルモデル:
class User::Guestbook < ActiveRecord::Base
belongs_to :user
has_many :posts, :class_name => "User::Guestbook::Posts", :foreign_key => "user_id"
そして、ゲストブックの投稿モデル:
class User::Guestbook::Posts < ActiveRecord::Base
belongs_to :guestbook, :class_name => "User::Guestbook"
自分の都合でこのように分割しましたが、MongoDBに移行しようとすると、テーブルの作成方法がわかりません。
MongoDBにはEmbeddedDocumentを含めることができるため、ユーザーごとに1つのテーブルを作成し、そのテーブルにすべてのゲストブックエントリの「列」を作成したいと思います。これを実行したいので、ユーザーごとに1つのテーブルしかありませんが、ゲストブックを作成するためだけに3つのテーブルがある場合は、今は好きではありません。
だから私の考えはこのようにすることです:
ユーザーモデル:
class User
include MongoMapper::Document
one :guestbook, :class_name => "User::Guestbook"
ゲストブックモデルモデル:
class User::Guestbook
include MongoMapper::EmbeddedDocument
belongs_to :user
many :posts, :class_name => "User::Guestbook::Posts", :foreign_key => "user_id"
そして、ゲストブックの投稿モデル:
class User::Guestbook::Posts
include MongoMapper::EmbeddedDocument
belongs_to :guestbook, :class_name => "User::Guestbook"
しかし、1つの問題が考えられます。ニックネームや誕生日などのユーザー情報を取得するだけの場合は、すべてのユーザーのゲストブックの投稿を取得する必要があります。そして、各ユーザーがゲストブックに1000の投稿を持っている場合、システムのために取得するのは非常に多くなります。それとも私は間違っていますか?
他の方法でやるべきだと思いますか?