我正在使用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是唯一的,但不是 单调增加。
我现在认为身份值不太可能被重用,但是明确的答案仍然是好的。
答案 0 :(得分:3)
App Engine永远不会重复使用给定种类和父级的ID。事实上,我认为你很难找到一个可以做到的数据库 - 保持一个简单的计数器比试图找出哪些ID仍在使用中要简单得多,并且使用64位,你不会用完了ID。