写点什么

华为云 PB 级数据库 GaussDB(for Redis) 介绍第四期:高斯 Geo 的介绍与应用

发布于: 2021 年 03 月 10 日

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


点击关注,第一时间了解华为云新鲜技术~


发布于: 2021 年 03 月 10 日阅读数: 42
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
华为云PB级数据库GaussDB(for Redis)介绍第四期:高斯 Geo的介绍与应用