Google cloud platform 谷歌云扳手是否支持任意多对多关系?

Google cloud platform 谷歌云扳手是否支持任意多对多关系?,google-cloud-platform,foreign-keys,many-to-many,google-cloud-spanner,Google Cloud Platform,Foreign Keys,Many To Many,Google Cloud Spanner,这应该是可行的外键,但我在搜索文件,但我似乎找不到任何关于外键在它 看起来云扳手支持的唯一一种关系是交错表关系。。。但老实说,像MongoDB这样的NoSQL文档存储已经提供了这么多 您将如何在Cloud Paner中实现多对多关系 编辑: 在我的具体案例中,我想要一个类似于Twitter追随者的功能,“追随者”是一个用户与另一个用户之间的直接关系 我可以看到如何对此进行建模以获得相对高效的查询,但我看不到如何保护系统不存在不一致性,即拥有引用已删除用户的追随者。Cloud Spaner提供了全

这应该是可行的外键,但我在搜索文件,但我似乎找不到任何关于外键在它

看起来云扳手支持的唯一一种关系是交错表关系。。。但老实说,像MongoDB这样的NoSQL文档存储已经提供了这么多

您将如何在Cloud Paner中实现多对多关系

编辑:

在我的具体案例中,我想要一个类似于Twitter追随者的功能,“追随者”是一个用户与另一个用户之间的直接关系

我可以看到如何对此进行建模以获得相对高效的查询,但我看不到如何保护系统不存在不一致性,即拥有引用已删除用户的追随者。

Cloud Spaner提供了全范围的连接(内部、交叉、完整、左、右)。它允许您像在标准SQL数据库中一样创建和查询多对多关系

然而,仅仅因为您可以进行这些查询,并不意味着它们将是高效的。如果您的查询需要跨多个拆分进行读取和写入,那么您的查询性能将变慢,因为它需要读取和写入多个拆分。交叉表使您能够更好地控制磁盘上的数据布局,从而提高查询的性能

如果您想创建一个高效的多对多关系,您可以有两个表与共享公共键上的父表交错:例如

Parent key = account_id
-- Many 1 key = account_id, user_id
-- Many 2 key = account_id, group_id
这将使您能够进行只需触及单个拆分的查询,从而保持查询的快速、高效和无冲突

Cloud Panner还有一个数组类型,根据您的用例,它可能也会有所帮助

编辑:回应

我可以看到如何对此进行建模以获得相对高效的查询,但我看不到如何保护系统不存在不一致性,即拥有引用已删除用户的追随者

您可以将同一帐户中的所有跟踪记录作为事务中的两个单独查询删除,也可以设置后台作业在后台进行清理

另外,在这种情况下,我不能让Many2被级联删除,因为它在Many1中的引用被删除了,对吗?在这种情况下,我唯一能做的级联删除就是删除整个父级


是的,没错。

云扳手现在支持外键

参考资料:


您好,非常感谢您的回答!但在我的情况下,有一个父交错表并没有多大帮助。。。这更多的是一种手动优化拆分的方法。我将编辑我的问题,并提供有关我具体案例的更多详细信息。另外,在这种情况下,我不能让Many2被级联删除,因为它在Many1中的引用被删除了,对吗?在这种情况下,我唯一能做的级联删除就是删除整个父级。