千万级别以上的地图兴趣点(POI)的快速查找测试

来源:互联网 发布:淘宝代销退货如处理 编辑:程序博客网 时间:2024/05/02 04:20

近期,终于有点时间,将之前的地图兴趣点爬虫程序(http://blog.csdn.net/sparkexpert/article/details/51554813)完善了下,并用了七天的时间爬取了覆盖全国的任一地区的所有类别的兴趣点数据。


数据下载还是一个艰难的过程,不过幸运的是,采用了新方法之后,基本上很少需要人工去干预,当然也会有网络的限制,但是基本上同时开辟5个下载通道,速度一直是嗖嗖的。


下载完成后,由于没有直接处理,只是下载了JSON格式的文本数据,约占磁盘空间60G以上。而汇总的POI个数则有好几千万。(目前有些超出范围还下载得不全,主要原因是网站服务端的限制,只允许下载前几页。当然这个也有办法处理,只是目前没有太计较于这些。)


那么下载数据之后,就在琢磨如何能够快速查找数据,像百度谷歌等各种地图网站加载数据是非常快的,那么如何去实现这个步骤呢。本文主要就是解决这个问题。


于是采用redis的HASH来进行每个兴趣点的存储。处理过程中会过滤掉一些重复的键值,但这个过滤是有条件的,如报刊亭,可能有很多同样的键值,但是它们都是独立的,就需要在这些后缀添加个0,1,2,.....



下附一张在redis客户端查找的个数。这张图只是在导入过程中随便截的图。实际上已经是好几千万了。



为了验证查询效率,进行了查找,一种是直接查找某个城市的某种类别的数据,如图所示:


可以说,用redis来做地图POI缓存,速度还是特别快的。在下面的状态栏实时显示的了查询所占用的时间,非常少的时间就返回结果了。


为了更好地测试对全部信息的查找,如在不限制城市,不限制类别进行查找,其结果如下:



发现总的测试时间也就5秒多一些,这还是在一台非常普通的PC上的测试。而真正要做地图服务器,则可以采用大内存高性能服务器,完全可以做得毫秒级响应。


不过采用这种列式数据库有个不好的地方,就是没有办法在上面直接做附近POI查询。(这在键值上也没有办法做到。)这估计还得依靠以前近格网索引的办法才能实现吧。(不过要是限制在某个城市,某种类别的,用redis肯定也能够做到,毕竟在小数据上做查询效率还是很高的)

0 0