Parse platform 我应该使用指针数组还是PFRelation?(parse.com)

Parse platform 我应该使用指针数组还是PFRelation?(parse.com),parse-platform,scalability,pfrelation,Parse Platform,Scalability,Pfrelation,据我所知,您可能使用指针数组的唯一原因是保留排序,因为PFRelation实例不支持排序。否则,它们的行为似乎是相同的,尽管PFRelation更具可伸缩性,并且有一个漂亮的内置“query”方法将查询仅限于PFRelation实例中的对象,这有时非常有用 PFRelation *relation = ... PFQuery *query = [relation query]; 上下文:我正在构建一个应用程序,其中每个PFUser实例都有许多TennisGame实例(可能是一个很大的数字),而

据我所知,您可能使用指针数组的唯一原因是保留排序,因为PFRelation实例不支持排序。否则,它们的行为似乎是相同的,尽管PFRelation更具可伸缩性,并且有一个漂亮的内置“query”方法将查询仅限于PFRelation实例中的对象,这有时非常有用

PFRelation *relation = ...
PFQuery *query = [relation query];
上下文:我正在构建一个应用程序,其中每个PFUser实例都有许多TennisGame实例(可能是一个很大的数字),而TennisGame实例有许多PFUser实例(2个或4个,取决于是单打还是双打)


问题:在parse.com上组织我的数据的最佳方式是什么?我在考虑PFUser类中的PFRelation(到TennisGame实例),以及TennisGame类中的数组或2或4个指针(到PFUser实例)。但我两者都需要吗?如果不是,哪一个最好?

问题是如何访问数据。对于您的案例,您可以考虑以下问题:

  • 当您获得用户时,是否需要包括用户的TennisGames?如果是,数组在查询时支持
    include
    。您不能使用关系执行
    包含
    ,您需要再执行一次查询才能访问用户的TennisGames
  • 一个用户最多有多少个田纳西游戏?如果可能超过100(解析建议的限制),最好使用关系。因为数组不能扩展到大型关系
  • 正如你所指出的,订单对你来说重要吗?如果是,阵列支持顺序
  • 正如您所说,如果您对数据的子集感兴趣,关系可以限制查询,而数组则不能
我建议您从Parse developer时代开始关注解析关系


此外,你不需要保持双方的关系。这将使创建和更新它们变得更加复杂。

KNSN的答案并不好,因为它假设只要“多”方由于性能问题拥有100多个关系,就必须使用
PFRelation

这是不正确的,因为您可以使用“指针关系”创建一对多关系,而Parse可以处理100多个关系,没有问题。或者,当一方的关系超过100个,而另一方的关系少于100个时,它甚至可以通过“数组关系”有效地处理多对多关系。因此,正确的答案应该提到,只有在使用“数组关系”时,拥有100个以上的关系才会成为一个问题,即创建一个包含100个以上项目的数组并将其设置为一个对象

回到原来的问题,我建议您在
TennisGame
实例中设置一组
PFUser
玩家,因为每个游戏一次只有2到4名玩家,或者至少肯定少于100名

因此,如果您想从特定的
TennisGame
实例获取
PFUser
玩家,您必须执行如下查询:

PFQuery *query = [PFQuery queryWithClassName:@"TennisGame"];
[query includeKey:@"players"];
[query getObjectInBackgroundWithId:tennisGameId block:^(PFObject *tennisGame, NSError *error) {
    if (tennisGame) {
        tennisGame[@"players"];
    }
}];
接下来,如果您想获得当前用户玩的所有游戏(按日期排序),可以执行以下查询:

PFQuery *query = [PFQuery queryWithClassName:@"TennisGame"];
[query addDescendingOrder:@"createdAt"];
[query whereKey:@"players" equalTo:[PFUser currentUser]];
[query findObjectsInBackgroundWithBlock:^(NSArray *tennisGames, NSError *error) {
    // do whatever you need with the results
}];
最后,您可能会问,“等等!如果一个玩家玩了100多场游戏,这不是性能问题吗?”答案是否定的,因为这只是数组的问题,而不是查询的问题。如果游戏以数组形式保存在
PFUser
实例中,而不是将玩家数组保存在
TennisGame
实例中,则会出现问题。另外,
PFRelation
也是一种查询,因此它是检索大量对象的推荐方法

奖金:何时使用
PFRelation

当你需要很多对很多的关系时,这非常理想,因此在社交网络应用程序上使用
PFRelation
作为“关注者”是有意义的,因为每个帐户可以有100多个“关注者”,每个帐户可以是100多个其他帐户的“关注者”。

谢谢KNSN。我有一个视图,我需要加载用户的游戏,按日期排序。因此,PFRelation似乎是实现这一点的最简单方法。但另一种方法是使用
whereKey:@“players\u array”equalTo:[PFUser currentUser]
查询整个TennisGame类,我不确定这是否太低效,因为可能有数十万个TennisGame实例。如果您找到此页面,强烈建议您查看视频,非常全面