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

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

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

  1. 华为云PB级数据库GaussDB(for Redis)揭秘第八期:用高斯 Redis 进行计数

    摘要:高斯Redis,计数的最佳选择! 一.背景 当我们打开手机刷微博时,就要开始和各种各样的计数器打交道了.我们注册一个帐号后,微博就会给我们记录一组数据:关注数.粉丝数.动态数-:我们刷帖时,关注 ...

  2. 华为云PB级数据库GaussDB(for Redis)揭秘第七期:高斯Redis与强一致

    摘要:在KV数据库领域,"强一致性"不仅是一个技术名词,它更是业务与运维的重要需求. 清明刚过,五一假期就要来了.大好春光,不如去婺源看油菜花吧!小云迅速打开APP刷出余票2张,赶 ...

  3. 第四节:Geo类型介绍以及Redis批量操作、事务、分布式锁

    一. Geo类型 1. 类型说明 Geo 是 Redis 3.2 版本后新增的数据类型,用来保存兴趣点(POI,point of interest)的坐标信息.可以实现计算两 POI 之间的距离.获取 ...

  4. 华为云企业级Redis评测第一期:稳定性与扩容表现

    摘要:采用Redis Labs推出的多线程压测工具memtier_benchmark对比测试下GaussDB(for Redis) 和原生Redis的特性差异. 本文分享自华为云社区<华为云企业 ...

  5. 即时通讯系统为什么选择GaussDB(for Redis)?

    摘要:如果你需要一款稳定可靠的高性能企业级KV数据库,不妨试试GaussDB(for Redis). 每当网络上爆出热点新闻,混迹于各个社交媒体的小伙伴们全都开启了讨论模式.一条消息的产生是如何在群聊 ...

  6. 华为云企业级Redis揭秘第16期:超越开源Redis的ACID"真"事务

    摘要: 开源Redis只支持伪事务,应用场景受限.高斯Redis发布企业级事务特性,支持完备ACID,为交易.库存等上层业务带来全新可能. 本文分享自华为云社区<华为云企业级Redis揭秘第16 ...

  7. 升级的华为云“GaussDB”还能战否?

    摘要:芯片.操作系统.数据库是现代信息技术领域的三大核心基础,做数据库,不仅需要技术和投入,对华为这种做通讯起家的企业,更需要的是一种并非玩票性质的态度. GaussDB,不仅蕴含着华为对数学和科学的 ...

  8. 一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?

    摘要:近日,华为云数据库业务总裁苏光牛在ACMUG中国MySQL用户组主办的 "华为云专场" 技术沙龙中分享了华为云数据库重磅新品GaussDB的核心能力与竞争优势.那么, Gau ...

  9. 揭秘GaussDB(for Redis):全面对比Codis

    摘要:Codis集群在国内Redis生态圈很流行,社区已停止维护.本文从架构和特性两方面对比,带你感受华为云GaussDB(for Redis)的全新价值. 本文分享自华为云社区<华为云Gaus ...

  10. 华为云分布式缓存服务DCS与开源服务差异对比

    华为云分布式缓存DCS提供单机.主备.集群等丰富的实例类型,满足用户高读写性能及快速数据访问的业务诉求.支持丰富的实例管理操作,帮助用户省去运维烦恼.用户可以聚焦于业务逻辑本身,而无需过多考虑部署.监 ...

随机推荐

  1. 文心一言 VS 讯飞星火 VS chatgpt (125)-- 算法导论10.6 6题

    六.用go语言,任意有根树的左孩子右兄弟表示法中每个结点用到三个指针: leftchild.rightsibling 和parent.对于任何结点,都可以在常数时间到达其父结点,并在与其孩子数呈线性关 ...

  2. 如何在linux系统中安装python3.8.1 并卸载 python3.6.2 更新python3引导到3.8.1

    安装python3.8.1 步骤 1:检查Python版本 在终端中输入以下命令来检查当前安装的Python版本: python --version 步骤 2:安装编译Python所需的依赖项 更新系 ...

  3. MVC开发

    我们通过前面的章节可以看到:https://www.liaoxuefeng.com/wiki/1252599548343744/1266264917931808 Servlet适合编写Java代码,实 ...

  4. Util应用框架基础(三) - 面向切面编程(AspectCore AOP)

    本节介绍Util应用框架对AspectCore AOP的使用. 概述 有些问题需要在系统中全局处理,比如记录异常错误日志. 如果在每个出现问题的地方进行处理,不仅费力,还可能产生大量冗余代码,并打断业 ...

  5. 【pwn】[SDCTF 2022]Horoscope--栈溢出,atoi函数绕过

    checksec检查一下,发现只开了nx,然后ida打开直接看主函数 发现fgets函数往s里面读入320个字节的数据,此处可造成溢出,再看看test和debug函数 void debug(){  t ...

  6. OpenGL 基础光照详解

    1. 光照 显示世界中,光照环境往往是相对复杂的.因为假设太阳作为世界的唯一光源,那么太阳光照在物体A上A将阳光进行反射后,A又做为一个新的光源共同作用于另一个物体B.所以于B来讲光源是复杂的.然而这 ...

  7. Webpack相关知识点

    webpack的优点 webpack从配置的入口出发,可以打包所有前端资源,同时可以配置多种loader来处理不同类型文件的转换,并且可以配置plugin来扩展模块打包流程,满足更多构建中特殊的需求, ...

  8. .NET8依赖注入新特性Keyed services

    什么是Keyed service Keyed service是指,为一个需要注入的服务定义一个Key Name,并使用使用Key Name检索依赖项注入 (DI) 服务的机制. 使用方法 通过调用 A ...

  9. echarts官网文档打开慢的解决方法

    echarts官网文档打开慢的解决方法由于我们在做大数据屏的时候需要很多echarts图表,这个过程中也会遇到需要查询echarts官网文档.手册.配置项的时候,但是由于网站在国外,访问很慢或者打不开 ...

  10. 【结对作业】第一周 | 学习体会day06

    初步做了app的页面 change作为mysql的关键字,不可以作为命名,否则报错 做了两条线路的中转 初步学习了frame标签,打算明天实现页面的部分切换