iOS 上的解析平台:大型多对多的关系、联接或数组?

Posted

技术标签:

【中文标题】iOS 上的解析平台:大型多对多的关系、联接或数组?【英文标题】:Parse Platform on iOS: Relations, Joins, or Arrays for Large Many-to-Many? 【发布时间】:2020-08-07 00:40:39 【问题描述】:

ios 上的 Parse.com API 参考中,非常清楚何时使用不同类型的一对多关系,具体取决于多方的预期大小。

但是当双方都可能非常大时,我发现使用哪种多对多关系不太清楚。

就我而言,我有一个Charity 对象,我的Users 可以为它做出少量(通常是一美元)的贡献——因此每个User 都可以做出数千个这样的贡献,每个Charity可能有成千上万的Users 为它做出贡献。

为这类事情列出的多对多选项是解析关系、连接表和数组,文档对此进行了解释:

当关系可靠地包含少于 100 个引用时,应使用数组,这是非常明确和有用的指导,我不应该使用数组。 文档说可以使用解析关系,例如,将Books 与多个AuthorsAuthors 与多个Books 连接——在这种情况下,给定的Book 不太可能结束100 个Authors,而Author 很少有超过 100 个Books--所以不清楚这是否适合 双方都可能非常大,就像我的情况一样。李> 文档说,当额外的元数据应该附加到每个关系时,应该使用连接表,所以一方面,我目前没有明确的需要,另一方面,文档似乎没有甚至提及多对多关系的每一方的大小如何或是否重要。

在没有任何其他信息的情况下,看起来我应该使用 Join Tables,但这只是因为文档并不暗示我不应该,而不是因为文档说的原因我应该

这似乎是一个站不住脚的理由。

任何人都可以提供任何指导,我将不胜感激。

【问题讨论】:

【参考方案1】:

在幕后,当您使用 Relation 时,Parse Server 会自动为您创建一个联合表并提供一些 API,以便轻松管理和获取其数据。所以,就性能而言,应该非常相似。

Relation 的缺点是无法向它创建的“联合表”添加新字段。因此,例如,如果您需要存储每个用户喜欢的慈善机构,那么 User 和 Charity 之间的关系将是一个很好的选择,因为您只需要存储该关系存在而不需要存储任何额外的信息。

另一方面,如果您需要存储每个用户对每个慈善机构所做的捐赠,我会创建一个名为 Donation 或 UserCharity 的联合表,其中包含一个指向 User 类的指针,一个指向 Charity 类的指针,以及捐赠的价值。在这种情况下,Relation 不合适,因为您需要存储捐赠值。

【讨论】:

这是非常好的额外信息和解释,谢谢。所以如果我理解正确的话,关于联合表的事情是它们在功能上就像任何其他 Parse 类,这意味着存储大量它们不应该影响性能,而不是存储大量任何对象其他类。所以基本上建议是使用数组以外的任何东西!我有这个权利吗? 是的。就是这个想法!

以上是关于iOS 上的解析平台:大型多对多的关系、联接或数组?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在多对多关系的联接表中添加非 Id 字段吗?

Laravel 上的多对多问题关系

“.”处或附近的QueryDSL语法错误在多对多的关系

hibernate关联关系(多对多)

MongoDB 原则:$in 需要一个数组 - 多对多关系

MongoDB 原则:$in 需要一个数组 - 多对多关系