如果您在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个问题:
答案 0 :(得分:4)
使用密钥名称而不是自动生成的ID没有内在的损失,除了实体上的(可能)更长的密钥和引用它的任何ReferenceProperties的开销。
在某些情况下,实际上,使用自动分配的ID可能会降低性能:如果以非常高的速率(每秒几百个)插入新实体,因为所有新实体都具有相同范围的ID,它们都将写入相同的Bigtable平板电脑,并可能导致争用并增加超时。绝大多数应用程序永远不必担心这一点。
对于分配尽可能多的ID没有性能影响 - App Engine只会根据您请求的数量增加ID计数器。 (这是一种简化,但通常是准确的。)
为了解答您的疑虑,App Engine不会随机生成密钥。它使用自动分配的id,使用计数器分配,因此保证唯一,或者它使用您提供的密钥。所以回答你的最后3个要点: