在删除jdo后重新使用IdGeneratorStrategy.Identity值

时间:2011-02-21 13:56:31

标签: java google-app-engine jdo

我正在使用Google App Engine。

如果IdGeneratorStrategy.Identity生成了长密钥字段,然后从数据存储中删除了该对象,那么该密钥是否有可能被同一类的其他对象再次使用?

  

reddit上的papercrane写道:

     
    

的文档     GenerationType.IDENTITY说它     表示持久性提供程序(     数据库)将提供唯一的ID。     所以这完全取决于您的数据库     软件,如果它决定重用ID     来自删除的记录。不知道     关于你的问题我还有什么别的     说这是可能的,但我想不到     数据库的任何正当理由     服务器以跟踪哪些ID     在使用和回收旧的。那     似乎很多开销     收效甚微。

  

  

谷歌集团的马克罗斯写道   如何生成GAE身份:

     
    

因为prod中的数据存储区是     我们由多个后端组成     使用分片计数器方法来处理     出ID,这样我们就不用担心了     关于不同的后端分发     同样的身份。所以,后端A可能是     从一系列ID工作     从0到100,后端B可能是     从一系列ID工作     从101到200,依此类推。如果你的     插入命中不同的数据存储区     后端你会获得跳跃的ID     一点点。你可以依靠这些     ID是唯一的,但不是     单调增加。

  

我现在认为身份值不太可能被重用,但是明确的答案仍然是好的。

1 个答案:

答案 0 :(得分:3)

App Engine永远不会重复使用给定种类和父级的ID。事实上,我认为你很难找到一个可以做到的数据库 - 保持一个简单的计数器比试图找出哪些ID仍在使用中要简单得多,并且使用64位,你不会用完了ID。