Google 数据存储 insert/update 查询中如何使用长 ID?
How are Long ids used in Google Datastore insert/update queries?
我们的产品使用 Google Datastore 作为应用程序数据库。大多数实体使用 Long 类型的 ID 和一些 String 类型的 ID。我注意到 Long 类型的 ID 不是按连续顺序排列的。
现在,出于某些商业目的,我们正在将一些大的 table 导出到 json 文件,其中大约有 30 - 4000 万个条目。最初我们期望像 "ofy().load().type(ENTITY.class).startAt(cursor).limit(BATCH_LIMIT).iterator()" 这样的简单查询将帮助我们遍历特定 table 的全部内容,从第一个条目开始到最近创建的条目结束。我们正在分批工作,并在每批之后存储游标,以便下一个任务可以加载该批并恢复。
但在注意到几分钟前创建的实体的 ID 可能小于 1 周前创建的另一个实体的 ID 后,我们想知道是否应该考虑在此导出期间冻结内容。一方面,重要的是要进行良好的导出并且不要错过特定日期之前的旧数据,另一方面,内容冻结超过 1 天对我们的客户来说是个问题。
你建议我们做什么?
谢谢,
克里斯蒂安.
我认为您不必担心您的 ID 的唯一性。数据存储构建在 Bigtable 之上,耗时 6 tables.
- 首先table存储实体
- second 按种类存储实体
- 第三个按升序存储 属性 值的索引
- 第四个以降序存储属性值的索引
- fifth 将多个属性的索引存储在一起
- sixth 跟踪 Kind 的下一个唯一 ID
格式是这样的。
[应用程序 ID]-[命名空间]-[种类]-[ID]
保证每个实体的唯一性。
是的,那个table的格式是[Application ID]-[Kind Name],值是下一个值。假设您有同类产品并且 table 看起来像这样 |key(yourapp-products), Next ID(3)|。现在您为种类产品创建了新实体,它将分配给 ID(3),并且 table 上的行将获得新值 |key(yourapp-products),下一个 ID(4)|。还要提到 table 只有一行,因为我们只有一种产品。
你是自己指定ID还是让datastore自己生成?听起来你有 "Pre-allocating IDs" 问题,只是推测,但对于每个批次你都需要排序 Kind.allocate_ids(size=blah)
这样你就可以保持顺序。
我们的产品使用 Google Datastore 作为应用程序数据库。大多数实体使用 Long 类型的 ID 和一些 String 类型的 ID。我注意到 Long 类型的 ID 不是按连续顺序排列的。
现在,出于某些商业目的,我们正在将一些大的 table 导出到 json 文件,其中大约有 30 - 4000 万个条目。最初我们期望像 "ofy().load().type(ENTITY.class).startAt(cursor).limit(BATCH_LIMIT).iterator()" 这样的简单查询将帮助我们遍历特定 table 的全部内容,从第一个条目开始到最近创建的条目结束。我们正在分批工作,并在每批之后存储游标,以便下一个任务可以加载该批并恢复。
但在注意到几分钟前创建的实体的 ID 可能小于 1 周前创建的另一个实体的 ID 后,我们想知道是否应该考虑在此导出期间冻结内容。一方面,重要的是要进行良好的导出并且不要错过特定日期之前的旧数据,另一方面,内容冻结超过 1 天对我们的客户来说是个问题。
你建议我们做什么?
谢谢, 克里斯蒂安.
我认为您不必担心您的 ID 的唯一性。数据存储构建在 Bigtable 之上,耗时 6 tables.
- 首先table存储实体
- second 按种类存储实体
- 第三个按升序存储 属性 值的索引
- 第四个以降序存储属性值的索引
- fifth 将多个属性的索引存储在一起
- sixth 跟踪 Kind 的下一个唯一 ID
格式是这样的。 [应用程序 ID]-[命名空间]-[种类]-[ID]
保证每个实体的唯一性。
是的,那个table的格式是[Application ID]-[Kind Name],值是下一个值。假设您有同类产品并且 table 看起来像这样 |key(yourapp-products), Next ID(3)|。现在您为种类产品创建了新实体,它将分配给 ID(3),并且 table 上的行将获得新值 |key(yourapp-products),下一个 ID(4)|。还要提到 table 只有一行,因为我们只有一种产品。
你是自己指定ID还是让datastore自己生成?听起来你有 "Pre-allocating IDs" 问题,只是推测,但对于每个批次你都需要排序 Kind.allocate_ids(size=blah)
这样你就可以保持顺序。