gpt4 book ai didi

python - 用Python NDB有效实现一对多关系

转载 作者:太空狗 更新时间:2023-10-29 18:28:05 25 4
gpt4 key购买 nike

我想听听您对使用 Python NDB 有效实现一对多关系的看法。 (例如,人(一)到任务(多))

在我的理解中,有3种实现方式。

  1. 使用“父”参数
  2. 使用“重复”结构化属性
  3. 使用“重复”键属性

我通常会根据下面的逻辑选择一种方式,但它对你有意义吗?如果你有更好的逻辑,请教我。

  1. 使用“父”参数

    • 这些实体之间需要交易操作
    • 这些实体之间需要双向引用
    • 强烈希望建立“亲子”关系
  2. 使用“重复”结构化属性

    • 不需要单独使用“多个”实体(始终与“一个”实体一起使用)
    • “多个”实体仅由“一个”实体引用
    • '重复'的次数小于100
  3. 使用 'repeated' Key 属性

    • 需要单独使用“许多”实体
    • “许多”实体可以被其他实体引用
    • '重复'的次数超过100次

No.2 增加实体的大小,但我们可以节省数据存储操作。 (尽管我们需要使用投影查询来减少反序列化的 CPU 时间)。因此,我尽可能地使用这种方式。

非常感谢您的意见。

最佳答案

您遗漏了一件关键的事情:您如何读取数据?

如果您要根据请求显示给定人员的所有任务,则 2 有意义:您可以查询此人并显示他的所有任务。

但是,如果您需要查询在特定时间到期的所有任务的列表,那么查询重复的结构化属性就很糟糕了。您将需要单独的实体来执行您的任务。

还有第四种选择,即在您的任务中使用指向您的人员的 KeyProperty。当您需要某人的任务列表时,您可以发出查询。

如果您需要搜索单个任务,那么您可能想要使用 #4。您也可以将它与 #3 结合使用。

此外,重复属性的数量与 100 无关。它与 Person 和 Task 实体的大小以及 1MB 大小有关。这是有潜在危险的,因为如果您的 Task 实体可能很大,您的 Person 实体中的空间用完的速度可能会比您预期的要快。

关于python - 用Python NDB有效实现一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14739044/

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