zoukankan      html  css  js  c++  java
  • 关于吃掉物理的二次聚合无法实现的需要之旁门左道实现法

    需求:
    吃掉物理想要统计一下,在指定时间内,所有的吃掉物理用户(包括老师,学生,家长等),按访问次数进行一下聚合,显示每个访问次数对应的人数,可以进一步获知僵尸用户和活跃用户的个数,以后可能扩展为想知道具体是哪些人。要的报表如下:


    2018-06-01至2018-09-01 (其中天表示这个用户共使用了多少天,一天使用N次记一天)


    100天 56人
    98天 467人
    96天 3442人
    ...

    1天 29034人

    =======================================================================================================
    分析与实现:

    1、因es无法实现二次聚合(或者说我们不会),现在能想到的方法是不完全依赖于ES,要使用原来的技术体系与ES结合的思路实现。

    2、设计一个统计任务的概念,就是说选择一段时间后,点开始统计,就分配一个统计任务(时间戳即可 chidiaowuli_20180809082230),记录到mysql中,界面上显示,现在后台统计中,请稍侯...

    3、lua将任务ID,时间戳+2018_06_01-2018_09_01 写入到一个ssdb的queue中,名称为tongjifenxi_queue

    4、开发一个python程序一直while true进行循环,监控到有内容,就准备开始进行统计分析,发现前缀是吃掉物理就开始吃掉物理的逻辑,后期可以扩展为支持其它业务。
    如果没有找到就休息3秒。

    5、将吃掉物理的用户在这段时间内访问的人员,按老师,学生,家长查三次,分别按分页读取,一次100个。这样就比直接从数据库中查询所有的吃掉物理用户优化多了,因为没访问的直接就不再统计了!

    6、将100个用户,调用elasticsearch进行统计这些人在2018_06_01-2018_09_01时间范围内的访问天数。

    7、获取访问天数后,将结果记录到ssdb,具体设计如下:

    (1)hash记录真实情况

    hashmap 名称 : chidiaowuli_acess_count_时间戳_98
    key: identity_id+'_'+person_id
    value: 1

    (2) 需要知道哪些hashmap是这次相关的
    zset name: chidiaowuli_acess_count_zset_时间戳
    key : chidiaowuli_acess_count_时间戳_98
    score: 每次增加一个人员访问天数时,需要首先增加hashmap的内容,然后取出 zset中相关的score并加1.

    8、显示需求要的列表:直接从zset中读取即可。如果想要钻取,我们可以读取对应的hashmap.

    9、垃圾回收与清理
    对于以前的统计分析任务,可以删除,删除时要按mysql-->ssdb zset --> ssdb hashmap的方式找到最后的记录,删除之,然后再回退删除上一级,最终删除mysql数据。

    10、至此,所有流程完成。

  • 相关阅读:
    将驱动程序添加到脱机 Windows 映像
    python3 字符串格式输出,左边补0
    启动tomcat三种方式
    关于杭州房价的一些思考
    《经济学原理 -- 生产要素市场》笔记
    《经济学原理 -- 外部性》笔记
    《经济学原理 -- 弹性及其应用》笔记
    《经济学原理 -- 供给与需求的市场力量》笔记
    《经济学原理 -- 像经济学家一样思考》笔记
    《经济学院原理 -- 经济学十大原理》笔记
  • 原文地址:https://www.cnblogs.com/littlehb/p/9440689.html
Copyright © 2011-2022 走看看