所以我必须在我的应用程序上实现最近邻居搜索功能,并且我目前使用 Parse 作为后端。到目前为止我所做的就是执行查询并获取结果,然后对它们进行排序以获得前 20-30 个结果。但由于我的数据库已经扩大,我现在有大约 4,000 个位置(预计达到大约 15,000 个),我必须在其中应用最近邻搜索。这对于实时系统来说并不好。
我的想法:
我可以使用四叉树编写有效的解决方案,但有一个问题。我知道我可以做一项工作并创建四叉树并将其保存在内存中,但这似乎很浪费,因为总会有一个完整的线程专门用于维护内存中的树,更不用说不断的检查和平衡了。如果线程失败,我可能必须手动启动它。
另一种解决方案可能是创建一个 QuadTree 对象并将其存储在稳定的内存中,并在每次查询进入时读取该对象,并提供结果。但我认为这也会很慢。
我该如何解决这个问题?或者我应该尝试另一个 BaaS,或者使用 AWS 或 AppEngine 制作自定义 API?我真的不希望此时管理负载和安全功能的麻烦,因为这是一个非营利项目。
最佳答案
我会把这个工作留给 Parse,不需要手动搜索你的对象。获得 lat
和 lon
坐标后,只需创建 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
。
阅读documentation ParseGeoPoint
的详细信息。
关于android - 使用 Parse 作为后端进行快速最近邻搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31919717/