摘要:高斯Redis的大規模地理位置信息存儲的解決方案。
一、背景
LBS(Location Based Service,基於位置的服務)有很是普遍的應用場景,最多見的應用就是POI(Point of Interest)的查詢,例如用戶查找附近的人,附近的餐廳,附近的外賣商家等等。LBS的實現須要數據庫存儲地理位置信息,開源Redis是一個功能強、效率高、使用方便的緩存數據庫,實現了地理位置存儲的功能,能夠用於LBS的數據存儲。html
開源Redis 3.2以上版本的Geo功能支持了地理位置信息存儲管理,可是內存限制致使沒有大規模應用。GaussDB(for Redis)(下文簡稱高斯Redis)兼容開源Redis的Geo功能,使用磁盤替代內存,突破了開源Redis的內存限制,能夠完美解決Geo的大規模應用問題。數據庫
二、開源Redis Geo介紹
Redis的Geo功能支持以下 6 個 Geo 的相關操做:緩存
- geoadd:添加某個地理位置的座標。
- geopos:獲取某個地理位置的座標。
- geodist:獲取兩個地理位置的距離。
- geohash:獲取某個地理位置的geohash值。
- georadius:根據給定地理位置座標獲取指定範圍內的地理位置集合。
- georadiusbymember:根據給定地理位置獲取指定範圍內的地理位置集合。
Redis Geo功能的空間索引採用 GeoHash 原理,配合zset集合存儲,查詢效率接近 log(N)。併發
三、爲何開源Redis Geo沒有普遍應用?
存儲地理位置信息的應用很是普遍,而開源Redis Geo功能也能夠存儲地理位置信息,而且查詢效率高,爲何沒有獲得大規模的應用呢?異步
分析存儲地理位置信息的場景,都有以下特色:分佈式
- 數據量大
大部分場景存儲地理位置信息的數據量都是TB級以上的,開源Redis的數據所有存放在內存中,節點的內存大小固定,要支持大數據量的地理位置信息存儲,必須增長節點數,這會形成成本太高、大集羣維護困難等問題。高併發
- 數據持續增加
隨着用戶的增加,地理位置信息的數據也在持續增加,要求底層存儲可以無損擴容。但開源Redis擴容須要從新劃分hash槽進行數據遷移,一定會影響業務。性能
- 高併發讀寫
開源Redis主從模式下只有主節點可寫,主節點高併發數據寫入、高併發數據讀出,寫入速度太高容易形成主從堆積,數據丟失。大數據
除此以外,還須要考慮備份恢復,數據一致性,擴容,高可用等數據庫系統能力。url
- 備份恢復
開源Redis提供RDB和AOF方式備份數據,但當數據規模大時,RDB方式恢復的數據一致性和完整性較差,AOF方式數據恢復的效率低。
- 數據一致性
開源Redis的主從採用異步複製,會出現數據不一致的狀況。
- 高可用
開源Redis若是同時掛掉一對主從節點,部分數據將不可用,容錯能力弱。
四、高斯Redis爲何合適?
高斯Redis基於華爲自研分佈式存儲系統DFV,支持PB級大規模的數據存儲。解決了開源Redis高成本、存儲數據量小、數據不一致等問題,具備秒擴容、超可用、強一致、低成本、自動備份、抗寫能力強的優點。
五、適用場景
高斯Redis Geo功能適用於數據量大、讀寫頻繁的場景。在外賣平臺、點評平臺、找房平臺中,餐館的數據、外賣騎手的數據、用戶的數據、房源的數據這些數據隨着用戶增加,數據量過億,對應的地理位置信息的數據量可到數TB級別,正是高斯Redis適用的場景。下面介紹在不一樣場景中Geo功能的應用。
5.1外賣場景:
(1)用戶下完外賣訂單後,使用geoadd命令加入騎手的位置。
(2)使用geopos命令,用戶可得到騎手的具體位置。
(3)使用georadius/ georadiusbymember命令騎手查看附近可配送的訂單。
(4)使用geodist命令用戶可得到騎手的距離。
5.2點評場景:
(1)新的店鋪加入點評平臺,使用geoadd命令,添加新店鋪的位置。
(2)使用geopos命令,用戶得到店鋪的具體位置。
(3)使用geodist命令,用戶可得到與店鋪的距離。
(4)使用georadius/ georadiusbymember,用戶可查找距離500米範圍的店鋪。
5.3找房場景:
(1)新的房源加入房源平臺中,使用geoadd命令,添加新房源的位置。
(2)使用geopos命令,用戶可得到房源的具體位置。
(3)使用geodist命令,用戶可得到與房源的距離。
(4)使用georadius/ georadiusbymember命令,用戶查找附近1km範圍內的房源。
六、總結
開源Redis的Geo功能查詢效率高,但存在存儲容量小、抗寫能力弱、可用性差等明顯缺點,致使了其Geo功能一直沒有普遍應用。高斯Redis突破了開源Redis的內存限制,以高性能磁盤存儲數據,具備秒擴容、超可用、強一致、低成本、自動備份、抗寫能力強的特色,所以高斯Redis適用於大量地理位置信息存儲的場景。
七、結束
本文做者:華爲雲高斯Redis團隊。
杭州西安深圳簡歷投遞:yuwenlong4@huawei.com
更多技術文章, 關注高斯Redis官方博客:https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813
PS:值此開年採購季之際,企業新用戶購買GaussDB (for Redis)4U16G任意存儲規格,內存可享3個月3折。另外還有多款雲數據庫包年低至2.7折,0門檻抽千元大獎、新購滿額送華爲手機P40 Pro 5G等多重福利,連接:https://activity.huaweicloud.com/dbs_Promotion/index.html
本文分享自華爲雲社區《華爲雲PB級數據庫GaussDB(for Redis)揭祕第四期:高斯 Redis Geo的介紹與應用》,原文做者:高斯Redis官方博客。