android - 使用 Parse 作为后端进行快速最近邻搜索

标签 android parse-platform parse-cloud-code

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

我的想法:

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

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

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

最佳答案

我会把这个工作留给 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

阅读documentation ParseGeoPoint 的详细信息。

关于android - 使用 Parse 作为后端进行快速最近邻搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31919717/

相关文章:

android - DroidGap 无法解析为类型

android - 如何强制调用 onServiceDisconnected()?

swift - 在 Swift 中向 PFObject 添加用户指针

heroku - 如何在解析服务器上配置 Twilio?

ios - 如何在我的 iOS 应用程序中调用 Cloud Code Function(Parse)?

java - Android Socket 就绪检测?

应用程序在后台或关闭时的 Android 推送通知

swift - 准备转场

ios - 如何将图像添加到 PFTableViewCell Swift 2 Xcode 7

ios - 解析云推送通知正在推送给所有用户而不是目标用户