gpt4 book ai didi

java - 数据存储区实体键冲突

转载 作者:行者123 更新时间:2023-12-04 05:46:44 26 4
gpt4 key购买 nike

在开发中,我有一个空的数据存储。
在线我有一个包含数百万个实体的数据存储。

在开发数据存储(本地)中,我放置了一个新实体(生成一个新 key )。
然后我导出实体并将其放入在线数据存储(使用本地生成的 key )。本地生成的 key 已经分配给在线数据存储中的实体有什么风险?

或者通过像这样在本地创建 key 来避免冲突是否更简单:

for (int i = 0; i < data.size(); i++) {
Key k = KeyFactory.createKey(kind, new Date() + i);
// continue to creating and inserting entities...
}

谢谢。

最佳答案

来自 https://developers.google.com/appengine/docs/java/datastore/entities :

Instead of using key name strings or generating numeric IDs automatically, advanced applications may sometimes wish to assign their own numeric IDs manually to the entities they create. Be aware, however, that there is nothing to prevent the Datastore from assigning one of your manual numeric IDs to another entity. The only way to avoid such conflicts is to have your application obtain a block of IDs with the methods DatastoreService.allocateIds() or AsyncDatastoreService.allocateIds(). The Datastore's automatic ID generator will keep track of IDs that have been allocated with these methods and will avoid reusing them for another entity, so you can safely use such IDs without conflict.



您必须生成 全部 手动(以它们永远不会碰撞的方式)或使用 allocateIds() .除非您使用该功能,否则无法保证您手动生成的任何内容都不会与现有 key 发生冲突。生成的键 ID 不像关系数据库中的自动递增字段,每次递增 1。

关于java - 数据存储区实体键冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10585873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com