我正在使用Parse版本" 1.14.4" iOS 10.3.2和swift 3。 无论本地(返回的对象是固定的)还是远程的,查询都很慢。 感谢
let placeObject = PFObject(className:"PlaceObject")
let point = PFGeoPoint(latitude:self.PointGlobal.latitude, longitude:self.PointGlobal.longitude)
placeObject["location"] = point
let query = PFQuery(className:"CLocationObject")
// Interested in locations near user.
query.whereKey("location", nearGeoPoint:point)
// Limit what could be a lot of points.
query.limit = 200
let localQuery = (query.copy() as! PFQuery).fromLocalDatastore()
localQuery.findObjectsInBackground{
(objects: [PFObject]?, error: Error?) -> Void in
self.dataReturnedLocally = true
.....
if self.dataReturnedLocally{
print("local query with no error there was data already")
}
else {
print("getting data remotely")
query.findObjectsInBackground{
(objects: [PFObject]?, error: Error?) -> Void in
if error == nil {
if let objects = objects {
答案 0 :(得分:1)
基于地理位置的查询是使用MongoDB的最慢类型的查询。此外,没有基于位置的自动索引,这使得这些速度变慢,特别是对于大型集合。因此,您唯一真正的解决方案是为数据库添加索引以索引位置,并针对您需要进行的位置查询进行优化。尽管如此,请记住,其中有太多会影响写入速度。
根据您的使用情况,最好使用withinMiles
代替nearGeoPoint
。这将返回更少的结果,但也不会花费很长时间来运行。
答案 1 :(得分:1)
目前LDS中的所有查询都很慢,因为它们没有编入索引。 LDS存储了数据的objectId / JSON表示,所有过滤都在内存中完成。