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

标签 google-app-engine go google-cloud-datastore

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

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

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

处理这个问题的最佳实践是什么?

最佳答案

Python ReferenceProperty 本质上存储另一个实体的 key 。这类似于在 Go 中使用 Key 字段。

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

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

SELECT * FROM B where AIds = 'A1'

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

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

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

相关文章:

java - 云端点 : Access Paramters in Servlet Filter

java - 无法在 Google App Engine (Java) 中保留对象数据

python - App Engine,两个实体之间的交叉引用

go - 什么时候在 golang 中使用劫持?

concurrency - 使用共享 map 的不错的惯用方式

php - 如何访问不同谷歌应用程序引擎项目的数据存储?

java - 定义数据源

json - 新手Go,试图梳理如何处理JSON

google-app-engine - 当我在 AppEngine 上用完 ID 时会发生什么?

java - 使用 future <V>