1. 程式人生 > >微信、陌陌的架構方案分析(LBS之二)

微信、陌陌的架構方案分析(LBS之二)

目標

解決大型應用(微信、陌陌級別)中,使用者經緯度在不斷更新,使用者查詢頻繁的問題。(每分鐘1000W級)

方案A

由上文,簡單可得;
1、僅需每分鐘將使用者的經緯度,上報到資料庫;
2、然後每次使用者查詢附近好友時,通過 LIKE ‘wm3yr3%’,即可獲取

缺點:稍有一定資料量,對資料庫的鴨梨可想而知

方案B

策略

假象把中國分成,若干個一平方公里的單元格,
1、使用者位置的變更,理解為一個單元格移動到另外一個單元格(或者不移動)
2、使用者查詢附近,理解為查詢,自己所在方塊的的所有人

資料結構

1、使用者基本資訊 緯度、經度、GeoHash值(經緯度,僅用於後期距離計算)
2、單元格 集合(使用者1,使用者2,…)

儲存工具

1、redis string(key->value) 結構,儲存使用者基本資訊
2、redis set(集合) 結構,以GeoHash值,前6位作為key(約表示一平方千米),儲存單元格的使用者群

演算法流程

1、更新使用者資訊,先刪除使用者原所在集合,再更新當前使用者資訊,最後更新當前使用者所在集合
2、查詢附近,直接查詢,所在單元格集合所有使用者ID

具體實現

幫助
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556

相關推薦

架構方案分析LBS

目標解決大型應用(微信、陌陌級別)中,使用者經緯度在不斷更新,使用者查詢頻繁的問題。(每分鐘1000W級)方案A由上文,簡單可得;1、僅需每分鐘將使用者的經緯度,上報到資料庫;2、然後每次使用者查詢附近好友時,通過 LIKE ‘wm3yr3%’,即可獲取缺點:稍有一定資料量,

手把手實現網頁授權和支付,附源代碼VUE and thinkPHP

nec ble 名單 ret 一次 hash 掃一掃 網頁 ada wechat github 手把手實現微信網頁授權和微信支付,附源代碼(VUE and thinkPHP) 概述 公眾號開發是痛苦的,痛苦在好多問題開發者文檔是沒有提到的,是需要你猜的. 在開發過程中翻

小程式之下拉列表實現附完整原始碼

目錄 一、效果圖 二、實現原理 三、原始碼 四、專案下載 同類文章推薦: 更多幹貨關注公眾號:   一、效果圖 二、實現原理 跟網頁的下拉列表實現是一樣的,剛剛開始預設下拉的內容的是不顯示的(display:none),然後通過點選的時

WebApi接收小程式上傳的圖片二進位制檔案流並儲存在伺服器指定路徑

找了好多天都沒找到小程式批量上傳圖片的方法,然後我現在的邏輯是: 取到上傳圖片的集合,迴圈呼叫小程式wx.UploadFile方法,依次上傳 後端取到檔案之後生成唯一MD5碼(相同的檔案生成的MD5碼是唯一的),然後取前兩位後兩位建立資料夾,儲存圖片前判斷下圖片是否存在。(

授權登入及儲存使用者資訊fastadmin開發專案

最近做了一個微信投票系統,這是第一次開發微信專案,所以特此記錄一下 微信投票系統,最優先想到的就是授權登入,以及獲取使用者資訊 1.首先需要申請微信公眾號(此次使用的是服務號) 2.在微信公眾平臺基本配

小程式檔案預覽原始碼可以直接用

微信小程式的檔案預覽 微信小程式的檔案預覽需要先使用wx.downloadFile下載檔案,然後使用下載檔案的臨時路徑通過wx.openDocument進行檔案的預覽 wxml程式碼: <button bindtap='preview'>簡歷預覽&

[移動] Android推送方案分析MQTT/XMPP/GCM

本文主旨在於,對目前Android平臺上最主流的幾種訊息推送方案進行分析和對比,比較客觀地反映出這些推送方案的優缺點,幫助大家選擇最合適的實施方案。方案1、使用GCM服務(Google Cloud Messaging)簡介:Google推出的雲訊息服務,即第二代的C2DM。優

公眾平臺java開發詳解工程程式碼+解析

說明:本次的教程主要是對微信公眾平臺開發者模式的講解,網路上很多類似文章,但很多都讓初學微信開發的人一頭霧水,所以總結自己的微信開發經驗,將微信開發的整個過程系統的列出,並對主要程式碼進行講解分析,讓初學者儘快上手。在閱讀本文之前,應對微信公眾平臺的官方開發文件有所瞭解,知

開發者工具程式碼編輯區消失程式碼未顯示

當微信開發者工具程式碼編輯區消失,寫的程式碼顯示不了時: 在編輯器控制檯輸入:openVendor 回車            會開啟一個資料夾:C:\Users\Administrator\AppData\Local\微信web開發者工具\User Data\Weapp

關於線上客服系統的實現已經證實可用

1.微信線上客服系統需要認證服務號資格,如果沒有認證是沒辦法完成 和大家分享下我實現的方式: 微信前端接入資訊到資料庫->做一個JSP 頁面定時重新整理(或者在有資料插入的時候涮新)->取使用者發來的資料 主要是openid 和內容(也支援語音和圖片)到JSP

jssdk批量新增卡券介面踩坑經驗

1)首先是官方介面文件: 2)坑一:接入準備   1、需要在微信公眾號平臺裡配置“JS介面安全域名”,位置:公眾號設定-》功能設定-》JS介面安全域名;   2、配置“網頁授權域名”(獲取openid時需要用到,怎麼獲取這裡就不說了),位置同上:公眾號設定-》功能設定-》網頁授權域名 3)坑二:ap

支付code=-1的問題解決坑之下劃線

最近製作微信支付app支付,發現官方文件實在是很多坑,現把發現的問題列出如下。 關於支付返回值code=-1,發現網上很多文章都提及關於安卓簽名錯誤、包名錯誤等等,但是code=-1的情況其實不僅限於keystore簽名問題,以下是我們遇到的問題。 1、第一步“統一下單”中

小遊戲關係鏈的使用排行榜的顯示

前言 微信小遊戲屬於微信小程式的一個類目,小遊戲對比於普通的h5遊戲,其很大的一個特點是微信提供的關係鏈資料的使用,你可以獲得同玩這個遊戲的微信好友的資料,或者你在某個群的使用者資料 概念 需要了解關係鏈api和開放域,主域等概念。以下著重介紹具體的api使用 w

內分享網頁,顯示圖片PHP+JS版本

1、先登入微信公眾平臺進入“公眾號設定”的“功能設定”裡填寫“JS介面安全域名”。 2、需要指定微信公眾號的ID 和 密碼(後面設定會用到)。 3、需要三個PHP檔案 3.1 jssdk.php <?php class JSSDK {   private $ap

小程式 java服務端記附部署過程

1、檔案上傳,使用springmvc一直不行,後來看到別人有一樣的情況改成了serverlet就可以了2、因為要進行語音識別成文字,上傳的語音檔案是silk格式,需要用到訊飛的語音識別所以必須轉成wav,用到了kn007大神的這個工具https://github.com/kn

小程序 - 沈浸式抽屜非組件

mage 分享 span img http image https draw 下載 高度有限制,可作為管理界面,點擊下載示例:drawer 微信小程序 - 沈浸式抽屜(非組件)

IM 的架構分析

從現在網際網路的發展而言,IM和視訊(包括IM裡面視訊通話)是一個方向,這些都應該成為網際網路的基礎設施,就像瀏覽器一樣。現在IM還沒有一個很好的解決方案,XMPP並不能很好地做到業務邏輯獨立開來。從IM的本質來看,IM其實就是將一條訊息從一個地方傳輸到另外一個地方,這個和TCP很像,為什麼不實現一個高階點的

等著名IM軟體設計架構詳解

從現在網際網路的發展而言,IM和視訊(包括IM裡面視訊通話)是一個方向,這些都應該成為網際網路的基礎設施,就像瀏覽器一樣。現在IM還沒有一個很好的解決方案,XMPP並不能很好地做到業務邏輯獨立開來。從IM的本質來看,IM其實就是將一條訊息從一個地方傳輸到另外一個地方,這個和TCP很像,為什麼不實現一個高階點的

shareSDK的初步使用shareSDK中qq等兼容問題,以及cocoapods支持架構沖突問題的解決

hone 組件 友盟 環境 end 信息 uil platform i386 第一次使用shareSDK來做第三方分享,可是。昨天一天都是在調試bug,一直錯誤不斷! 先說下我的開發環境: xcode:5.1 真機調試:iPhone5s 我們都知道xcode5.1以後開