摘要:高斯 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 官网博客。
点击关注,第一工夫理解华为云陈腐技术~