我有一个dynamodb表,hash为unix time,primarykey为name
如果找不到准确的unix时间,是否有办法获得最接近的unix时间?
所以如果我正在搜索(123343445,john),它要么返回(123343445,john),要么返回下一个最近的(123343446,john)
理想情况下,我不想检查一个项目,然后向上或向下迭代,直到找到一个匹配的时间,因为我不知道时间间隔是什么,在大多数情况下,它将不相等。

最佳答案

这里是nodejs中的一个例子,对于其他语言来说也是类似的。代码可能不完美,但伪代码是!:)

const params = {
    TableName: MyTableName,
    KeyConditionExpression: '#pk = :pk AND #sk >= :sk',
    Limit: 1,
    ScanIndexForward: true,
    ExpressionAttributeNames: {
      '#pk': 'name',
      '#sk': 'timestamp',
    },
    ExpressionAttributeValues: {
      ':pk': 'john', # may use some variable
      ':sk': '123343445', # may use some variable
    },
};

# /!\ Not sure about the exact syntax
new AWS.DynamoDB.DocumentClient()
  .query(params).promise()
  .then((item) => { console.log(item); });

请注意:
KeyConditionExpression将返回给定时间戳(123343445)之后的所有项,
ScanIndexForward: true将从您的时间戳开始
Limit: 1只返回第一个匹配项。
您可以使用其他语言或aws cli,查找这些参数,它们应该是可用的。
如果需要,您可以对索引执行类似的查询,您只需在IndexName: 'STRING_VALUE',中添加params

关于database - DynamoDB查找最接近的整数键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49089466/

10-11 10:30