如何快速写一个LBS服务器

发表于2015-09-17
评论2 2k浏览

如何快速写一个LBS服务器

 

现在的手游基本上都有一个附近的人的功能,说这个功能是约炮神器也好,反正CH说做就做,而且一定要做得快才好。互娱公共技术平台已经有一个基于网格的LBS组件,此文的主要目的在于开拓视野,也不妨碍有些项目的变态需求采用本文方案。

 

不知道有多少同事知道boost库里有一个spatial_index组件,知道的一定知道怎么用,下面就不用看了。

 

boost::geometry::spatial_index(以下简称spatial_index)是一个部分支持boost::interprocess库的rtree实现(部分支持的原因后面会讲)。利用该库可以快速搭建LBS服务器,实现的组件头文件+实现文件总共200行左右。

 

在本组件中,我们使用boost::interprocess::map配合spatial_index实现如下功能

1. insert 添加地理位置

2. erase OPEN_ID删除地理位置

3. query 查询附近的N个位置。

4. 清除过期位置

 

同事们还可以根据自己的需求添加接口,该组件的一个缺点是spatial_index实现内部使用了虚函数,服务器bin文件更新后,数据文件将不可用。

 

实测性能数据(VC2机器):

 

插入1M随机数据耗时:11.376S

查询1M100个附近的人耗时:27.581S

1M数据内存消耗:200MB


本文中采用了linear平衡算法,插入快,查询慢。同事们也可以采用其他算法,算法的performance如下图所示:

 

 

具体实现如附件


如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引