我想听听您对使用Python NDB有效实现一对多关系的看法。 (例如,人(一个)到任务(许多))
据我了解,可以通过三种方式来实现。
- 使用“父”参数
- 使用“重复”结构化属性
- 使用“重复”键属性
我通常根据以下逻辑选择一种方式,但这对你有意义吗?
如果你有更好的逻辑,请教我。
-
使用“父”参数
- 这些实体之间需要进行交易操作
- 这些实体之间需要双向参考
- 强烈想要建立“亲子”关系
-
使用“重复”结构化属性
- 不需要单独使用“许多”实体(始终与“一个”实体一起使用)
- “许多”实体仅由“一个”实体引用
- “重复”次数小于100
-
使用“重复”键属性
- 需要单独使用“许多”实体
- “许多”实体可以被其他实体引用
- “重复”次数超过100次
第二,增加了实体的大小,但我们可以节省数据存储操作。 (不过,我们需要使用投影查询来减少反序列化的 CPU 时间)。因此,我尽可能地使用这种方式。
我真的很感激你的意见。
您错过了一个关键的事情:您如何读取数据?
如果您要根据请求显示给定人员的所有任务,则 2 有意义:您可以查询该人员并显示他的所有任务。
但是,如果您需要查询在某个时间到期的所有任务的列表,则查询重复的结构化属性非常糟糕。您将需要单独的实体来执行您的任务。
还有第四个选项,即在任务中使用指向您的人员的 KeyProperty。当您需要某人的任务列表时,您可以发出查询。
如果您需要搜索单个任务,那么您可能需要选择#4。您也可以将它与 #3 结合使用。
另外,重复属性的数量与 100 无关。它与 Person 和 Task 实体的大小以及 1MB 中容纳的大小有关。这有潜在的危险,因为如果您的 Task 实体可能很大,您的 Person 实体中的空间可能会比您预期的更快耗尽。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)