gpt4 book ai didi

python - 使用祖先与 StructuredProperty 来建立实体之间的关系

转载 作者:太空宇宙 更新时间:2023-11-03 18:17:44 26 4
gpt4 key购买 nike

我读过很多关于这两者的文章 ndb.StructuredProperty在 App Engine 的 NDB 中以及 ancestor queries 的使用将相关实体分组在一起。

但是,我不确定我是否理解哪些情况需要哪种策略。

例如,如果我有一个用户类别,并且用户可以创建链接、修改设置并获得成就,我是吗?将链接、设置和成就作为 StructuredProperties 包含在 User 对象中会更好吗?

或者,也许我最好使用与祖先键组合在一起的单独实体?

假设我将主要执行读取操作,偶尔写入此数据。

ndb.StructuredProperty 示例:

class Achievement(ndb.Model):
date = ndb.DateTimeProperty(auto_now_add=True)
achievement_name = ndb.StringProperty(required=True)


class Link(ndb.Model):
title = ndb.StringProperty(required=True)
url = ndb.StringProperty(required=True)


class Settings(ndb.Model):
tile_layout = ndb.JsonProperty(required=True)
email_updates = ndb.BooleanProperty(default=True)


class User(ndb.Model):
user_name = ndb.StringProperty(required=True)
settings = ndb.StructuredProperty(Settings)
links = ndb.StructuredProperty(Link, repeated=True)
achievements = ndb.StructuredProperty(Achievement, repeated=True)

祖先分组示例:

class Achievement(ndb.Model):
user_key = ndb.KeyProperty(kind=User, required=True)
date = ndb.DateTimeProperty(auto_now_add=True)
achievement_name = ndb.StringProperty(required=True)


class Link(ndb.Model):
user_key = ndb.KeyProperty(kind=User, required=True)
title = ndb.StringProperty(required=True)
url = ndb.StringProperty(required=True)


class Settings(ndb.Model):
user_key = ndb.KeyProperty(kind=User, required=True)
tile_layout = ndb.JsonProperty(required=True)
email_updates = ndb.BooleanProperty(default=True)


class User(ndb.Model):
user_name = ndb.StringProperty(required=True)

谢谢!

最佳答案

您提供的基于实体组(以用户作为父级)的模型示例实际上只是一个由实体组成的模型,并引用了用户实体(对其键)。它不是一个实体组。如果您需要创建实体组,则父级的 key 必须是后代 key 的一部分。

user_key = ndb.Key(User, 'some_username')
a = Achievement(parent=user_key, achievement_name='some_name')

无论如何,当您考虑将实体组(具有共同祖先的实体)用于数据模型时,首先将其视为具有强一致性、事务性和局部性的单元。

您可以找到我对有关实体组的问题的回答 here以及类似的问题here .

结构化属性的缺点是无法独立于其所属实体来检索它们。

正确的模型主要取决于您需要使用实体的方式。

  1. 您需要单独访问这些实体吗?
  2. 您的实体是否需要强一致性或最终一致性?
  3. 实体多久创建/更新一次?
  4. 您预计有多少个实体?
  5. ...

关于python - 使用祖先与 StructuredProperty 来建立实体之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24742800/

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