【发布时间】:2011-08-24 10:02:11
【问题描述】:
我存储用户活动数据:当用户访问当前文章、主题或个人消息时,以显示他在离线时添加了多少新的 cmets 和消息。
class SiteActivity
include Mongoid::Document
include Mongoid::Timestamps
belongs_to :user
belons_to :activity, polymorphic: true
end
在这种情况下,我为每个文档存储一条记录。
另一种选择是使用嵌入文档,因此所有用户活动都将存储在一个文档中:
class SiteActivity
include Mongoid::Document
belongs_to :user
embeds_many :user_activities
validates :user_id, uniqueness: true
end
class UserActivity
include Mongoid::Document
include Mongoid::Timestamps
embedded_in :site_activity
belongs_to :activity, polymorphic: true
end
所以现在我不需要搜索所有 SiteActivities(许多记录),但我可以为 current_user 获取一个 user_activity 并通过它嵌入的文档找到我需要的活动。
哪种方式更有效地存储和搜索数据?
我的普通用例是:
我有一个用户和一个帖子,所以我正在使用这些数据获取 site_activity,以查看该用户上次访问帖子的日期。
我的第一个选择:
activity = SiteActivity.where(user_id: current_user.id, activity_id: post.id, activity_type: post.class)
第二个
user_activity = SiteActivity.where(user_id: current_user.id)
activity = user_activity.user_activities.where(activity_id: post.id, activity_type: post.class)
【问题讨论】:
标签: ruby-on-rails ruby performance mongodb mongoid