当我在AppEngine上用完ID时,我能得到什么?

时间:2012-01-30 22:24:02

标签: google-app-engine google-cloud-datastore

我永远不会创建足够的实体来耗尽63位地址空间,但是我说使用allocateIdRange来分配id 9223372036854775807(几乎是2 ^ 63)。对于新的,自动输入的实体,这种实体是否已被破坏?

我在测试应用中尝试了这个。似乎auto-IDer的一些分片可以继续产生有效ID,但是其他分片只能给出DatastoreFailureException。成功率约为30%。它会不会上升?

这实际上是一个严肃的问题,因为在我的天真中,我创造了一些相当庞大的ID。在达到这个限制之前,我仍然有几万亿个实体可以使用,但我注意到实体之间的ID可能会增加数百万,而且我每年以大约一百万的速度输入新的实体。所以......我害怕达到这个极限。

1 个答案:

答案 0 :(得分:2)

使用测试应用程序,我使用allocateIdRange保留了一堆非常高的ID。起初,我尝试放置新实体的成功大约有一半成功。现在,没有可以使用空白ID放置新实体 - 每次都会引发DatastoreFailureException。我认为这是因为密钥分配器实现不跟踪密钥中的间隙,而只跟踪到目前为止给出的最高id。

我认为没有办法重置此类的计数器,因此我认为唯一的解决方案是选择一个新的Kind名称。

课程:不要在2 ^ 63附近的任何地方使用ID!