UV统计 - HyperLogLog

UV统计 - HyperLogLog

首先我们搞懂两个概念:

  • UV:全称Unique Visitor,也叫独立访客量,是指通过互联网访问、浏览这个网页的自然人。1天内同一个用户多次访问该网站,只记录1次。
  • PV:全称Page View,也叫页面访问量或点击量,用户每访问网站的一个页面,记录1次PV,用户多次打开页面,则记录多次PV。往往用来衡量网站的流量。

通常来说UV会比PV大很多,所以衡量同一个网站的访问量,我们需要综合考虑很多因素,所以我们只是单纯的把这两个值作为一个参考值

UV统计在服务端做会比较麻烦,因为要判断该用户是否已经统计过了,需要将统计过的用户信息保存。但是如果每个访问的用户都保存到Redis中,数据量会非常恐怖,那怎么处理呢?

Hyperloglog(HLL)是从Loglog算法派生的概率算法,用于确定非常大的集合的基数,而不需要存储其所有值。相关算法原理大家可以参考:https://juejin.cn/post/6844903785744056333#heading-0
Redis中的HLL是基于string结构实现的,单个HLL的内存永远小于16kb内存占用低的令人发指!作为代价,其测量结果是概率性的,有小于0.81%的误差。不过对于UV统计来说,这完全可以忽略。

HyperLogLog 是一种概率数据结构,用于估计集合的基数。

HyperLogLog 是一种概率数据结构,用于估计集合的基数。作为一种概率数据结构,HyperLogLog 以完美的精度换取高效的空间利用率。

Redis HyperLogLog 实现最多使用 12 KB,并提供 0.81% 的标准误差。

计算唯一项目通常需要一定量的内存 与您要计数的项目数量成正比,因为您需要 记住你过去已经看到的元素,以避免 多次计数。但是,存在一组交易算法 精度记忆:它们返回具有标准误差的估计度量, 在HyperLogLog的Redis实现的情况下,不到1%。 该算法的魔力在于您不再需要使用一定量的内存 与计数的项目数成比例,并且可以使用 恒定的内存量;在最坏的情况下为 12k 字节,或者如果您的 HyperLogLog(从现在开始我们只称它们为HLL)很少有元素。

Redis 中的 HLL 虽然在技术上是不同的数据结构,但已编码 作为 Redis 字符串,因此您可以调用 GET 来序列化 HLL,并调用 SET 将其反序列化回服务器。

从概念上讲,HLL API 就像使用集来执行相同的任务。您可以将每个观察到的元素添加到一个集合中,并使用 SCARD 检查 集合中的元素数量,这些元素是唯一的,因为 SADD 不会 重新添加现有元素。

虽然您并没有真正将项目添加到 HLL 中,因为数据结构 仅包含不包含实际元素的状态,API 是 相同:

  • 每次看到新元素时,都会使用 PFADD将其添加到计数中。
  • 如果要检索使用 PFADD 命令添加的唯一元素的当前近似值,可以使用 PFCOUNT 命令。如果需要合并两个不同的 HLL,可以使用 PFMERGE 命令。由于 HLL 提供唯一元素的近似计数,因此合并的结果将为您提供两个源 HLL 中唯一元素数的近似值。

命令:

PFADD key element [element ...]
summary: Adds the specified elements to the specified HyperLogLog.
since: 2.8.9
group: hyperloglogPFCOUNT key [key ...]
summary: Return the approximated cardinality of the set(s) observed by the HyperLogLog at key(s).
since: 2.8.9
group: hyperloglogPFMERGE destkey sourcekey [sourcekey ...]
summary: Merge N different HyperLogLogs into a single one.
since: 2.8.9
group: hyperloglog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/114174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode—2331.计算布尔二叉树的值【简单】

2023每日刷题(六) Leetcode—2331.计算布尔二叉树的值 递归实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool evaluateTree(struct TreeNod…

【算法与数据结构】--算法应用--算法在实际问题中的应用

一、算法在搜索引擎中的应用 搜索引擎是计算机科学中算法应用的典型领域之一。搜索引擎的主要任务是帮助用户在海量数据中快速找到相关信息。以下是算法在搜索引擎中的主要应用: 爬虫算法:爬虫是搜索引擎的基础,用于自动抓取互联网上的网页…

2.1.C++项目:网络版五子棋对战之前置知识

文章目录 一、Websocketpp(一)Websocket介绍(二)报文格式(三)Websocketpp介绍(四)Websocketpp使用1.websocketpp常用接口介绍2. http/websocket服务器 (五)Js…

SLAM ORB-SLAM2(5)例程了解

SLAM ORB-SLAM2(5)例程了解 1. TUM 数据集1.1. 三种相机1.2. 目录结构2. 单目demo2.1. 参数校验2.2. 配置数据集图像路径2.3. 创建单目SLAM2.3. 处理图像数据2.4. 结束3. RGB-D demo3.1. 参数校验3.2. 配置数据集图像路径3.3. 创建 RGB-D SLAM3.3. 处理图像数据3.4. 结束4. 总…

动画制作软件 Animate 2024 mac中文版介绍说明(an2024) v24.0

Animate 2024 mac是一款动画制作软件,它能帮助用户轻松制作出各种精美的动画作品。 Animate 2024拥有强大而直观的设计工作流程,能够让用户自由地构建动画场景、绘制精美的图形,并轻松添加动态效果。无论是传统手绘风格还是骨骼动画&#xff…

rust的排序

Vec 中的 Methods from Deref<Target [T]> 示例 fn main() {let mut strings vec!["banana", "", "ban", "", "apple", "alpha", "cherry", "date"];strings.sort_by(|a, b| {if a…

CUDA学习笔记(七)Kernel性能调节

本篇博文转载于https://www.cnblogs.com/1024incn/tag/CUDA/&#xff0c;仅用于学习。 Exposing Parallelism 这部分主要介绍并行分析&#xff0c;涉及掌握nvprof的几个metric参数&#xff0c;具体的这些调节为什么会影响性能会在后续博文解释。 代码准备 下面是我们的kernel…

类和对象介绍

一、类 1.类的声明 class Box{//类名private://私有成员double width,length,height;//长&#xff0c;宽&#xff0c;高 public://公有成员void init(double l,double w,double h){//初始化 lengthl;widthw;heighth;}double S(){//求表面积 return (height*lengthheight*width…

【Lua语法】字符串

Lua语言中的字符串是不可变值。不能像在C语言中那样直接改变某个字符串中的某个字符&#xff0c;但是可以通过创建一个新字符串的方式来达到修改的目的 print(add2(1 , 2 ,15,3))a "no one"b string.gsub(a , "no" , "on1111")print(a) print…

【Python】AttributeError: module lib has no attribute X509_V_FLAG_CB_ISSUER_CHECK

问题&#xff1a; 运行脚本报错&#xff1a;module lib has no attribute X509_V_FLAG_CB_ISSUER_CHECK 原因&#xff1a; pyOpenSSL版本与python版本不匹配 解决方案&#xff1a; window系统 重新安装pyOpenSSL 1、卸载当前版本pyOpenSSL pip uninstall pyOpenSSL2、重新…

flink问题 集合

1.flink 乱码 在配置文件flink-conf.yaml增加配置项&#xff1a;env.java.opts: -Dfile.encodingUTF-8

神经网络的不同类型的层

神经网络可以包含多个不同类型的层&#xff0c;每种层都具有不同的特点和应用场景。以下是常见的神经网络层的分类及其详细特点和应用场景&#xff1a; 1. 输入层&#xff08;Input Layer&#xff09;&#xff1a; 特点&#xff1a;输入层通常不包含任何权重或激活函数&#…

第87步 时间序列建模实战:LSTM回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍大名鼎鼎的LSTM回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal…

Compose Desktop 使用中的几个问题(分平台加载资源、编写Gradle 任务下载平台资源、桌面特有组件、鼠标键盘事件)

前言 在我之前的文章 Compose For Desktop 实践&#xff1a;使用 Compose-jb 做一个时间水印助手 中&#xff0c;我们使用 Compose For Desktop 写了一个用于读取照片 EXIF 中的拍摄日期参数并以文字水印的方式添加到照片上的桌面程序。 但是事实上&#xff0c;这个程序的名字…

从入门到进阶 之 ElasticSearch SpringData 继承篇

&#x1f339; 以上分享 从入门到进阶 之 ElasticSearch SpringData 继承篇&#xff0c;如有问题请指教写。&#x1f339;&#x1f339; 如你对技术也感兴趣&#xff0c;欢迎交流。&#x1f339;&#x1f339;&#x1f339; 如有需要&#xff0c;请&#x1f44d;点赞&#x1f…

PHP数据加密传输和存储问题

PHP数据加密的类型 md5()&#xff0c;sha1()&#xff0c;crypt() 双md5加密加盐

AAPCS:最新的ARM子程序调用规则

AAPCS是arm公司发布的ARM架构应用程序二进制&#xff08;ABI&#xff09;程序调用接口&#xff0c;该文档由多个版本&#xff0c;博主第一次ARM程序调用规则是在《ARM体系与结构编程》&#xff0c;但书中描述的是ATPCS&#xff0c;AAPCS是ATPCS的升级版。后面去ARM官网看到了AA…

自然语言处理基础——词表示

词表示 把自然语言中最基本的语言单元——词转换为机器能够理解的 词表示能完成以下两个能力 词相似度计算 词与词之间语义的关系 近义词&上位词 使用近义词或上位词表示的问题 遗漏差异 遗漏新的释义 带有主观性 数据吸收 需要大量人工构建 One-Hot Representation …

Kafka学习(最新版3.6.0)

文章目录 一、初识MQ1.1 什么是MQ1.2 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.3 技术对比1.4 MQ的两种模式 二、初识Kafka2.1 Kafka的使用场景2.2 Kafka基本概念2.3 Topic与Partition 三、Kafka基本使用3.1 部署前的准备3.2 启动kafka服务器3.3 Kafka核心概念之Topic3.4…

【每日一题Day354】LC2316统计无向图中无法互相到达点对数 | 并查集

统计无向图中无法互相到达点对数【LC2316】 给你一个整数 n &#xff0c;表示一张 无向图 中有 n 个节点&#xff0c;编号为 0 到 n - 1 。同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。 请你返回 无法互相到达…