gpt4 book ai didi

google-app-engine - 如何在 Go 中的 AppEngine 数据存储中建模多对多关系?

转载 作者:IT王子 更新时间:2023-10-29 01:43:25 25 4
gpt4 key购买 nike

我正在努力思考如何使用 Go 编程语言在 AppEngine 的数据存储区内表示多对多关系。我更习惯传统的关系数据库。

我的系统中有两种类型的实体。我们称它们为 AB。每个 A 实体都与一定数量的 B 实体相关。同样,每个 B 实体都与其他一些 A 实体相关。我希望能够有效地查询给定 A 实体的所有 B 实体,以及给定 的所有 A 实体B实体。

在 Python SDK 中,似乎有一种方法可以记录实体中的字段可以是引用其他实体的 ReferenceProperty。但是,我在 Go 的 AppEngine SDK 中找不到类似的东西。 Go 似乎只使用基本的 struct 来表示实体。

处理此问题的最佳做法是什么?

最佳答案

python ReferenceProperty 本质上是存储另一个实体的键。它类似于在 Go 中使用 Key 字段。

至少有两种方法可以解决您的问题。一种存储有限数量引用文献的廉价方式,以及一种存储较大数据集的昂贵方式。

fmt.Println.MKO 以廉价的方式提供了答案,除了查询比他建议的更简单,它实际上应该是:

SELECT * FROM B where AIds = 'A1'

此方法受限于每个实体的索引条目数以及实体大小。因此,AIds 或 BIds 列表会将实体数限制为 20000 或更少。

如果您拥有大量数据,您可能需要一个映射实体来表示给定 A 和 B 实体之间的 M2M 关系。它只包含 A 的键和 B 的键。然后您将查询 map 实体,然后获取所需的相应 A 或 B 实体。这会更昂贵,但突破了实体大小限制。

关于google-app-engine - 如何在 Go 中的 AppEngine 数据存储中建模多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17371244/

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