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

DynamoDB-从多个主键(分区键排序键/哈希键范围键)获取最新数据

柯星辰
2023-03-14

我正在使用Node。js和DynamoDB JavaScript SDK开发。

我有一个表,它使用“ID”作为分区键(散列键),使用“time”作为排序键(范围键)。我想从多分区密钥中获取最新的N个数据。

i.e.
Table:
ID | time
01 | 2018-10-01 01:00:00
02 | 2018-10-01 02:00:00
01 | 2018-10-01 04:00:00 
03 | 2018-10-01 03:00:00

1. Get the latest 2 data from all partition key
result: 
ID | time
01 | 2018-10-01 04:00:00
03 | 2018-10-01 03:00:00

1. Get the latest 2 data from partition key 01 & 02
result: 
ID | time
01 | 2018-10-01 04:00:00
02 | 2018-10-01 02:00:00

我可以使用Query从分区键获取最新的N个数据。

var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
    TableName: 'tablename',
    ScanIndexForward: false,
    ExpressionAttributeNames: {
        '#id': 'id'
    },
    ExpressionAttributeValues: {
        ':id': '01'
    },
    KeyConditionExpression: '#id = :id',
    Limit: 2
};
docClient.query(params, function (err, data) {
    ...
});

但我不知道如何从多分区密钥中获取最新的N个数据。如果我想从10个分区键获取数据,我应该查询10次吗?

共有2个答案

阳勇
2023-03-14

尝试dynamodb batchget

    var docClient = new AWS.DynamoDB.DocumentClient();
    var params = {
    RequestItems: {
       'tablename': {
           Keys: [
                {'id': {N: '01'}},
                {'id': {N: '02'}},
                {'id': {N: '03'}}
              ]
          }
       }
    };
    docClient.batchGet(params,(err, data)=>{...})
杨豪
2023-03-14

是的,每个分区键需要一个查询。如果有足够的读取容量,可以并行启动所有查询,总延迟相当于一个查询。

 类似资料:
  • 我有一个带有主键和排序键的表;因为这是一个复合键,所以我有多个主键与不同的排序键映射。 如何获取与特定主键关联的所有排序键? 我尝试使用“Get”操作,但这似乎也需要排序键(尽管我正在寻找这些键)。我还研究了“BatchGet”操作,但这是针对多个不同的键,而不是针对具有多个不同排序键的单个主键。 我也尝试过“查询”,但没有成功,但我对这一点了解较少,所以这可能就是解决方案——是这样吗?我还知道,

  • 我必须经常在那里做两件事:1。给定一个category#域,获取所有匹配项。2.给定grouptype#groupname,获取所有匹配项。 这两种操作都相当频繁,所以我不想使用扫描。在DynamoDB中有没有一种有效的方法可以做到这一点?是否有更好的方法来设计模式(更多的表、辅助索引等)?任何建议都是有帮助的。有人建议使用全局辅助索引,但我的问题是,我能否将主表的范围键作为GSI的哈希键?我知道

  • 我试图使用batchGetItem从表中返回多个项的属性,但似乎它只适用于分区键和范围键的组合,但是如果我只想通过主键识别请求的项,该怎么办?唯一的方法是创建不带范围键的表吗? 根据官方留档: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.Partitions.html 如果表有一个复合主键(分

  • 我有一张dynamodb桌子。 它有主分区键IdType(String)和主排序键Id(String) 由于它是哈希范围模式,IdType不是唯一的,一个键可以多次使用。我需要找到所有唯一的ID类型。 我们如何找到它?一种可能的解决方案是使用扫描和处理所有客户端来获取所有IdType,并使用我们自己的代码找到唯一的。但扫描成本很高,每次扫描只能扫描1MB的数据,因此扫描是不可行的,因为表中的数据已

  • 我有一个带有分区键(UUID)的DynamoDB表,其中有几个属性(如名称、电子邮件、创建日期等)。创建日期是项目中的一个属性,其格式为YYYY-MM-DD。但现在有一个要求更改-我必须根据创建日期对其进行排序,并提供整个数据(也就是说,我不能只将数据放在某个特定分区上,而是以排序方式将所有分区中的所有数据都放在一起。我知道这可能需要DynamoDB花费时间从所有分区中提取数据并在之后进行排序。我

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