如果我任意将新实体的id设置为1000
,而不首先使用allocateIds,那么以后的实体是否可以自动获得id 1000
并覆盖我的原始实体?
在伪代码中,如果我有:
Entity e1;
e1.setId(1000);
datastore.put(e1);
...稍后......
Entity e2;
datastore.put(e2);
有没有机会e2会自动获得身份1000
并覆盖e1?
答案 0 :(得分:3)
为了插入而创建实体(而不是更新) 不鼓励使用此构造函数,除非id是从a获得的 从中获取的KeyRange返回的密钥 AsyncDatastoreService.allocateIds(String,long)或 DatastoreService.allocateIds(String,long)为同一类型。
另请参阅Python documentation:
但请注意,数据存储区无法保证避免应用程序分配的ID。虽然不太可能,但数据存储区可能会分配一个数字ID,该数字ID将导致与具有应用程序分配ID的实体发生冲突。避免此问题的唯一方法是让您的应用使用allocate_ids()来获取一批ID。数据存储区的自动ID生成器不会使用使用allocate_ids()获取的ID,因此您的应用可以使用这些ID而不会发生冲突。
您不应该创建具有数据存储尚未分配的ID的实体,如果要将用户定义的标识符作为实体密钥的一部分提供,请改用key_name
。