摘要:高斯Redis的大規模地理位置信息存儲的解決方案。
1、背景
LBS(Location Based Service,基於位置的服務)有非常廣泛的應用場景,最常見的應用就是POI(Point of Interest)的查詢,例如用戶查找附近的人,附近的餐廳,附近的外賣商家等等。LBS的實現需要數據庫存儲地理位置信息,開源Redis是一個功能強、效率高、使用方便的緩存數據庫,實現了地理位置存儲的功能,可以用於LBS的數據存儲。
開源Redis 3.2以上版本的Geo功能支持了地理位置信息存儲管理,但是內存限制導致沒有大規模應用。GaussDB(for Redis)(下文簡稱高斯Redis)兼容開源Redis的Geo功能,使用磁盤替代內存,突破了開源Redis的內存限制,可以完美解決Geo的大規模應用問題。
2、開源Redis Geo介紹
Redis的Geo功能支持如下 6 個 Geo 的相關操作:
- geoadd:添加某個地理位置的坐標。
- geopos:獲取某個地理位置的坐標。
- geodist:獲取兩個地理位置的距離。
- geohash:獲取某個地理位置的geohash值。
- georadius:根據給定地理位置坐標獲取指定范圍內的地理位置集合。
- georadiusbymember:根據給定地理位置獲取指定范圍內的地理位置集合。
Redis Geo功能的空間索引采用 GeoHash 原理,配合zset集合存儲,查詢效率接近 log(N)。
3、為什么開源Redis Geo沒有廣泛應用?
存儲地理位置信息的應用非常廣泛,而開源Redis Geo功能也可以存儲地理位置信息,並且查詢效率高,為什么沒有得到大規模的應用呢?
分析存儲地理位置信息的場景,都有如下特點:
- 數據量大
大部分場景存儲地理位置信息的數據量都是TB級以上的,開源Redis的數據全部存放在內存中,節點的內存大小固定,要支持大數據量的地理位置信息存儲,必須增加節點數,這會造成成本過高、大集群維護困難等問題。
- 數據持續增長
隨着用戶的增長,地理位置信息的數據也在持續增長,要求底層存儲能夠無損擴容。但開源Redis擴容需要重新划分hash槽進行數據遷移,必定會影響業務。
- 高並發讀寫
開源Redis主從模式下只有主節點可寫,主節點高並發數據寫入、高並發數據讀出,寫入速度過高容易造成主從堆積,數據丟失。
除此之外,還需要考慮備份恢復,數據一致性,擴容,高可用等數據庫系統能力。
- 備份恢復
開源Redis提供RDB和AOF方式備份數據,但當數據規模大時,RDB方式恢復的數據一致性和完整性較差,AOF方式數據恢復的效率低。
- 數據一致性
開源Redis的主從采用異步復制,會出現數據不一致的情況。
- 高可用
開源Redis如果同時掛掉一對主從節點,部分數據將不可用,容錯能力弱。
4、高斯Redis為什么合適?
高斯Redis基於華為自研分布式存儲系統DFV,支持PB級大規模的數據存儲。解決了開源Redis高成本、存儲數據量小、數據不一致等問題,具有秒擴容、超可用、強一致、低成本、自動備份、抗寫能力強的優勢。
5、適用場景
高斯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范圍內的房源。
6、總結
開源Redis的Geo功能查詢效率高,但存在存儲容量小、抗寫能力弱、可用性差等明顯缺點,導致了其Geo功能一直沒有廣泛應用。高斯Redis突破了開源Redis的內存限制,以高性能磁盤存儲數據,具有秒擴容、超可用、強一致、低成本、自動備份、抗寫能力強的特點,因此高斯Redis適用於大量地理位置信息存儲的場景。
7、結束
本文作者:華為雲高斯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官方博客。