gpt4 book ai didi

google-cloud-platform - Google Cloud Spanner 是否支持任意多对多关系?

转载 作者:行者123 更新时间:2023-12-01 12:22:27 24 4
gpt4 key购买 nike

这应该可以通过外键实现,但我正在浏览文档,但我似乎无法在其中找到任何关于外键的信息。

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

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

编辑:

在我的具体情况下,我想要一个类似于 Twitter 关注者的功能,而“关注”是一个用户与另一个用户的直接关系。

我可以看到如何对此进行建模以获得相对有效的查询,但我看不到如何保护系统免受不一致的影响,即拥有一个引用已删除用户的关注。

最佳答案

云 Spanner supports全方位的连接(内连接、交叉连接、全连接、左连接、右连接)。它使您可以像在标准 SQL 数据库中一样创建和查询多对多关系。

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

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

Parent key = account_id
-- Many 1 key = account_id, user_id
-- Many 2 key = account_id, group_id

这将使您能够进行只需要触及单个拆分的查询,使它们保持快速、高效且无冲突。

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

编辑:回应

I can see how to model this to get relatively efficient queries, but I don't see how I would safeguard the system from inconsistencies, i.e. having a Following that references an User that has been deleted.



您可以删除同一帐户中的所有关注者记录删除突变作为事务中的两个单独查询,或者设置后台作业以在后台清理它。

Also, in this situation I can't for instance have a Many2 be cascade-deleted because its reference in Many1 has been deleted, right? The only cascade delete I can do in this case is if I delete a whole Parent.



对,那是正确的。

关于google-cloud-platform - Google Cloud Spanner 是否支持任意多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42934133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com