写入谷歌应用程序引擎数据存储相同的实体具有相同的密钥覆盖 - 预期?

时间:2010-01-12 14:56:52

标签: google-app-engine google-cloud-datastore

我有一个数据存储区对象,它使用类中的一个字段来创建密钥。假设我有一个对象'a',该字段的值为'k'。如果我尝试将对象'b'添加到数据存储区,该字段也具有该字段的值'k',则对象'b'将覆盖对象'a'。只是想确认这是否是预期的行为。虽然看起来非常明显,如果有人能够解释基本概念,那就太棒了。

3 个答案:

答案 0 :(得分:7)

正如亚当解释的那样,简短的回答是两个实体不能共享相同的密钥(想象一个字典)。但答案很长,有点复杂。请参阅docs

  

路径和关键唯一性

     

实体的完整密钥,   包括路径,种类和   名称或数字ID,是唯一的   特定于该实体。完整的   当实体是,分配密钥   在数据存储区中创建,而不是   它的部分可以改变。

     

两个不同实体的密钥可以   只要至少有类似的部分   一部分是不同的。例如,   两个实体可以具有相同的类型   并且如果它们有不同则命名   父母。同样,两个实体也可以   拥有相同的父母(或没有父母)   并且如果它们不同则命名   种

     

应用程序不应该依赖   正在分配的数字ID   按顺序增加顺序   实体创造。这通常是   案件,但不保证。

答案 1 :(得分:3)

是。 App Engine数据存储区不区分“插入”和“更新” - 两者都是“放置”操作。

答案 2 :(得分:1)

数据存储区对象的Key是标识它的唯一值,所以是的,如果对象A和对象B在数据存储区中具有相同的Key,它们将相互覆盖。