Redis Geo: Redis新增位置查询功能

转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/144.htmlhtml

 

移动互联网增进了人与人之间的联系,其中基于位置信息的服务(Location Based Service,LBS)起到很重要的促进做用。在移动互联网的大环境下,每一个手机都变成了一个位置追踪设备,为人们提供了很是丰富的位置服务。不管是附近的人,仍是摇一摇等耳熟能详的应用都须要LBS在后台的支撑。可是,目前位置信息的使用过程当中存在诸多挑战如相邻计算不许确等。因为常常面对海量数据请求,一般位置服务的计算都须要数据库来完成,Redis Geo模块所以而生,旨在提供精准并且稳定的位置服务。程序员

在位置服务的挑战中,常见的是计算两个位置是否相邻的问题。位置信息由一个四元组构成,(经度、纬度、海拔、时间),在使用过程当中比较经常使用的是经纬度。想要进行相邻计算,须要一个二维索引。问题是现有的基于简单的一维索引和划范围搜索实现的二维索引,基本只适用于整数查询,并不适用于经纬度这种位置的类似度查询。意识到了这个困难,且伴随位置服务需求日益增加的状况,2008年Gustavo Niemeyer提出了 Geohash ,简单来讲是一个32位的编码字符串来将位置可以编码整合成为可范围查找的实体。因为大多数数据库都支持范围查询,所以位置就变得可查找和计算。原始Geohash的缺点是查询的准确度有时较低,后续开发者又创造了52位Geohash等来知足定制化的需求。redis

NoSQL中,Mongodb对位置服务的 支持较好 ,稳定地支持了foursquare等应用。而HBase也曾推出 相关教程 支持在应用中引入位置服务。做为优秀NoSQL数据库的典范,Redis在位置计算方面却略显薄弱。为此,意大利程序员Salvatore Sanfilippo(antirez@GitHub )维护了一个专门为Redis增长位置计算的分支。发布以后,得到领域内的一致承认,短短几个月收获多达1万3千余个星标。在 Hacker News 上,许多程序员也表示对Redis位置查询的功能相见恨晚,你们积极讨论了Redis Geo存在的必要性,以及后续应该从性能和查询准确性上提高的若干手段,甚至有人进一步贡献了Redis Geo的 Docker镜像 。数据库

更多关于Redis Geo的细节能够参考antirez给出的 文档页面 ,其中包括了Redis Geo的基本使用,例如添加经纬度、计算经纬度类似度、计算城市之间的包含关系等多种位置计算功能。antirez还进一步解释了Redis Geo的工做原理,以及该模块在Benchmark上运行的性能表现,每秒可达近5百万次编解码,能知足大部分位置服务应用的需求。性能

相关文章
相关标签/搜索