当前位置: 首页 > 知识库问答 >
问题:

获取每个分区键的最新/最大值

令狐献
2023-03-14

该表非常简单,是一个包含组件列表的包,包名作为分区键,版本作为排序键。

正如标题所示,我需要获得每个软件包的最新版本,但无法安静地解决如何最好/最有效地实现这一点?

我曾想过使用日期-时间戳作为排序键(版本)或GSI以及版本号,但我所能看到的最好的情况是,您必须重复查询返回有序列表的每个分区的表?

共有1个答案

邵华皓
2023-03-14

一个可能的解决方案是稀疏索引。基本上,您可以创建一个类似IslatestVersion的属性,该属性要么是true,要么项没有该属性。然后,您可以使用该属性作为分区键或排序键创建GSI。只有具有该属性的项目才会出现在GSI中,因此您可以非常快速地扫描GSI。或者,如果您使用islatestversion作为GSI的分区键,那么您可以非常容易地查询GSI(例如,获取以“foo”开头的所有包的最新版本可能很有用...但是我不知道您的其他用例)。

关键是。您需要确保在添加新版本时,从以前的最新版本中删除了该属性。使用DynamoDB流和Lambda函数很容易做到这一点,或者您可以使用DynamoDB TransactWriteItems在从旧版本中删除属性的同时将新的包版本添加到表中,但是您确实需要仔细考虑最新版本可能发生更改的所有情况。

无论哪种方式,您都需要设计应用程序代码来过滤掉包中偶尔出现的重复条目。(GSIs最终是一致的,因此在更新最新版本后有一个非常短的时间窗口(通常是几毫秒),如果查询最新的包版本,可能会得到两个最新版本。)

 类似资料:
  • 受此启发,如何从DynamoDB获取每个主分区键的最新数据? 我在迪纳摩有一张桌子。它存储帐户统计信息。帐户统计数据可能每天更新几次。因此,表记录可能如下所示: ------------ -------------- ------- ------- |account_id|record_id|视图|星| ------------ -------------- ------- ------- |3|

  • 问题内容: 不幸的是,SQL并不是很容易找到我。我有两个表,一个表和一个表。 贷款支付表: ID(主键),LoanID(与贷款表上的ID匹配),PaymentDate,Amount等。 我需要一条sql语句,该语句可以给我每个月输入的最后一笔付款(如果有的话)。我目前的说法没有给我结果。还存在一个问题,有时在该月的最大日期有时会有平局,因此我也必须能够处理该问题(我的想法是在平局的情况下选择最大的

  • 问题内容: 我正在使用SQL Server2005。我有一个带有付款ID,用户ID和时间戳的付款表。我想查找每个用户的最新付款。这很容易搜索并找到答案。我还想知道的是,最近的付款是否是用户的第一次付款。 我有以下内容将对每个用户的付款进行编号: 我没有进行一次精神上的飞跃,然后让我为每个用户选择了最高的paymentNumber。如果我通过使用MAX(paymentNumber)然后将以上内容用作

  • 我已经阅读了很多关于设计分区键和排序键的DynamoDB文档,但我认为我一定缺少一些基本的东西。 如果分区密钥设计不好,那么当单个分区密钥值的数据超过10GB时会发生什么情况? “了解分区行为”部分指出: “单个分区可以容纳大约10 GB的数据” 它如何对单个分区键进行分区? http://docs.aws.amazon.com/amazondynamodb/latest/developergui

  • 问题内容: 我正在尝试编写一个查询,每天从价格明细表中获取每个商品的最低和最高价格。 在价格明细表中,每天设置多次价格,因此同一日期有很多记录。因此,我想要一个表,其中每个日期都有一行,然后将该表连接到同一张表,因此对于每个不同的日期,我都需要最小值和最大值。 SQL查询 概括 餐桌在同一天设定了许多价格。想要每个交易所报价的每天的最小值和最大值。 谢谢 问题答案: 一个简单的应该工作: 不知道为

  • 我正在使用Node。js和DynamoDB JavaScript SDK开发。 我有一个表,它使用“ID”作为分区键(散列键),使用“time”作为排序键(范围键)。我想从多分区密钥中获取最新的N个数据。 我可以使用Query从分区键获取最新的N个数据。 但我不知道如何从多分区密钥中获取最新的N个数据。如果我想从10个分区键获取数据,我应该查询10次吗?

  • 如何获得包含每个分组集的最大值的行? 关于这个问题,我见过一些过于复杂的变体,但没有一个有好的答案。我试着举一个最简单的例子: 给出一个类似下面的表,包含person,group,和age列,如何得到每个组中最年长的人?(一组内的平局应给出第一个按字母顺序排列的结果) 所需的结果集:

  • 问题内容: 我在Mysql中使用Django 1.6。 我有以下模型: 我想获取每个学生的最新分数记录。 我试过了: 和: 问题答案: 这应该适用于Django 1.2+和MySQL: