使用Parse查询效率

时间:2015-01-06 12:31:06

标签: ios swift parse-platform

我正在使用跟踪用户位置的应用,并保存要解析的路线信息。就目前而言,我在一个班级中保存了一个类别,该类别是位置国家的类别,城市是其中一个键。这意味着将来当应用程序检查某人是否已检入特定城市时,它会查询解析具有所需城市作为班级名称的班级,并使用query.whereKey("City", equalTo: queryCity)约束来查看有多少人使用了该位置的应用程序。将所有位置放入一个类,使用两个键(国家和城市),然后在需要检索该信息时查询这两个位置,是否会更高效或更低效?

基本上我问的是哪一个是更有效的查询,如果有差异的话。

var query = PFQuery(classname: queryCountry)
query.whereKey("City" equalTo: queryCity)
query.findObjectsInBackgroundWithBlock()

var query = PFQuery(classname: "Locations")
query.whereKey("Country", equalTo: queryCountry)
query.whereKey("City", equalTo: queryCity)
query.findObjectsInBackgroundWithBlock()

即。让解析搜索我的课程或搜索密钥更好。

2 个答案:

答案 0 :(得分:3)

我并不完全了解您要做的事情,但一般而言,API的限制因素是您通过网络发送的数据。所以你应该考虑向API发送请求,并且只需要你真正需要的数据。

当然,两个请求比仅有一个具有更大数据的请求(由于TCP开销,连接建立等)更昂贵。在大多数情况下,它可能并不重要。所以你可以这样做。

但是,如果您仍然需要查询中的数据来继续,我会说您应该将它合并到一个查询中。

修改

因此,您想了解如何整理数据。那完全取决于你。我不认为它有所作为。但是,使用第二种方法,您没有标准化数据。即在不太可能但可能的情况下,你想要重命名一个国家,你必须在每一行都这样做,这很容易出错。

第一种方法并不是更好,因为一个特定的国家不是一个单独的类,而是一个类Country的实现。所以你最本想做的是:

  • 班级Country - 包含 name 等属性
  • City - 包含属性 name 等,以及对Country
  • 中objectId的引用

答案 1 :(得分:2)

通过采用第一种方法,您将在每个国家/地区的Parse中创建一个新类,这将是一个噩梦,尤其是当您的国家/地区列表是动态的时候。

性能,我认为在任何一种方法中查询时间都不会有显着差异。所以这是个人喜好的问题。

希望这会有所帮助。