사용자 활동 데이터 저장 : 사용자가 현재 기사, 주제 또는 개인 메시지를 방문하여 오프라인 상태에서 추가 된 새 메모 및 메시지 수를 표시합니다.효율적인 방법으로 MongoDB에 데이터 저장 : 임베디드 문서 대 개별 문서
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)
감사합니다. 이것은 내게 확신 한 것 같습니다 : – fl00r
제 경우에는 동일한 물건 인'Mongoid :: Timestamps'를 사용하여 last_access_time으로'updated_at'을 추가하십시오. – fl00r
네, 비슷하게 행동해야합니다. – rubish