在 DynamoDB 中使用 sort_key 扫描

Scanning With sort_key in DynamoDB

我有一个 table,它将包含 < 1300 个条目,每个条目大约 600 字节。目标是显示按纪元日期排序的结果页面。现在,对于任何给定的搜索,我都使用过滤扫描请求完整的 ID 列表,然后在 UI 端处理分页。对于每个页面,我传递一大块 id 以检索完整条目(目前也是过滤扫描)。理想情况下,id 列表将 return 排序,但如果我正确理解文档,则只会对具有相同分区键的结果进行排序。我当前的分区键是 uuid,因此所有条目都是唯一的。

当前Table配置

我是否真的需要对分区使用一次性密钥才能获得按日期 return 编辑的结果?也许我的 table 的大小让这开始变得不合理?有没有更好的方法来处理这个问题?我有另一个字段“is_active”,它当前是一个布尔值,如果我将它转换为数字,则可以用于分区键,但这可能会使我的更新方法复杂化。 95% 的时间,数据库中的每个条目都是“活动的”,所以这看起来效率不高。

扫描索引

let params = {
    TableName: this.TABLE_NAME,
    IndexName: this.INDEX_NAME,
    ScanIndexForward: false,
    ProjectionExpression: "id",
    FilterExpression: filterSqlStatement,
    ExpressionAttributeValues: filterValues,
    ExpressionAttributeNames: {
      "#n": "name"
    }
};
let results = await this.DDB_CLIENT.scan(params).promise();
let finalizedResults = results ? results.Items : [];

鉴于您的数据集相对较小,您可以尝试使用日期和 UUID 排序键的固定分区键。您将按分区键(这将是一个固定值)进行查询,结果将返回排序。对于大型数据集,这不是最好的主意,但 < 1300 并不大。