华为云企业级redis揭秘第四期:高斯redis geo介绍与应用-星辰平台

发表于 2021/03/09 11:09:32 2021/03/09
【摘要】 【摘要】 云数据库gaussdb(for redis)作为华为云旗下企业级redis,致力于为客户提供稳定可靠、超高并发,且能够极速弹性扩容的kv存储服务。

lbs(location based service,基于位置的服务)有非常广泛的应用场景,最常见的应用就是poi(point of interest)的查询,例如用户查找附近的人,附近的餐厅,附近的外卖商家等等。lbs的实现需要数据库存储地理位置信息,开源redis是一个功能强、效率高、使用方便的缓存数据库,实现了地理位置存储的功能,可以用于lbs的数据存储。

开源redis 3.2以上版本的geo功能支持了地理位置信息存储管理,但是内存限制导致没有大规模应用。gaussdb(for redis)(下文简称高斯redis)兼容开源redis的geo功能,使用磁盘替代内存,突破了开源redis的内存限制,可以完美解决geo的大规模应用问题。

redis的geo功能支持如下 6 个 geo 的相关操作:

  • geoadd:添加某个地理位置的坐标。

 

 

  • geopos:获取某个地理位置的坐标。

 

  • geodist:获取两个地理位置的距离。

 

  • geohash:获取某个地理位置的geohash值。

 

  • georadius:根据给定地理位置坐标获取指定范围内的地理位置集合。

 

  • georadiusbymember:根据给定地理位置获取指定范围内的地理位置集合。

 

redis geo功能的空间索引采用 geohash 原理,配合zset集合存储,查询效率接近 log(n)。

存储地理位置信息的应用非常广泛,而开源redis geo功能也可以存储地理位置信息,并且查询效率高,为什么没有得到大规模的应用呢?

分析存储地理位置信息的场景,都有如下特点:

  • 数据量大

大部分场景存储地理位置信息的数据量都是tb级以上的,开源redis的数据全部存放在内存中,节点的内存大小固定,要支持大数据量的地理位置信息存储,必须增加节点数,这会造成成本过高、大集群维护困难等问题。

  • 数据持续增长

随着用户的增长,地理位置信息的数据也在持续增长,要求底层存储能够无损扩容。但开源redis扩容需要重新划分hash槽进行数据迁移,必定会影响业务。

  • 高并发读写

开源redis主从模式下只有主节点可写,主节点高并发数据写入、高并发数据读出,写入速度过高容易造成主从堆积,数据丢失。

除此之外,还需要考虑备份恢复,数据一致性,扩容,高可用等数据库系统能力。

  • 备份恢复

开源redis提供rdb和aof方式备份数据,但当数据规模大时,rdb方式恢复的数据一致性和完整性较差,aof方式数据恢复的效率低。

  • 数据一致性

开源redis的主从采用异步复制,会出现数据不一致的情况。

  • 高可用

开源redis如果同时挂掉一对主从节点,部分数据将不可用,容错能力弱。

高斯redis基于华为自研分布式存储系统dfv,支持pb级大规模的数据存储。解决了开源redis高成本、存储数据量小、数据不一致等问题,具有秒扩容、超可用、强一致、低成本、自动备份、抗写能力强的优势。

 

高斯redis geo功能适用于数据量大、读写频繁的场景。在外卖平台、点评平台、找房平台中,餐馆的数据、外卖骑手的数据、用户的数据、房源的数据这些数据随着用户增长,数据量过亿,对应的地理位置信息的数据量可到数tb级别,正是高斯redis适用的场景。下面介绍在不同场景中geo功能的应用。

4.1外卖场景:

(1)用户下完外卖订单后,使用geoadd命令加入骑手的位置。

(2)使用geopos命令,用户可获得骑手的具体位置。

(3)使用georadius/ georadiusbymember命令骑手查看附近可配送的订单。

(4)使用geodist命令用户可获得骑手的距离。

 

4.2点评场景:

(1)新的店铺加入点评平台,使用geoadd命令,添加新店铺的位置。

(2)使用geopos命令,用户获得店铺的具体位置。

(3)使用geodist命令,用户可获得与店铺的距离。

(4)使用georadius/ georadiusbymember,用户可查找距离500米范围的店铺。

 

4.3找房场景:

(1)新的房源加入房源平台中,使用geoadd命令,添加新房源的位置。

(2)使用geopos命令,用户可获得房源的具体位置。

(3)使用geodist命令,用户可获得与房源的距离。

(4)使用georadius/ georadiusbymember命令,用户查找附近1km范围内的房源。

 

开源redis的geo功能查询效率高,但存在存储容量小、抗写能力弱、可用性差等明显缺点,导致了其geo功能一直没有广泛应用。高斯redis突破了开源redis的内存限制,以高性能磁盘存储数据,具有秒扩容、超可用、强一致、低成本、自动备份、抗写能力强的特点,因此高斯redis适用于大量地理位置信息存储的场景。


本文作者:华为云数据库gaussdb(for redis)团队

杭州/西安/深圳简历投递:[email protected]

gaussdb(for redis)产品星辰平台主页:

更多技术文章,关注gaussdb(for redis)官方博客:


【星辰平台的版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。