3

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

PFRelation *relation = ...
PFQuery *query = [relation query];

上下文:我正在构建一个应用程序,其中每个 PFUser 实例有很多 TennisGame 实例(可能是一个很大的数字),并且 TennisGame 实例有很多 PFUser 实例(2 个或 4 个,取决于它是单打比赛还是双打比赛)。

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

4

2 回答 2

10

问题在于您如何访问您的数据。对于您的情况,您可以考虑以下问题:

  • 每当您获得用户时,您是否需要包含用户的 TennisGames?如果是,则数组支持include查询。您不能include处理关系,您需要再进行一次查询才能访问用户的 TennisGames。
  • 一个用户最多可以拥有多少个 TennisGames?如果它可能超过 100(Parse 推荐的限制),最好使用关系。因为数组不能扩展到大型关系。
  • 正如您所指出的,顺序对您来说重要吗?如果是,则数组支持顺序。
  • 再次如您所说,如果您对数据子集感兴趣,则关系可以限制查询,而数组则不能。

我建议您观看有关 Parse 开发人员日的 Parse 关系的视频。

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

于 2014-10-07T07:54:04.647 回答
0

knshn 的回答不好,因为它假设PFRelation在任何时候都必须使用“MANY”方由于性能问题而具有超过 100 个关系。

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

所以回到最初的问题,我建议你PFUser在实例中有一组玩家TennisGame,因为每场比赛一次只有 2 或 4 名玩家,或者至少肯定少于 100 人。

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

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 当您需要 A-LOT-to-A-LOT 关系时,它是理想的,因此PFRelation在社交网络应用程序上使用“关注者”之类的东西是有意义的,因为每个帐户可以有 100 多个“关注者”,每个帐户可以是100 多个其他帐户的“追随者”。

于 2018-06-14T21:17:49.407 回答