使用Google Cloud数据存储查询返回每条记录的当前版本



我正在使用relay/graphql/googlecloud设置来为一个可以免疫保存数据的项目进行设置。

我有一组字段,每次修改任何字段时都会创建一个新记录,其结构如下:

Project
- Start Date
- End Date
- Description
- ...
- ...

第一次创建项目时,会保存一个时间戳和一个版本号。例如:

1470065550-1

之后的任何修改都会创建一个新的版本号,但仍然使用相同的时间戳。

1470065550-2

记住它是不可变的,一个项目可能会有很多版本。如果还有很多项目,这可能会导致提取大量记录

如果我想从数据存储中获取一个项目列表,只返回每个项目的最新版本,那么最好的方法是什么?随着版本号的增加,我永远不知道哪一个是最新的。

例如,如果我有包含2个项目的行,这两个项目都有多个版本,并且我想获取每个项目的最新版本:

1470065550-1
1470065550-2
1470065550-3
1470065550-4
1470065550-5
1470065550-6
1470065550-7 <--- Current Version for 1470065550
1567789887-1
1567789887-2
1567789887-3 <--- Current Version for 1567789887

根据上面的行,我需要查询来返回两个项目的最新版本:

1470065550-7 <--- Current Version for 1470065550
1567789887-3 <--- Current Version for 1567789887

您可能想将标记更改为[google cloud datastore],而不是[google cloudstorage],因为您可能缺少真正的数据存储专家。

但我只想对你的问题说两点:添加一个"current"字段,然后使用事务来自动切换它可能是最简单的。然后,它是一个易于在任何其他查询中使用的过滤器。

如果你不能做到这一点,那么回答你的问题有点棘手,因为你还没有给我们你正在构建的查询来获得这组结果。获得最大值的典型方法是排序并设置1的限制,如下所示:

var query = datastore
   .createQuery('Projects')
   .order('timestamp')
   .limit(1);

但考虑到您存储数据的方式,我认为当您从-9运行到-10时无法做到这一点,因为在字典排序中,-10通常在-9之前(然而,我没有检查这在数据存储中是如何工作的)。你可能需要零垫。

最新更新