哪种数据模型最适合简单的用户视图跟踪器?
Posted
技术标签:
【中文标题】哪种数据模型最适合简单的用户视图跟踪器?【英文标题】:Which data model is optimal for a simple tracker of user views? 【发布时间】:2011-09-14 01:35:36 【问题描述】:这里有更多关于你们的学术问题。假设我想在 ruby on rails 应用程序中创建一个模型来跟踪简单的视图信息。我想记录 user_id,查看页面的 URI,并跟踪用户访问页面的次数。
模型 A:一种方法是创建一个具有 user_id 和 page 属性的模型视图(记录 uri),然后在每次用户打开页面时创建一个新条目。
模型 B:第二种方法是向模型添加属性“page_views”,以跟踪用户访问该页面的次数。
优点和缺点:模型 A 将记录更多信息并导致比模型 B 更大的数据库。但是,模型 B 需要控制器搜索现有的用户页面组合,或者向该条目添加视图,或创建一个新的。这会导致数据库更小,但由于需要搜索现有条目,因此规模可能会更小。
所以我对你们的问题是:哪个更重要?我的想法错了吗?我在这里遗漏了什么(忽略了其他性能考虑因素?)
【问题讨论】:
我们对基于 Redis 的 NoSQL 解决方案也是如此,如果你对 NoSQL 没问题,我可以分享一下 嗨 mikhailov - 我目前不知道 NoSQL - 但是,我总是想了解更多,所以如果你想写出来,我会很高兴阅读和学习! NoSQL 非常适合非关系数据 【参考方案1】:跟踪用户活动的 NoSQL 方法:
model app/models/user.rb
class User < ActiveRecord::Base
include UserModules::Tracker
...
end
mixin app/models/user_modules/tracker.rb
module UserModules
module Tracker
def get
key = "user_" + self.id.to_s
arr = Resque.redis.lrange(key, 0, -1)
arr.map|i| JSON.parse(i)
end
def put(controller_name, action_name, details="")
key = "user_" + self.id.to_s
created = Time.now.to_formatted_s(:db).to_json
# silent exception handle, so you can do not run Redis localy
begin
Resque.redis.rpush key,
:controller_name => controller_name,
:action_name => action_name,
:details => details,
:created_at => created
rescue
nil
end
end
end
end
controller app/controller/dashboard.rb
class Dashboard < ApplicationController
after_filter :track, :only => :show
# this action will be tracked
def show
end
# this action will show tracking
def logs_show
render :json => current_user.get
end
...
private
def track
details = "any details...."
current_user.put(controller_name, action_name, details)
end
end
您需要安装 Redis,我更喜欢使用 Resque 作为通过 Resque.redis 设置和初始化 Redis 的常用方法,因为它可以帮助您使用 resque- 浏览跟踪网络
在我的gist中设置 Redis 的路上
【讨论】:
以上是关于哪种数据模型最适合简单的用户视图跟踪器?的主要内容,如果未能解决你的问题,请参考以下文章