Эффективное моделирование схем has_many ассоциируется с ActiveRecord (или, возможно, Mongoid?) - PullRequest
0 голосов
/ 12 октября 2011

У меня проблемы с созданием довольно сложной схемы для моего приложения. У меня есть объекты и пользователи, и пользователи могут создавать, как и в отличие от многих объектов, и наоборот, наоборот. Поэтому я настроил свои модели так:

class User < ActiveRecord::Base
  has_many :userobjects, :foreign_key => "user_id"
  has_many :likedobjects, :through => :userobjects, :source => :object, :conditions => ['userobjects.liked = ?', true]
  has_many :dislikedobjects, :through => :userobjects, :source => :object, :conditions => ['userobjects.liked = ?', false]
  has_many :createdobjects, :through => :userobjects, :source => :object, :conditions => ['userobjects.created = ?', true]

class Object < ActiveRecord::Base
  has_many :userobjects, :foreign_key => "object_id"
  has_many :likers, :through => :userobjects, :source => :user, :conditions => ['userobjects.liked = ?', true]
  has_many :dislikers, :through => :userobjects, :source => :user, :conditions => ['userobjects.liked = ?', false]
  has_many :creators, :through => :userobjects, :source => :user, :conditions => ['userobjects.created = ?', true] #array of length 1

class Userobjects < ActiveRecord::Base
  belongs_to :user
  belongs_to :object

Среди наиболее частых операций я хочу получить понравившиеся / не понравившиеся объекты current_user и понравившиеся / не понравившиеся объекты для данного объекта. Однако, как мы все знаем, обе эти операции требуют соединений, которые требуют больших вычислительных затрат. Учитывая, что: root - это страница объектов и их понравившихся / не понравившихся, а профиль - список понравившихся / не понравившихся объектов, приведенная выше схема просто не кажется правильной. Каков подход для сортировки встраивания / кэширования ассоциации в объекте / пользователе?

Может быть, это один из сценариев, где схема на основе документов, такая как MongoDb, более эффективна? Я еще не слишком много занимался моделированием схемы, поэтому не уверен, что лучше всего подходит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...