0 0

rails统计有效用户数15

    现在做一个类似于论坛论坛,需求那边要我在后台做一个登录有效用户数的统计(同一个用户登录几次都算一个)。
   
    我采取了一个比较笨的方法,在用户登录时记录他的ID,取出数据转化成数组array,再用array.include?()方法判断是否记录过,没记录过就加入到数组中,再把这个数组转换成字符串存到数据库。
   
    现在登录的人比较少,但当已经有数据庞大时再转化成数组对白实在太笨了,因为我在Action的方法是判断完再跳转到主页的,这对用户体验十分不好。
   
    不知道大家有什么好的办法呢?或者rails已经有很好的插件实现了?

   


问题补充:建一个log表都可以,暂时就没有记录在线人数的需要,只需要用于报表的作用,统计一下有效用户数,实时性不高。其实我就想过,有没有办法用户登录时留下ID给数据库就可以跳去下一页,数据库自己根据这个ID进行逻辑比较,就像软件设计的多线程那样,把参数传给你,就不关我事那种.
夜鸣猪 写道
引用

    我采取了一个比较笨的方法,在用户登录时记录他的ID,取出数据转化成数组array,再用array.include?()方法判断是否记录过,没记录过就加入到数组中,再把这个数组转换成字符串存到数据库。
   
    现在登录的人比较少,但当已经有数据庞大时再转化成数组对白实在太笨了,因为我在Action的方法是判断完再跳转到主页的,这对用户体验十分不好。

你是对的,内存里放一个大数组,能避免就避免。而且,登录的时候,还要等一个action,也需要避免。

我的话,可能采取如下的办法
建立一个log表,登录的时候,写log。根据当前用户多少,和实时的需求情况。有两种写法,一个是简单log没有什么逻辑就是一个记录。一个是,稍微有点逻辑看看是不是记录的那种。

当然,通常就是前一种就是有什么记录什么,因为,便于以后统计,也便于优化。

然后,要显示在线人数,和在线情况呢,就从表里读。这个可以压到数据库里,简单的呢,就是triger或者存储过程,数据量实在大呢,就写个user-function或者cron job,专门,后台跑统计。

当然,实时性会没有那么高,但也差不出多少。好处就是,生成多种报表啊,报告啊啥的比较容易,用户登录的时候,没有延迟。

个人想法,至于,有没有做这个的插件,还真没注意

2011年11月06日 11:01

3个答案 按时间排序 按投票排序

0 0

采纳的答案

引用

    我采取了一个比较笨的方法,在用户登录时记录他的ID,取出数据转化成数组array,再用array.include?()方法判断是否记录过,没记录过就加入到数组中,再把这个数组转换成字符串存到数据库。
   
    现在登录的人比较少,但当已经有数据庞大时再转化成数组对白实在太笨了,因为我在Action的方法是判断完再跳转到主页的,这对用户体验十分不好。

你是对的,内存里放一个大数组,能避免就避免。而且,登录的时候,还要等一个action,也需要避免。

我的话,可能采取如下的办法
建立一个log表,登录的时候,写log。根据当前用户多少,和实时的需求情况。有两种写法,一个是简单log没有什么逻辑就是一个记录。一个是,稍微有点逻辑看看是不是记录的那种。

当然,通常就是前一种就是有什么记录什么,因为,便于以后统计,也便于优化。

然后,要显示在线人数,和在线情况呢,就从表里读。这个可以压到数据库里,简单的呢,就是triger或者存储过程,数据量实在大呢,就写个user-function或者cron job,专门,后台跑统计。

当然,实时性会没有那么高,但也差不出多少。好处就是,生成多种报表啊,报告啊啥的比较容易,用户登录的时候,没有延迟。

个人想法,至于,有没有做这个的插件,还真没注意

2011年11月07日 03:33
0 0

用redis的set结构 能够很简单的解决这个问题
  设置一下过期时间,因为是set,不存在重户问题,你只要把id住里面放就行了

2011年11月07日 16:12
0 0

楼上提的两个方案都可行 我一直在统计都是这样设计的  根据需求 选一种合适的方案

2011年11月07日 09:57

相关推荐

    scaffolding+will_paginate+提供will_paginate下载

    在Ruby on Rails开发中,数据分页是一种常见的需求,它能帮助我们有效地管理大量数据,提高用户体验。`scaffolding`是Rails中的一个强大的特性,它允许开发者快速生成基本的CRUD(创建、读取、更新、删除)操作的...

    ASP EXCEL导入SQL

     分布式的存储系统有效地解决了海量数据的存储、检索、分析以及统计等问题。  可见,当传统的CRM系统转换为SaaS服务后,其架构方面还是发生了不少的变动的,也只有这样的变动,才使得CRM能够在SaaS平台上更好的为...

    22个国外电子商务系统.docx

    针对这类需求,存在一些轻量级的电子商务系统,它们提供了简单而有效的解决方案: - **E-junkie**:最适合用于销售数字产品,如电子书、音乐等。虽然也支持实体商品的销售,但需注意处理税收和物流等问题。 - **...

    健身追踪器

    在现代健康与健身领域,健身追踪器已经成为了一种流行的工具,它们不仅能够提供实时反馈,还能通过长期的数据收集帮助用户了解自己的运动习惯,并制定更有效的锻炼计划。 首先,我们来看看"Fitness-Tracker-main"这...

    FormYou

    3. **数据验证**:为了确保收集到的数据质量,FormYou可能会包含数据验证机制,允许设定规则以检查用户输入的有效性,如长度限制、格式验证等。 4. **响应式设计**:考虑到网页应用需要在不同设备上运行,FormYou...

    java开源包1

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包11

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包2

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包3

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包6

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包5

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包10

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包4

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包8

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包7

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包9

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包101

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    Java资源包01

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    JAVA上百实例源码以及开源项目源代码

    Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证...

Global site tag (gtag.js) - Google Analytics