【问题标题】: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 非常适合非关系数据

标签: ruby-on-rails database ruby-on-rails-3 views tracking


【解决方案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 的路上

【讨论】:

    猜你喜欢
    • 2015-07-09
    • 2019-07-23
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2020-04-27
    • 1970-01-01
    • 2020-04-29
    相关资源
    最近更新 更多