本文的主角Aviator,是一个高性能、轻量级的基于java实现的表达式引擎,它动态地将String类型的表达式编译成Java ByteCode并交给JVM执行。

Aviator支持绝大多数运算操作符,包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(=~)、三元表达式(?:) ,同时支持表达式的优先级,优先级跟Java的运算符一样,并且支持通过括号来强制优先级。Aviator 5.0版本的功能更加丰富了,传送门。

Aviator很适合PV、UV的计算。它比Drools轻量,执行效率高,比正则表达式的表达能力强。灵活运用Aviator可以使得很多数据统计的代码变得更通用。

一般来说,常见的PV和UV的统计,都是如下的计算流程:

在Map阶段:

1、过滤掉不符合条件的数据

2、符合条件的数据输出key,1

在Reduce阶段:

1、要么累加,要么求平均

以上的三个步骤中,Map阶段的两个步骤可以通过Aviator脚本变成动态的,Map的第二个阶段输出的数据的Value可以设计为固定格式的,例如:{pv,一般为1}|{响应时间}|{ip},那么Reduce阶段的一个步骤就可以计算出来PV、UV和平均响应时间。举几个栗子:

例子1、排除.css,.js和.png后缀的请求之后,计算应用的PV,UV

Map阶段:

a、按照如下规则过滤: (row[keyMap.uri] =~ /.*\.css/) && (row[keyMap.uri] =~ /.*\.js/) && ((row[keyMap.uri] =~ /.*\.png/))

b、输出:pv|app|{扩展名字},1|20|{IP}

Reduce阶段:

a、累加得到PV,{IP}放入Map,Map的size即为UV

例子2、排除.css,.js和.png后缀的请求之后,计算各个HTTP Status Code的PV

Map阶段:

a、按照如下规则过滤: (row[keyMap.uri] =~ /.*\.css/) && (row[keyMap.uri] =~ /.*\.js/) && ((row[keyMap.uri] =~ /.*\.png/))

b、输出:pv|app|row[keyMap.status],1|20|{IP}。其中row[keyMap.status]是用于动态地从一行日志数据中取值的Aviator脚本

Reduce阶段:

a、累加得到PV,{IP}放入Map,Map的size即为UV

基于以上的设计,再加几个配套的数据库表,就可以实现一个MR计算n种规则的PV、UV和平均响应时间了。

P.S. 有兴趣的话,可以琢磨一下平均响应时间如何计算 :D

java统计 pv uv_统计PV、UV的新武器——Aviator相关推荐

  1. java统计 pv uv_统计网址的pv,uv(附带Spring定时器)

    之前做了一个统计商铺的PV,UV值 大体思路:每天将用户的访问信息放到明细表里,然后在第二天的凌晨将这些数据归总 PVUV表 4个字段:主键pk    用户IP(customer_ip)    访问时 ...

  2. java利用友盟 计算pv uv_通过nginx日志利用shell统计日pv和uv

    通过nginx日志利用shell统计日pv和uv 网上记录nginx日志统计访问量的脚本的文档很多,但是看来看去实际都是一个东西,如下: 1.根据访问IP统计UV awk '{print $1}'  ...

  3. java pv实现_java实现UV.PV.IP统计的实现源码包

    [实例简介] 统计网址的pv,uv,java如何实现数据统计,网站统计源码工程包 [实例截图] [核心代码] statistic └── statistic ├── src │   ├── appli ...

  4. 网站的PV、UV、的统计 (awk 统计命令)

    一.awk的累加统计 方法一: # awk '{IP[$1]++}END{for( i in IP ) print i,IP[i]}' access.log |awk '{sum=sum + $2}E ...

  5. 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等

    有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 1. 什么是展现量.点击量.点击率 在百度推广后台可以看到消费.平均价格.点击.展现.点击率.千次展现费用等数据, ...

  6. Vue+百度统计 实现网页的PV和UV统计

    目录 什么是PV和UV? 百度统计 VUE 验证安装 查看统计 拓展 什么是PV和UV? 这里我懒得打字了,直接百度扒过来吧,这个了解知道是啥就行 百度统计 首先你要有个百度账号,自己测试的时候可以用 ...

  7. 简单网站统计功能的实现 PV IP 真实访客数(UV)

    主要统计三个数值,网站的pv 和ip 以及UV 真实访客数 因为有详细的统计记录,所以可以实现的功能还有很大的扩展!把tallydate使用内存表的话,速度就会更快了 需要用到二张表 CREATE T ...

  8. Flink-电商用户行为分析(网站总浏览量(PV)的统计)

    数据 链接:https://pan.baidu.com/s/1InfWoNYUeV1KYyvFS1aXuA 提取码:z3p4 衡量网站流量一个最简单的指标,就是网站的页面浏览量(Page View,P ...

  9. pv java_网站流量UV是什么意思?什么是流量UV/PV/IP

    雅虎统计基础数据定义 PV(访问量):即PageView,即页面浏览量或点击量,用户每次刷新即网络 雅虎统计基础数据定义 PV(访问量): 即Page View, 即页面浏览量或点击量,用户每次刷新即 ...

最新文章

  1. 自学成才翁_如何发挥自学成才的内在游戏
  2. Pandas简明教程:六、Pandas条件查询
  3. Spring MVC中的二三事
  4. 【PAT乙级】1053 住房空置率 (20 分)
  5. 查询已有链表的hashmap_源码分析系列1:HashMap源码分析(基于JDK1.8)
  6. torch.cat同时连接多个tensor
  7. Python re module的使用
  8. Node.js nodemn
  9. Oracle PL/SQL之NEXT_DAY - 取得下一个星期几所在的日期
  10. 【渝粤教育】国家开放大学2019年春季 2718动物生理基础 参考试题
  11. wex5中集成的mysql数据库 打开时一闪而过 报错
  12. vscode 更改中办发文_如何在Visual Studio代码或VSCode中更改集成终端
  13. 二本学院计算机专业的考研er如何顺利上岸?
  14. 辅音字母组合功能音中的浊化现象
  15. TXT文件批量生成二维码
  16. 使用MATLAB调用ANSYS过程中,使用如下命令 !D:\Program Files\ANSYS Inc\v150\ansys\bin\winx64\ANSYS150 -b -p ane3f
  17. MacOS 更新系统或XCode终端Git报错
  18. 带附件/密送/抄送的 javaMail 邮件发送 -- java_demo(两种实现方式)
  19. 怎么让俩张图片在一行_壁纸文案 | 我们俩不会道别
  20. mpu和嵌入式linux区别,嵌入式MCU与MPU的区分和MCU开发中的三个误区

热门文章

  1. 树莓派python3.7_[Linux] 树莓派编译python3.7.4
  2. MySQL-BETWEEN AND范围查询问题
  3. php的常量和变量,php的常量和变量
  4. xps数据怎么导出为txt_使用ExportAsFixedFormat方法将数据导出到PDF或XPS.docx
  5. kafka消息存储与partition副本原理(二)
  6. Python之 jinja2模板浅析
  7. nginx 错误502 upstream sent too big header while reading response header from upst
  8. python基础教程 pdf github_python基础教程之Jupyter导出PDF从入门到绝望(已解|python基础教程|python入门|python教程...
  9. kd树的根节点_kd树总结
  10. linux 查看目录挂载的ip,Linux挂载IPSAN和FCSAN操作,Linux挂载NFS文件系统