【问题标题】:DynamoDB Query | How can I get all records sorted by newest timestamp?DynamoDB 查询 |如何获取按最新时间戳排序的所有记录?
【发布时间】:2019-10-28 23:23:15
【问题描述】:

我正在使用 DynamoDB 来存储 Web 应用程序的记录。

每条记录都有一个 uuid(分区键)和一个 unix 时间戳(排序键)。 如何获取按最新时间戳排序的所有记录?

使用扫描很昂贵,并且使用 Query 提交分区键显然是必要的

我已经尝试过的代码出现以下错误:

 Query condition missed key schema element: uuid

我的服务:

serverCallChats() {
    return new Promise(async (resolve, reject) => {
        const _dynamoDB = new AWS.DynamoDB.DocumentClient();

        const daysBack = (days) => {
            const date = new Date();
            date.setDate(date.getDate() - days);
            return date.getTime();
        };

        const params = {
            TableName: 'chat-channel',
            KeyConditionExpression: '#sortKeyName < :days',
            ExpressionAttributeNames: {
                '#sortKeyName': 'timestamp'
            },
            ExpressionAttributeValues: {
                ':days': daysBack(7)
            }
        };

【问题讨论】:

  • 您需要多久进行一次这样的查询?最佳和最具成本效益的解决方案也取决于此。
  • @Kirk 简短的回答很常见。

标签: angular amazon-web-services nosql amazon-dynamodb


【解决方案1】:

所以我的用例的解决方案是使用来自 FilterExpression 的扫描和过滤器:

return new Promise(async (resolve, reject) => {
        const _dynamoDB = new AWS.DynamoDB.DocumentClient();

        const daysBack = (days) => {
            const date = new Date();
            date.setDate(date.getDate() - days);
            return date.getTime();
        };

        const params = {
            TableName: 'chat-table',
            FilterExpression: 'latestActivity > :hkey',
            ExpressionAttributeValues: {
                ':hkey': daysBack(7)
            },
        };

        _dynamoDB.scan(params, (err, data) => {
            if (err) {
                console.log(err);
                reject(err);
            } else {
                console.log('chatdata: ', data);
                resolve(data);
           }
        });
    });

使用此解决方案,数据库的输出将不会被排序,这必须在客户端中完成。然而,考虑到扫描的大小,这对我来说是一个合适的解决方案

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 2023-03-30
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多