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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43221.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43221.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43221.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python “貪吃蛇”游戲,在不斷改進中學習pygame編程

目錄 前言 改進過程一 增加提示信息 原版幫助摘要 pygame.draw pygame.font class Rect class Surface 改進過程二 增加顯示得分 改進過程三 增加背景景樂 增加提示音效 音樂切換 靜音切換 mixer.music.play 注意事項 原版幫助摘要 pygame.mixer pygame.mix…

kvm和vmware有什么區別?如何選擇?

一、kvm和vmware的區別 VMware vSphere 平臺 VMware 可以提供 ESXi 虛擬機監控程序和 vSphere 虛擬化平臺。VMware ESXi 是一個能夠直接安裝到物理服務器上的裸機虛擬機監控程序,可以幫你整合硬件。你可以用 VMware 的虛擬化技術來創建和部署虛擬機(VM…

HTML詳解連載(7)

HTML詳解連載(7) 專欄鏈接 [link](http://t.csdn.cn/xF0H3)下面進行專欄介紹 開始嘍結構偽類選擇器作用 :nth-child(公式)作用舉例 偽元素選擇器作用注意: PxCoook作用盒子模型-重要組成部分 盒子模型-邊框線屬性名屬性…

excel中定位條件,excel中有哪些數據類型、excel常見錯誤值、查找與替換

一、如何定位條件 操作步驟:開始 - 查找和選擇 - 定位條件(ctrl G 或 F5) 注:如果F5不可用,可能是這個快捷鍵被占用了 案例:使用定位條件選擇取余中空單元格,填入100,按組合鍵ct…

【LeetCode75】第三十三題 二叉樹的最大深度

目錄 題目: 示例: 分析: 代碼: 題目: 示例: 分析: 從這一題開始,LeetCode75進入到了二叉樹章節。 這邊建議不熟悉二叉樹的小伙伴可以先去做做力扣的前序遍歷,中序遍…

使用git rebase 之后的如何恢復到原始狀態

我們常常喜歡使用git rebase去切換分支提交代碼,操作流程就是: 先切換分支:比如當前是master 我們修改了一堆代碼產生一個commit id :5555555567777 那么我們常常比較懶就直接切換了:git checkout dev 然后呢?使用命令git rebase 5555555567777,想把這筆修改提交到d…

iPhone上的個人熱點丟失了怎么辦?如何修復iPhone上不見的個人熱點?

個人熱點功能可將我們的iPhone手機轉變為 Wi-Fi 熱點,有了Wi-Fi 熱點后就可以與附近的其他設備共享其互聯網連接。 一般情況下,個人熱點打開就可以使用,但也有部分用戶在升級系統或越獄后發現 iPhone 的個人熱點消失了。 iPhone上的個人熱點…

antd5源碼調試環境搭建(window系統)

將antd源碼克隆至本地 $ git clone gitgithub.com:ant-design/ant-design.git $ cd ant-design $ npm install $ npm start前提安裝python3、安裝node版本18版本 不然后續安裝依賴會報python3相關的錯誤。 項目需要使用git 初始化 不然會報husky相關的錯誤 git init重新安…

【論文解讀】Hybrid-SORT: Weak Cues Matter for Online Multi-Object Tracking

因為Hybrid-SORT的baseline是基于OCSORT進行改進的,在這之前建議先了解byteTrack和【】的相關知識 1.介紹 1.1 基本框架 多目標跟蹤(MOT)將問題分為兩個子任務。第一個任務是檢測每個幀中的對象。第二個任務是將它們在不同的框架中聯系起來。關聯任務主要通過顯式…

RabbitMq-發布確認高級(避坑指南版)

在初學rabbitMq的時候,伙伴們肯定已經接觸到了“發布確認”的概念,但是到了后期學習中,會接觸到“springboot”中使用“發布確認”高級的概念。后者主要是解決什么問題呢?或者是什么樣的場景引出這樣的概念呢? 在生產環…

day45 ● 70. 爬樓梯 (進階)● 322. 零錢兌換 ● 279.完全平方數

70. 爬樓梯 class Solution {public int climbStairs(int n) {if(n <2) return n;int[] dp new int [n];dp[0] 1;dp[1] 2;for(int i 2; i< n;i){dp[i] dp[i-1] dp[i-2];}return dp[n-1];} } 322. 零錢兌換 class Solution {public int coinChange(int[] coins, in…

為什么kafka 需要 subscribe 的 group.id?我們是否需要使用 commitSync 手動提交偏移量?

目錄 一、為什么需要帶有 subscribe 的 group.id二、我們需要使用commitSync手動提交偏移量嗎&#xff1f;三、如果我想手動提交偏移量&#xff0c;該怎么做&#xff1f; 一、為什么需要帶有 subscribe 的 group.id 消費概念&#xff1a; Kafka 使用消費者組的概念來實現主題的…

vscode | linux | c++ intelliense 被棄用解決方案

每日一句&#xff0c;vscode用的爽是爽&#xff0c;主要是可配置太強了。如果也很會研究&#xff0c;可以直接去咸魚接單了 廢話少說&#xff0c;直接整。 用著用著說是c intelliense被棄用&#xff0c;很多輔助功能無法使用&#xff0c;像查看定義、查看引用、函數跳轉、智能提…

基于Rust的QuickLZ壓縮算法的詳細實現與分析

1. 引言 QuickLZ是一種被廣泛應用的高效壓縮算法。在許多應用中&#xff0c;快速的數據壓縮和解壓縮是非常關鍵的&#xff0c;特別是在網絡傳輸和存儲空間有限的場景中。為了滿足現代軟件開發的需求&#xff0c;我們將使用Rust語言來實現這一算法。Rust是一種專為系統級編程而…

Nodejs沙箱逃逸--總結

一、沙箱逃逸概念 JavaScript和Nodejs之間有什么區別&#xff1a;JavaScript用在瀏覽器前端&#xff0c;后來將Chrome中的v8引擎單獨拿出來為JavaScript單獨開發了一個運行環境&#xff0c;因此JavaScript也可以作為一門后端語言&#xff0c;寫在后端&#xff08;服務端&#…

七夕特輯——3D愛心(可監聽鼠標移動)

前言 「作者主頁」&#xff1a;雪碧有白泡泡 「個人網站」&#xff1a;雪碧的個人網站 「推薦專欄」&#xff1a; ★java一站式服務 ★ ★ React從入門到精通★ ★前端炫酷代碼分享 ★ ★ 從0到英雄&#xff0c;vue成神之路★ ★ uniapp-從構建到提升★ ★ 從0到英雄&#xff…

【005】ts學習筆記【函數擴展】

函數擴展 參數類型 //注意&#xff0c;參數不能多傳&#xff0c;也不能少傳 必須按照約定的類型來 const fn (name: string , age : number ) : string > {return name age }let desc fn( "張三", 18) console.log(desc)可選參數與默認值 //可選的參數 和 默…

深入理解Flink Mailbox線程模型

文章目錄 整體設計processMail1.Checkpoint Tigger2.ProcessingTime Timer Trigger processInput兼容SourceStreamTask 整體設計 Mailbox線程模型通過引入阻塞隊列配合一個Mailbox線程的方式&#xff0c;可以輕松修改StreamTask內部狀態的修改。Checkpoint、ProcessingTime Ti…

@Repeatable的作用以及具體如何使用

文章目錄 1. 前言2. 先說結論3. 案例演示 1. 前言 最近無意看到某些注解上有Repeatable&#xff0c;出于比較好奇&#xff0c;因此稍微研究并寫下此文章。 2. 先說結論 Repeatable的作用&#xff1a;使被他注釋的注解可以在同一個地方重復使用。 具體使用如下&#xff1a; T…

CentOS7源碼安裝MySQL詳細教程

&#x1f60a; 作者&#xff1a; Eric &#x1f496; 主頁&#xff1a; https://blog.csdn.net/weixin_47316183?typeblog &#x1f389; 主題&#xff1a;CentOS7源碼安裝MySQL詳細教程 ?? 創作時間&#xff1a; 2023年08月014日 文章目錄 1、安裝的四種方式2、源碼安裝…