Ril*_*ark 5 google-app-engine google-cloud-datastore
我永远不会创建足够的实体来耗尽63位地址空间,但是我说使用allocateIdRange来分配id 9223372036854775807(几乎是2 ^ 63).对于新的,自动输入的实体,这种实体是否已被破坏?
我在测试应用程序中尝试了这一点.似乎auto-IDer的一些分片可以继续产生有效的ID,但是其他分片只能给出一个DatastoreFailureException.成功率约为30%.会不会上升?
这实际上是一个严肃的问题,因为在我的天真中,我创造了一些相当庞大的ID.在我达到这个限制之前,我还有几万亿个实体可以使用,但我注意到实体之间的ID可能会增加数百万,而且我每年以大约一百万的速度输入新的实体.所以......我害怕达到这个极限.
通过一个测试应用程序,我保留了一堆非常高的 id allocateIdRange。起初,我尝试建立新实体的尝试大约有一半成功了。现在,不能放置带有空白 id 的新实体 -DatastoreFailureException每次都会引发 a 。我认为这是因为密钥分配器实现不跟踪密钥中的间隙,而仅跟踪迄今为止给出的最高 id。
我没有看到任何方法来重置这种计数器,所以我认为唯一的解决方案是选择一个新Kind名称。
教训:不要使用 2^63 附近的 ids!
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |