使用MongoDB显示地理邻居的内容

时间:2014-12-08 08:43:21

标签: mongodb geolocation geospatial

我正在开发一个移动应用程序,显示在用户附近上传的内容。所以基本要求是:

  1. 用户旅行时用户的位置可能会发生变化
  2. 将向用户显示相邻内容的列表。邻居内容由在X-mile圈中创建的内容定义,用户的位置位于中心。
  3. 列表中的内容可以尽可能旧。这意味着内容列表必须具有分页功能。拉起来加载更多。
  4. 应用程序的规模可能很大
  5. 我打算使用MongoDB进行数据存储。 MongoDB支持地理空间索引。所以我可以搜索在地理点附近创建的任何文档。但该计划从一开始就是以非常高的规模为目标。这意味着我们需要在Mongo中使用分片。但Mongo不允许地理空间索引作为分片键索引。这意味着如果我尝试根据地理空间索引查找数据,它可能会转到所有分片来获取数据。然后Mongo将收集数据并过滤掉我需要的数据量。这看起来不是我的最佳流程。

    为了解决这个问题,我计划使用包含内容的低精度地理位置的分片索引。让我们说如果位置是30.73983390°N,76.78270199°E,根据我的算法,低精度地理位置几乎就像30.7398°N,76.7827°E。这种低精度地理位置将作为字符串存储在文档中,例如, 30.7398:76.7827。现在我可以根据表示为字符串的低精度地理位置创建分片。我获取记录的查询看起来像:

    获取100个文件WHERE

    1. 低精度位置字符串= .... //这将使用分片索引
      1. 在用户位置的XYZ内的文档的地理位置。这将使用地理空间索引。
      2. 这会让我受益,查询将转到一个分片(第一个条件)。然后将在该分片上运行地理空间查询(第二个条件)。这样,Mongo端不需要从不同的分片收集数据,然后根据所需的内容量进行修剪。

        解决这个问题的更好方法是什么?

0 个答案:

没有答案