В настоящее время я пытаюсь изучать Ruby On Rails, поскольку я являюсь давним разработчиком PHP, поэтому я создаю свое собственное сообщество, такое как страница.
Я зашел довольно далеко и создал пользовательские модели и тому подобное, используя MySQL.
Но потом я услышал о MongoDB и заглянул к нему немного больше, и я нахожу это довольно приятным.
Итак, я настроил его и использую mongomapper для соединения между рельсами и MongoDB.
Я сейчас использую его для страницы новостей на сайте.
У меня также есть страница профиля для каждого пользователя, которая включает в себя собственную гостевую книгу, чтобы другие пользователи могли зайти в свой профиль и написать им небольшое сообщение.
Моя мысль сейчас состоит в том, чтобы изменить модели User с использования 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. Я хотел бы сделать это, поэтому у меня есть только одна таблица для каждого пользователя, и не так, как сейчас, когда у меня есть три таблицы, просто чтобы иметь гостевую книгу.
Итак, моя мысль такова:
Модель пользователя:
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"
Но тогда я могу вспомнить одну проблему. Когда я просто хочу получить информацию о пользователе, такую как псевдоним и дату рождения, тогда он должен будет извлечь все записи в гостевой книге пользователя. И если у каждого пользователя будет около тысячи сообщений в гостевой книге, он получит очень много информации для системы. Или я не прав?
Как вы думаете, я должен сделать это по-другому?