05_bitmaphyperloglogGEO

Bitmap&hyperloglog&GEO

面试问

  1. 记录对集合中的数据进行统计
  2. 在移动应用中,需要统计每天的新增用户数和第2天的留存用户数;
  3. 在电商网站的商品评论中,需要统计评论列表中的最新评论:
  4. 在签到打卡中,需要统计一个月内连续打卡的用户数:
  5. 在网页访问记录中,需要统计独立访客(Unique Visitor,UV)量。

痛点:

类似今日头条、抖音、淘宝这样的额用户访问级别都是亿级的,请问如何处理?

需求痛点

  1. 亿级数据的收集、清洗、统计、展现
  2. 需要:存的进、取得快、多维度

一、统计的类型有哪些

  1. 聚合统计

    统计多个集合元素的聚合结果,就是set里面的交差并等集合统计

    image-20230310202435718

    交并差集和聚合函数的应用

  2. 排序统计

    抖音短视频最新评论留言的场景,请你涉及一个展现列表。考察数据结构和设计思路。

    image-20230310202753893

    使用zset实现

    image-20230310203037036

    在面对需要展示最新列表、排行榜等场景时,如果数据更新频繁或者需要分页显示,建议使用zset

  3. 二值统计

    集合元素的取值就只有0和1两种。在钉钉上班签到打卡的场景中,我们只需要记录签到(1)和没签到(0)

    一般使用bitmap实现

  4. 基数统计

    指统计一个集合中不重复的元素

    一般使用hyperloglog

二、hyperloglog

  1. 名词

    1. UV

      Unique Visitor,独立访客,一般理解为客户端IP

      需要考虑去重

    2. PV

      Page View,页面浏览量

      不用去重

    3. DAU

      Daily Active User,日活跃用户量,登录或使用某个产品的用户数(去掉重复登录的用户)

      常用于反映网站、互联网应用或网络游戏的运营情况

    4. MAU

      Monthly Active User,月活跃用户量

  2. 需求

    很多计数类场景,比如每日注册IP数、每日访问IP数、页面实时访问数PV、访问用户数UV等。

    因为主要的目标高效、巨量地进行计数,所以对存储的数据的内容并不太关心。

    也就是说它只能用于统计巨量数量,不太涉及具体的统计对象的内容和精准性。

    统计单日一个页面的访问量(PV),单次访问就算一次。

    统计单日一个页面的用户访问量(UV),即按照用户为维度计算,单个用户一天内多次访问也只算一次。

    多个ky的合并统计,某个门户网站的所有模块的PV聚合统计就是整个网站的总PV。

  3. 是什么

    1. 基数

      是一种数据集,去重复后的真实个数

      image-20230310205505716

    2. 去重复统计功能的基数估计算法,就是hyperloglog

      image-20230310205545928

    3. 基数统计

      用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算

    4. 基本命令

      image-20230310205744231

  4. hyperloglog如何实现的,如何演化的

    1. 去重的几种方法

      • hashset

      • bitmap

        image-20230310210406452

      • hyperloglog概率算法

        通过牺牲准确率来换取空间,对于不要求绝对准确率的场景下可以使用,因为概率算法不直接存储数据本身,

        通过一定的概率统计方法预估基数值,同时保证误差在一定范围内,由于又不储存数据故此可以大大节约内存。

    2. 如何做到的?如何演化来的

      只是进行不重复的基数统计,不是集合也不保存数据,只记录数量而不是具体的内容。

      有误差:

      ​ hyperloglog提供不精确的去重计数方案,牺牲准确率来换取空间,误差在0.81%左右

      论文和出处:http://antirez.com/news/75

      image-20230310211215500

    3. 淘宝网站首页亿级UV的Redis统计方案

      1. 需求

        1. UV的统计需要去重,一个用户一天内的多次访问只能算一次
        2. 淘宝、天猫首页的UV,平均每天是1~1.5个亿左右
        3. 每天存1.5个亿的IP,访问者来了后先去查是否存在,不存在加入
      2. 方案

        1. 使用redis hash存储详细数据

        2. 使用hyperloglog

          image-20230310212656426

      3. hyperloglog service

      4. hyperloglog controller

三、GEO

面试题说明:

移动互联网时代LBS应越来越多,交友软件中附近的小姐姐、外卖软件中附近的美食店铺、打车软件附近的车辆等等。

那这种附近各种形形色色的XXX地址位置选择是如何实现的?

会有什么问题呢?

  1. 查询性能问题,如果并发高,数据量大这种查询是要搞垮mysq数据库的
  2. 一般mysql查询的是一个平面矩形访问,而叫车服务要以我为中心N公里为半径的圆形覆盖。
  3. 精准度的问题,我们知道地球不是平面坐标系,而是一个圆球,这种矩形计算在长距离计算时会有很大误差,mysql不合适

3.1 redis之GEO

经纬度:

image-20230310215853543

如何获取某个地址的经纬度:使用百度地图等系统

命令复习:

  1. GEOADD:添加经纬度坐标

  2. GEOPOS:返回经纬度

  3. GEOHASH:返回坐标的geohash,geohash算法生成的base32编码值

    image-20230310220254284

  4. GEODIST:两个位置之间距离

  5. GEORADIUS:查找距离中心位置小于XX距离的地点

  6. GEORADIUSBYMEMBER

四、bitmap

  1. 命令复习

    image-20230313214956303

  2. 需求和解决方案

    image-20230313215057654

  3. bitmap解决方法

    image-20230313215140676

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP8的正则表达式-PHP8知识详解

在网页程序的时候,经常会有查找符合某些复杂规则的字符串的需求。正则表达式就是描述这些规则的工具。 正则表达式是把文本或者字符串按照一定的规范或模型表示的方法,经常用于文本的匹配操作。 例如:我们在填写手机号码的时候,…

【编织时空四:探究顺序表与链表的数据之旅】

本章重点 链表的分类 带头双向循环链表接口实现 顺序表和链表的区别 缓存利用率参考存储体系结构 以及 局部原理性。 一、链表的分类 实际中链表的结构非常多样,以下情况组合起来就有8种链表结构: 1. 单向或者双向 2. 带头或者不带头 3. 循环或者非…

PHP8的字符串操作3-PHP8知识详解

今天继续分享字符串的操作,前面说到了字符串的去除空格和特殊字符,获取字符串的长度,截取字符串、检索字符串。 今天继续分享字符串的其他操作。如:替换字符串、分割和合成字符串。 5、替换字符串 替换字符串就是对指定字符串中…

改进YOLO系列:3.添加SOCA注意力机制

添加SOCA注意力机制 1. SOCA注意力机制论文2. SOCA注意力机制原理3. SOCA注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. SOCA注意力机制论文 暂未找到 2. SOCA注意力机制原理 3. SOCA注意力机制的配置 3.1common.py配置 ./models/common.p…

C#程序随系统启动例子 - 开源研究系列文章

今天讲讲C#中应用程序随系统启动的例子。 我们知道,应用程序随系统启动,都是直接在操作系统注册表中写入程序的启动参数,这样操作系统在启动的时候就根据启动参数来启动应用程序,而我们要做的就是将程序启动参数写入注册表即可。此…

react-native-webview使用postMessage后H5不能监听问题(iOS和安卓的兼容问题)

/* 监听rn消息 */ const eventListener nativeEvent > {//解析数据actionType、extraconst {actionType, extra} nativeEvent.data && JSON.parse(nativeEvent.data) || {} } //安卓用document,ios用window window.addEventListener(message, eventLis…

SASS 学习笔记 II

SASS 学习笔记 II 上篇笔记,SASS 学习笔记 中包含: 配置 变量 嵌套 这里加一个扩展,嵌套中有一个 & 的用法,使用 & 可以指代当前 block 中的 selector,后面可以追加其他的选择器。如当前的 scope 是 form&a…

02-C++数据类型-高级

数据类型-高级 4、复合类型 4.4、结构简介 struct inflatable {char name[20];float vol;double price; };inflatable vincent; //C struct inflatable goose; //C例子 // structur.cpp -- a simple structure #include <iostream> struct inflatable // structu…

17万字数字化医院信息化建设大数据平台建设方案WORD

导读&#xff1a;原文《17万字数字化医院信息化建设大数据平台建设方案WORD》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 目录 第1章 医院信息化概述 1.1 国内…

Spring的生命周期及Spring Bean单例和多例---超详细教学

一&#xff0c;何为spring生命周期 一个Bean对象从被Spring容器创建到被销毁的整个过程。Spring框架对Bean对象的生命周期进行了管理&#xff0c;提供了灵活性和控制权&#xff0c;让开发人员能够在不同的阶段进行自定义操作 1.1生命周期图 1.2.为什么要学习对象的生命周期…

PyTorch训练深度卷积生成对抗网络DCGAN

文章目录 DCGAN介绍代码结果参考 DCGAN介绍 将CNN和GAN结合起来&#xff0c;把监督学习和无监督学习结合起来。具体解释可以参见 深度卷积对抗生成网络(DCGAN) DCGAN的生成器结构&#xff1a; 图片来源&#xff1a;https://arxiv.org/abs/1511.06434 代码 model.py impor…

Docker容器:docker的资源控制及docker数据管理

文章目录 一.docker的资源控制1.CPU 资源控制1.1 资源控制工具1.2 cgroups有四大功能1.3 设置CPU使用率上限1.4 进行CPU压力测试1.5 设置50%的比例分配CPU使用时间上限1.6 设置CPU资源占用比&#xff08;设置多个容器时才有效&#xff09;1.6.1 两个容器测试cpu1.6.2 设置容器绑…

马上七夕到了,用各种编程语言实现10种浪漫表白方式

目录 1. 直接表白&#xff1a;2. 七夕节表白&#xff1a;3. 猜心游戏&#xff1a;4. 浪漫诗句&#xff1a;5. 爱的方程式&#xff1a;6. 爱心Python&#xff1a;7. 心形图案JavaScript 代码&#xff1a;8. 心形并显示表白信息HTML 页面&#xff1a;9. Java七夕快乐&#xff1a;…

【学习笔记之vue】These dependencies were not found:

These dependencies were not found:方案一 全部安装一遍 我们先浅试一个axios >> npm install axios 安装完报错就没有axios了&#xff0c;验证咱们的想法没有问题&#xff0c;实行&#xff01; ok

city walk结合VR全景,打造新时代下的智慧城市

近期爆火的city walk是什么梗&#xff1f;它其实是近年来备受追捧的城市漫步方式&#xff0c;一种全新的城市探索方式&#xff0c;与传统的旅游观光不同&#xff0c;城市漫步更注重与城市的亲密接触&#xff0c;一步步地感受城市的脉动。其实也是一种自由、休闲的方式&#xff…

【Windows系统编程】03.远线程注入ShellCode

shellcode&#xff1a;本质上也是一段普通的代码&#xff0c;只不过特殊的编程手法&#xff0c;可以在任意环境下&#xff0c;不依赖于原有的依赖库执行。 远程线程 #include <iostream> #include <windows.h> #include <TlHelp32.h>int main(){HANDLE hPr…

stable diffusion基础

整合包下载&#xff1a;秋叶大佬 【AI绘画8月最新】Stable Diffusion整合包v4.2发布&#xff01; 参照&#xff1a;基础04】目前全网最贴心的Lora基础知识教程&#xff01; VAE 作用&#xff1a;滤镜微调 VAE下载地址&#xff1a;C站&#xff08;https://civitai.com/models…

小程序的数据绑定和事件绑定

小程序的数据绑定 1.需要渲染的数据放在index.js中的data里 Page({data: {info:HELLO WORLD,imgSrc:/images/1.jpg,randomNum:Math.random()*10,randomNum1:Math.random().toFixed(2)}, }) 2.在WXML中通过{{}}获取数据 <view>{{info}}</view><image src"{{…

爬虫逆向实战(二)--某某观察城市排行榜

一、数据接口分析 主页地址&#xff1a;某某观察 1、抓包 通过抓包可以发现数据接口是multi 2、判断是否有加密参数 请求参数是否加密&#xff1f; 无请求头是否加密&#xff1f; 无cookie是否加密&#xff1f; 无响应数据是否加密&#xff1f; 通过查看“响应”板块可以…

windows10 安装WSL2, Ubuntu,docker

AI- 通过docker开发调试部署ChatLLM 阅读时长&#xff1a;10分钟 本文内容&#xff1a; window上安装ubuntu虚拟机&#xff0c;并在虚拟机中安装docker&#xff0c;通过docker部署数字人模型&#xff0c;通过vscode链接到虚拟机进行开发调试.调试完成后&#xff0c;直接部署在云…