華為雲PB級數據庫GaussDB(for Redis)介紹第四期:高斯 Geo的介紹與應用


摘要:高斯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官方博客。

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM