我正在构建一个应用程序(在XCode中),它通常向用户显示信息。这些信息存储为数据库中的单个对象(恰好是由Heroku托管的Parse服务器)。用户可以选择“查看”距离其当前位置一定范围内创建的信息。(当将信息保存到数据库时,会根据用户发起保存时的位置保存其纬度和经度)。我知道可以通过比较这些信息的纬度和经度与查看用户的当前纬度和经度来过滤信息,并仅显示足够接近的信息。大致/一般而言:
这个设置还不错,并且它可以正常工作。然而,它之所以能够正常工作,是因为当前数据库中的条目数量很少(该应用程序正在开发中)。在实际使用中(即有许多用户),数据库可能会充满信息对象(假设有一千个)。在我看来,为了逐个获取和比较每个数据库条目的纬度并将其与当前用户的纬度进行比较,这将花费太长时间。我知道必须有一种及时的方法来完成这项任务(想想tinder...他们只显示附近位置的人的个人资料,尽管有数百万个个人资料,但他们做到了这一点,而且速度很快),但我不知道什么是最有效的方法。我考虑过在数据库中为不同的地理区域创建单独的部分,然后根据用户当前位置仅搜索这些特定部分的数据库,但这似乎不够复杂,并且仍然会导致大量的信息被提取。什么是最佳方法?
var currentUserLat = latitude //latitude of user's current location
var infoSet = [Objects] //set of all pulled info from DB
for info in infoSet{
if info.lat-currentUserLat < 3{//arbitrary value
//display the info
}else{
//don't display
}
}
这个设置还不错,并且它可以正常工作。然而,它之所以能够正常工作,是因为当前数据库中的条目数量很少(该应用程序正在开发中)。在实际使用中(即有许多用户),数据库可能会充满信息对象(假设有一千个)。在我看来,为了逐个获取和比较每个数据库条目的纬度并将其与当前用户的纬度进行比较,这将花费太长时间。我知道必须有一种及时的方法来完成这项任务(想想tinder...他们只显示附近位置的人的个人资料,尽管有数百万个个人资料,但他们做到了这一点,而且速度很快),但我不知道什么是最有效的方法。我考虑过在数据库中为不同的地理区域创建单独的部分,然后根据用户当前位置仅搜索这些特定部分的数据库,但这似乎不够复杂,并且仍然会导致大量的信息被提取。什么是最佳方法?