【问题标题】:Writing to google-app-engine datastore same entity with same key overwrites -- expected?使用相同的键覆盖写入 google-app-engine 数据存储相同的实体 - 预期?
【发布时间】:2010-01-12 14:56:51
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    正如 Adam 所解释的,简短的回答是两个实体不能共享相同的密钥(想象一个 dict)。不过,长答案有点复杂。见docs:

    路径和键唯一性

    实体的完整键, 包括路径、种类和 名称或数字 ID,是唯一的,并且 特定于该实体。完整的 当实体被分配时,键被分配 在数据存储中创建,并且没有 它的部分可以改变。

    两个不同实体的键可以 至少有相似的部分 一部分是不同的。例如, 两个实体可以有相同的种类 如果他们有不同的名字 父母。同样,两个实体可以 有相同的父母(或没有父母) 并命名(如果它们不同) 种类。

    应用程序不应依赖 分配的数字 ID 顺序递增 实体创建。这一般是 情况,但不能保证。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2019-02-17
          • 2018-03-30
          • 2010-12-03
          • 1970-01-01
          • 1970-01-01
          • 2021-02-20
          • 2017-11-04
          • 2023-03-19
          • 1970-01-01
          相关资源
          最近更新 更多