gpt4 book ai didi

google-app-engine - 在谷歌应用引擎上创建复合键或复合键

转载 作者:行者123 更新时间:2023-12-04 04:57:54 25 4
gpt4 key购买 nike

我有两个模型:
Car(ndb.Model) 和 Branch(ndb.Model) 各有一个关键方法。

@classmethod
def car_key(cls, company_name, car_registration_id):
if not (company_name.isalnum() and car_registration_id.isalnum()):
raise ValueError("Company & car_registration_id must be alphanumeric")
key_name = company_name + "-" + car_registration_id
return ndb.Key("Car", key_name)

分支键:
@classmethod
def branch_key(cls, company_name, branch_name):
if not (company_name.isalnum() and branch_name.isalnum()):
raise ValueError("Company & Branch names must be alphanumeric")
key_name = company_name + "-" + branch_name
return ndb.Key("Branch", key_name)

但是,我认为这有点难看,并不是您应该如何使用 key 。

(汽车注册是汽车独有的,但有时一家公司可能会将汽车出售给另一家公司,汽车也会在分支机构之间移动)。

由于一家公司可能有许多汽车或许多分支机构,我想我不想要大型实体组,因为您每秒只能向实体组写入一次。

我应该如何定义我的 key ?

例如我正在考虑 car_key = ndb.Key("Car", car_reg_id, "Company", company_name)因为一辆汽车不可能有很多公司,所以实体组不会太大。

但是我不确定如何处理分支键,因为许多公司可能具有相同的分支名称,并且许多分支可能具有相同的公司。

最佳答案

您已经正确地确定 GAE 中的祖先关系不应基于数据的逻辑结构。

它们需要基于应用程序的事务行为。祖先使你的生活变得困难。例如,一旦您使用复合键,除非您碰巧知道该键的所有元素,否则您将无法通过键获取该实体。如果您知道 Car id,您将无法在不知道其他组件的情况下获取它。

考虑哪些查询需要具有强一致性。如果您在查询给定分支中的所有汽车时碰巧需要强一致性,那么您应该考虑将其用作祖先。

考虑需要在事务中完成哪些操作,这是使用实体组的另一个很好的理由。

还要记住,您可能根本不需要任何实体组(可能是您情况的答案)。

或者,另一方面,您可能需要一个可能不完全适合任何逻辑概念模型的实体组,但祖先可能是一个纯粹为了存在而存在的实体,因为您需要某个事务的祖先。

关于google-app-engine - 在谷歌应用引擎上创建复合键或复合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16534225/

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