Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine Google数据存储插入/更新查询中使用了多长ID?_Google App Engine_Cursor_Google Cloud Datastore - Fatal编程技术网

Google app engine Google数据存储插入/更新查询中使用了多长ID?

Google app engine Google数据存储插入/更新查询中使用了多长ID?,google-app-engine,cursor,google-cloud-datastore,Google App Engine,Cursor,Google Cloud Datastore,我们的产品使用Google数据存储作为应用程序数据库。大多数实体使用Long类型的id和String类型的id。我注意到Long类型的id不是按连续顺序排列的 现在我们正在将一些大表(大约有3000-4000万个条目)导出到json文件中,以用于某些业务目的。最初,我们希望像“ofy().load().type(ENTITY.class).startAt(cursor).limit(BATCH_limit).iterator()”这样的简单查询将帮助我们迭代该特定表的整个内容,从第一个条目开始,

我们的产品使用Google数据存储作为应用程序数据库。大多数实体使用Long类型的id和String类型的id。我注意到Long类型的id不是按连续顺序排列的

现在我们正在将一些大表(大约有3000-4000万个条目)导出到json文件中,以用于某些业务目的。最初,我们希望像“ofy().load().type(ENTITY.class).startAt(cursor).limit(BATCH_limit).iterator()”这样的简单查询将帮助我们迭代该特定表的整个内容,从第一个条目开始,以最近创建的条目结束。我们正在分批工作,并在每个批之后存储光标,以便下一个任务可以加载该批并继续

虽然注意到几分钟前创建的实体的ID小于1周前创建的另一个实体的ID,但我们想知道在这个导出期间是否应该考虑内容冻结。一方面,进行良好的导出并在特定日期之前不丢失旧数据至关重要,另一方面,内容冻结超过1天对我们的客户来说是个问题

你建议我们做什么

谢谢,
克里斯蒂安。

我认为您不必担心id的唯一性。数据存储构建在Bigtable之上,包含6个表

  • 第一个表存储实体
  • 第二类按实物存储实体
  • 第三个按升序存储属性值的索引
  • 第四,按降序存储属性值的索引
  • 第五个存储多个属性的索引
  • sixth会记录下一个唯一的ID
  • 格式是这样的。 [应用程序ID]-[命名空间]-[种类]-[ID]

    它是每个实体唯一性的集合

    是的,该表上的格式是[Application ID]-[Kind Name],该值是下一个值。假设你有一个很好的产品,这个表看起来像这个|键(你的应用程序产品),下一个ID(3)|。现在,您为实物产品创建了新实体,它将被分配给ID(3),该表上的行将获得新值| key(yourapp产品),下一个ID(4)|。还要提到的是,表格只有一行,因为我们只有一种产品


    您是自己指定ID还是让数据存储自行生成?听起来你有“预分配id”的问题,只是猜测而已,但对于每一批你都需要排序
    Kind。分配id(size=blah)
    ,这样你就可以保持顺序。

    我认为你不必担心id的唯一性。数据存储建立在Bigtable的基础上,有6个表

  • 第一个表存储实体
  • 第二类按实物存储实体
  • 第三个按升序存储属性值的索引
  • 第四,按降序存储属性值的索引
  • 第五个存储多个属性的索引
  • sixth会记录下一个唯一的ID
  • 格式是这样的。 [应用程序ID]-[命名空间]-[种类]-[ID]

    它是每个实体唯一性的集合

    是的,该表上的格式是[Application ID]-[Kind Name],该值是下一个值。假设你有一个很好的产品,这个表看起来像这个|键(你的应用程序产品),下一个ID(3)|。现在,您为实物产品创建了新实体,它将被分配给ID(3),该表上的行将获得新值| key(yourapp产品),下一个ID(4)|。还要提到的是,表格只有一行,因为我们只有一种产品


    您是自己指定ID还是让数据存储自行生成?听起来你有“预分配ID”的问题,只是猜测,但对于每一批你都需要排序
    Kind。分配ID(size=blah)
    ,这样你就可以保持顺序。

    给每个实体添加时间戳怎么样?可能一个用于创建,一个用于更新某些实体设置了创建日期,所以我们将在查询中使用它,它应该会有所帮助。但是其他人不…给每个实体添加时间戳怎么样?可能一个用于创建,一个用于更新某些实体设置了创建日期,所以我们将在查询中使用它,它应该会有所帮助。但是其他人没有…谢谢你的回答,它带来了很多新信息。有一件事,你确定第六个会跟踪下一个唯一的ID吗?我这样问是因为我认为我看到的条目的ID值比表中已经存在的条目的值要小。似乎注释太长了。我在答案中添加了。我们没有使用功能DatastoreService.AllocateId,所以这可能就是我看到ID没有增量分配的原因。看起来是这样。感谢您的回答,它带来了很多新信息。有一件事,你确定第六个会跟踪下一个唯一的ID吗?我这样问是因为我认为我看到的条目的ID值比表中已经存在的条目的值要小。似乎注释太长了。我补充了答案。我们没有使用功能DatastoreService.AllocateId,所以这可能是我看到ID没有增量分配的原因。看起来是这样的。