使用Parse作为后端的快速最近邻搜索

时间:2015-08-10 12:34:35

标签: android parse-platform cloud-code

所以我必须在我的应用程序上实现最近邻搜索功能,我目前正在使用Parse作为后端。到目前为止我所做的是执行查询并获得结果,然后对它们进行排序以获得前20-30个结果。但是,由于我的数据库已经扩展,我现在有大约4,000个位置(预计将达到大约15,000个),我必须在其上应用最近邻居搜索。这对于实时系统来说并不好。

我的想法:

  1. 我可以使用QuadTree编写有效的解决方案,但这里有一个问题。我知道我可以创建一个工作并创建QuadTree并将其保存在内存中,但这似乎很浪费,因为总会有一个完整的线程专门用于维护内存中的树,更不用说持续检查和平衡。如果线程失败,我可能不得不手动启动它。

  2. 另一个解决方案可能是创建一个QuadTree对象并将其存储在稳定的内存中,并在每次查询进入时读取该对象,并提供结果。但我认为这也会很慢。

  3. 我该如何解决这个问题?或者我应该尝试其他BaaS,还是使用AWS或AppEngine制作自定义API?我真的不希望此时管理负载和安全功能的麻烦,因为这是一个非盈利项目。

1 个答案:

答案 0 :(得分:2)

我将此工作留给Parse,无需手动搜索对象。获得latlon坐标后,只需创建ParseGeoPoint对象

即可
ParseGeoPoint point = new ParseGeoPoint(lat, lon);

并使用此查询获取30个最近的对象

ParseQuery<ParseObject> query = ParseQuery.getQuery("YourClass");
query.whereNear("location", point);
query.setLimit(30);
query.findInBackground(new FindCallback<ParseObject>() { ... });

查询结果是从最近到最远的对象排序的ArrayList

阅读ParseGeoPoint的{​​{3}}了解详细信息。