iOS 上的解析平台:大型多对多的关系、联接或数组?
Parse Platform on iOS: Relations, Joins, or Arrays for Large Many-to-Many?
在 iOS 上 Swift 的 Parse.com API 参考中,很清楚何时使用不同类型的一对多关系,基于在多边的预期大小上。
但我发现当双方都可能非常大时,我不太清楚使用哪种多对多关系。
在我的例子中,我有一个 Charity
对象,我的 Users
可以为它做出小的贡献(通常是一美元)——所以可以想象每个 User
可以做出成千上万的贡献这些贡献,每个 Charity
可能有成千上万的 Users
贡献。
为这种事情列出的多对多选项是解析关系、连接表和数组,文档对此进行了解释:
- 当关系可靠地包含 100 个以下引用时,应使用数组,这是非常明确和有用的指导,我应该不使用数组。
- 文档说 Parse Relations 可以用来连接
Books
和多个 Authors
以及 Authors
和多个 Books
——这种情况下给定的 Book
不太可能超过 100 Authors
,并且 Author
很少会超过 100 Books
——因此不清楚这在 [=38 时是否合适=]双方都可以很大,就像我的情况一样。
- 文档说当额外的元数据应该附加到每个关系时应该使用连接表,所以一方面,我目前没有明确需要这个,另一方面,文档没有似乎甚至提到任何关于多对多关系每一方的大小如何或是否重要的事情。
在没有任何其他信息的情况下,看起来我应该使用 Join Tables,但这只是因为文档并不暗示我 不应该,而不是为了文档说我 应该 .
的原因
这似乎是一个站不住脚的理由。
如果有人能提供任何指导,我将不胜感激。
在幕后,当您使用 Relation 时,Parse Server 会自动为您创建一个联合 Table 并提供一些 API 以便轻松管理和获取其数据。所以,从性能上来说,应该是很相近的。
Relation 的缺点是无法向其创建的 "Joint Table" 添加新字段。因此,例如,如果您需要存储每个用户喜欢的慈善机构,那么 User 和 Charity 之间的关系将是一个很好的选择,因为您只需要存储该关系存在,而不需要存储任何额外的信息。
另一方面,如果您需要存储每个用户对每个慈善机构的捐赠,我会创建一个名为 Donation 或 UserCharity 的联合 Table,并带有指向用户的指针 class,指向慈善机构 class 的指针,以及捐赠的价值。在这种情况下,Relation 不适合,因为您需要存储捐赠值。
在 iOS 上 Swift 的 Parse.com API 参考中,很清楚何时使用不同类型的一对多关系,基于在多边的预期大小上。
但我发现当双方都可能非常大时,我不太清楚使用哪种多对多关系。
在我的例子中,我有一个 Charity
对象,我的 Users
可以为它做出小的贡献(通常是一美元)——所以可以想象每个 User
可以做出成千上万的贡献这些贡献,每个 Charity
可能有成千上万的 Users
贡献。
为这种事情列出的多对多选项是解析关系、连接表和数组,文档对此进行了解释:
- 当关系可靠地包含 100 个以下引用时,应使用数组,这是非常明确和有用的指导,我应该不使用数组。
- 文档说 Parse Relations 可以用来连接
Books
和多个Authors
以及Authors
和多个Books
——这种情况下给定的Book
不太可能超过 100Authors
,并且Author
很少会超过 100Books
——因此不清楚这在 [=38 时是否合适=]双方都可以很大,就像我的情况一样。 - 文档说当额外的元数据应该附加到每个关系时应该使用连接表,所以一方面,我目前没有明确需要这个,另一方面,文档没有似乎甚至提到任何关于多对多关系每一方的大小如何或是否重要的事情。
在没有任何其他信息的情况下,看起来我应该使用 Join Tables,但这只是因为文档并不暗示我 不应该,而不是为了文档说我 应该 .
的原因这似乎是一个站不住脚的理由。
如果有人能提供任何指导,我将不胜感激。
在幕后,当您使用 Relation 时,Parse Server 会自动为您创建一个联合 Table 并提供一些 API 以便轻松管理和获取其数据。所以,从性能上来说,应该是很相近的。
Relation 的缺点是无法向其创建的 "Joint Table" 添加新字段。因此,例如,如果您需要存储每个用户喜欢的慈善机构,那么 User 和 Charity 之间的关系将是一个很好的选择,因为您只需要存储该关系存在,而不需要存储任何额外的信息。
另一方面,如果您需要存储每个用户对每个慈善机构的捐赠,我会创建一个名为 Donation 或 UserCharity 的联合 Table,并带有指向用户的指针 class,指向慈善机构 class 的指针,以及捐赠的价值。在这种情况下,Relation 不适合,因为您需要存储捐赠值。