DynamoDB 查询 |如何按最新时间戳对所有记录进行排序?



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

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

使用扫描的成本很高,并且显然需要使用查询提交分区键

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

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)
}
};

因此,我的用例的解决方案是使用来自 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);
}
});
});

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

最新更新