【发布时间】:2010-01-12 14:56:51
【问题描述】:
我有一个数据存储对象,它使用类中的一个字段来创建密钥。假设我有一个对象“a”,该字段的值为“k”。如果我尝试将对象“b”添加到数据存储区,该对象也具有字段值“k”,则对象“b”将覆盖对象“a”。只是想确认这是否是预期的行为。虽然看起来很明显,但如果有人能解释基本概念,那就太好了..
【问题讨论】:
标签: google-app-engine google-cloud-datastore
我有一个数据存储对象,它使用类中的一个字段来创建密钥。假设我有一个对象“a”,该字段的值为“k”。如果我尝试将对象“b”添加到数据存储区,该对象也具有字段值“k”,则对象“b”将覆盖对象“a”。只是想确认这是否是预期的行为。虽然看起来很明显,但如果有人能解释基本概念,那就太好了..
【问题讨论】:
标签: google-app-engine google-cloud-datastore
正如 Adam 所解释的,简短的回答是两个实体不能共享相同的密钥(想象一个 dict)。不过,长答案有点复杂。见docs:
路径和键唯一性
实体的完整键, 包括路径、种类和 名称或数字 ID,是唯一的,并且 特定于该实体。完整的 当实体被分配时,键被分配 在数据存储中创建,并且没有 它的部分可以改变。
两个不同实体的键可以 至少有相似的部分 一部分是不同的。例如, 两个实体可以有相同的种类 如果他们有不同的名字 父母。同样,两个实体可以 有相同的父母(或没有父母) 并命名(如果它们不同) 种类。
应用程序不应依赖 分配的数字 ID 顺序递增 实体创建。这一般是 情况,但不能保证。
【讨论】:
是的。 App Engine 数据存储区不区分“插入”和“更新” - 两者都是“放置”操作。
【讨论】:
一个数据存储对象的 Key 是一个唯一的值来标识它,所以是的,如果对象 A 和对象 B 在数据存储中具有相同的 Key,它们将相互覆盖。
【讨论】: