場景解決方案 附近的人

2021-09-12 11:05:55 字數 1362 閱讀 9478

實現思路

想要不拖垮資料,要做到能走索引。就是跟你無關的點,不要掃瞄。減少掃瞄行數來實現減輕資料庫的壓力。那麼減少掃瞄行數肯定要想到索引。可是經緯度有兩個字段,且查詢條件無論怎麼寫都沒辦法走索引。那麼唯一能想到的就是二維變一維。

geohash基本原理是將地球理解為乙個二維平面,將平面遞迴分解成更小的子塊,每個子塊在一定經緯度範圍內擁有相同的編碼,這種方式簡單粗暴,可以滿足對小規模的資料進行經緯度的檢索。

兩個點的距離越近,他們的編碼字首部分就相同,字首部分相同越多,代表距離越近 。然後我們做資料庫掃瞄的時候 可以where geohash like 'code%'這樣就起到了走索引從而優化了執行效率。

認識geohash

1)geohash將二維的經緯度轉換成字串,比如下圖展示了北京9個區域的geohash字串,分別是wx4er,wx4g2、wx4g3等等,每乙個字串代表了某一矩形區域。也就是說,這個矩形區域內所有的點(經緯度座標)都共享相同的geohash字串,這樣既可以保護隱私(只表示大概區域位置而不是具體的點),又比較容易做快取,比如左上角這個區域內的使用者不斷傳送位置資訊請求餐館資料,由於這些使用者的geohash字串都是wx4er,所以可以把wx4er當作key,把該區域的餐館資訊當作value來進行快取,而如果不使用geohash的話,由於區域內的使用者傳來的經緯度是各不相同的,很難做快取。

2)字串越長,表示的範圍越精確。如圖所示,5位的編碼能表示10平方千公尺範圍的矩形區域,而6位編碼能表示更精細的區域(約0.34平方千公尺)

3)字串相似的表示距離相近(特殊情況後文闡述),這樣可以利用字串的字首匹配來查詢附近的poi資訊。如下兩個圖所示,乙個在城區,乙個在郊區,城區的geohash字串之間比較相似,郊區的字串之間也比較相似,而城區和郊區的geohash字串相似程度要低些。

通過上面的介紹我們知道了geohash就是一種將經緯度轉換成字串的方法,並且使得在大部分情況下,字串字首匹配越多的距離越近,回到我們的案例,根據所在位置查詢來查詢附近餐館時,只需要將所在位置經緯度轉換成geohash字串,並與各個餐館的geohash字串進行字首匹配,匹配越多的距離越近。

大資料場景化解決方案

1.大資料的概念 維基百科的定義 大資料是指利用常用軟體工具捕獲 管理和處理資料所耗時間超過可容忍時間的資料集。2.大資料主流技術 資料採集 資料儲存與管理 大資料利用分布式檔案系統hdfs hbase hive,實現對結構化 半結構化和非結構化資料的儲存和管理。資料處理與分析 利用分布式並行程式設...

PHP 併發場景的幾種解決方案

php 併發場景的幾種解決方案 在秒殺,搶購等併發場景下,可能會出現超賣的現象,在 php 語言中並沒有原生提供併發的解決方案,因此就需要借助其他方式來實現併發控制。列出常見的解決方案有 使用佇列,額外起乙個程序處理佇列,併發請求都放到佇列中,由額外程序序列處理,併發問題就不存在了,但是要額外程序支...

有趣的業務場景及解決方案

問題一 由於sap中技術搭建bom時維護金工板材數量使用的是板材淨重,與實際生產過程中領用量存在差異,導致產品報工反衝板材時,差異留存在庫存中,需要手工核算調整。解決方案 新方案通過在系統中錄入鈑金程式單,獲取板材實際用料,並關聯程式單對應的生產訂單,按照生產訂單中,板材淨重換算分配比例,將板材實際...