google-app-engine - 当我在 AppEngine 上用完 ID 时会发生什么?

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

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

我在测试应用程序中对此进行了尝试。似乎自动 IDer 的一些分片可以继续生成有效的 ID,但其他分片只是给出一个 DatastoreFailureException。成功率约为30%。它会上涨吗?

这实际上是一个严肃的问题,因为我天真地创建了一些相当大的 ID。在我达到这个限制之前,我还有几万亿个实体要经过,但我注意到实体之间的 ID 可以跳跃数百万,并且我以每年大约一百万的速度输入新实体。所以……我害怕达到这个极限。

最佳答案

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

我看不出有什么方法可以为这个 Kind 重置计数器,所以我认为唯一的解决办法是选择一个新的 Kind 名称。

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

关于google-app-engine - 当我在 AppEngine 上用完 ID 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9071718/

相关文章:

python - 如何压缩从 url 获取的 PNG 图像而不更改其尺寸

python - 提高 NDB 查询性能

python - 在 Python App Engine 中,如何唯一标识在开发 SDK 上运行的应用程序实例?

python - Django (nonrel)、App 引擎和异步数据库调用

google-app-engine - 如何处理 fork-join-queue 中的最终一致性

java - 在 Google App Engine 上从 Java 7 迁移到 Java 8 时出现内存错误/500 错误

google-app-engine - 如何让 Pylons 在 Google App Engine 中工作?

java - 从 Cloud SQL 迁移到 DataStore

python - 如何访问 Jinja2 模板中引用对象的属性 (Google App Engine)

python - GAE 交易 : pass entity or key?