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

Android 使用Parse作为后端的快速最近邻搜索,android,parse-platform,parse-cloud-code,Android,Parse Platform,Parse Cloud Code,因此,我必须在我的应用程序上实现一个最近邻搜索功能,我目前正在使用Parse作为后端。到目前为止,我所做的是执行一个查询并获得结果,然后对它们进行排序,以获得前20-30个结果。但由于我的数据库已经扩大,我现在有大约4000个位置(预计将达到15000个),我必须应用最近邻搜索。这对于实时系统来说是不好的 我的想法: 我可以使用四叉树编写一个有效的解决方案,但这里有一个陷阱。我知道我可以创建一个作业,创建四叉树并将其保存在内存中,但这似乎是浪费,因为总有一个完整的线程专门用于维护内存中的树,更不

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

我的想法:

  • 我可以使用四叉树编写一个有效的解决方案,但这里有一个陷阱。我知道我可以创建一个作业,创建四叉树并将其保存在内存中,但这似乎是浪费,因为总有一个完整的线程专门用于维护内存中的树,更不用说不断的检查和平衡了。如果线程失败,我可能不得不手动启动它

  • 另一种解决方案是创建一个四叉树对象并将其存储在稳定内存中,每次查询时读取该对象,并提供结果。但我认为这也会很慢


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

    我将把这项工作留给解析,不需要手动搜索对象。一旦有了
    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>() { ... });
    
    ParseQuery query=ParseQuery.getQuery(“YourClass”);
    查询。在何处(“位置”,点);
    查询设置限制(30);
    findInBackground(新的FindCallback(){…});
    
    查询结果是一个从最近到最远的对象排序的
    ArrayList


    阅读ParseGeoPoint的详细信息。

    你指的是什么的最近邻?地理点?自定义对象?用于地质点。我使用了类似的方法,但在服务器端处理了GeoPoint(有一个.near()JS函数可以实现这一点)。谢谢你的建议。