Google App Engine中命名密钥或“预生成”密钥的性能成本是多少?

时间:2009-11-26 20:38:42

标签: python google-app-engine

如果您在Google App Engine中使用了命名密钥,是否会产生任何额外费用?换句话说,使用命名密钥而不是随机生成的id创建新实体是否更昂贵?

在类似的推理中,我注意到您可以要求Google App Engine为您提供一组不会被Google App Engine用作自动生成密钥的密钥?产生大量这些密钥会导致性能下降吗?

由于以下原因,这些问题都困扰着我。让我们说Google App Engine试图坚持实体A,因此它正在为A创建一个密钥。直观地说,当一个新密钥被随机生成时,Google App Engine需要首先检查密钥是否是已经存在如果密钥已存在,则Google App Engine可能需要生成另一个随机生成的新密钥。它将继续这样做,直到它成功生成一个唯一的新密钥。然后,它会将此密钥分配给实体A.好的,这很好,很好。

我的问题是它似乎意味着密钥导致某种应用程序级锁定?当Google App Engine检查随机生成的密钥是否已存在时,这将是必要的。这可能不对,因为它根本不可扩展?我的推理出了什么问题?

所以,由于这很长,我将重新讨论我的3个问题:

  1. Google App Engine在生成新密钥时是否会创建应用程序级锁定?
  2. 命名密钥是否比自动生成的密钥产生任何额外费用?如果是这样,成本(恒定,线性,指数,......)?
  3. 请求应用引擎获取应用引擎承诺不使用的密钥会导致密钥创建性能下降吗?如果是这样,那么费用是多少?

1 个答案:

答案 0 :(得分:4)

使用密钥名称而不是自动生成的ID没有内在的损失,除了实体上的(可能)更长的密钥和引用它的任何ReferenceProperties的开销。

在某些情况下,实际上,使用自动分配的ID可能会降低性能:如果以非常高的速率(每秒几百个)插入新实体,因为所有新实体都具有相同范围的ID,它们都将写入相同的Bigtable平板电脑,并可能导致争用并增加超时。绝大多数应用程序永远不必担心这一点。

对于分配尽可能多的ID没有性能影响 - App Engine只会根据您请求的数量增加ID计数器。 (这是一种简化,但通常是准确的。)

为了解答您的疑虑,App Engine不会随机生成密钥。它使用自动分配的id,使用计数器分配,因此保证唯一,或者它使用您提供的密钥。所以回答你的最后3个要点:

  1. 没有
  2. 仅存储(可能)更长的密钥
  3. 不,无论您要求多少,费用大致为O(1)。