【问题标题】:DynamoDB query by secondary index onlyDynamoDB 仅按二级索引查询
【发布时间】:2019-02-15 04:41:43
【问题描述】:

我将用户帐户存储在 DynamoDB 中:

{
  email: 'user1@xxx.com',
  expires: 1548807053247,
}

我的哈希键是email 字段。

我想添加一个每日 cron 作业,它将为所有即将到期的帐户(在接下来的 14 天内)发送一封提醒电子邮件。

为此,我需要单独查询 expires 字段 - 不使用哈希键。

我假设我需要在这个字段上定义一个二级索引(可能是全局的而不是本地的?),但我不确定如何为它编写正确的查询。

我正在使用AWS.DynamoDB.DocumentClient 访问表格,提前致谢!

【问题讨论】:

  • 您使用 GSI 还是 LSI 取决于您需要什么级别的一致性和性能。此外,LSI 与表一起创建,与表一起存储,并且在创建表后不删除表就无法删除。另一方面,GSI 可以随意创建和销毁,但它们最终是一致的。

标签: amazon-web-services amazon-dynamodb


【解决方案1】:

在调用查询 API 时,只需指定除 TableName 之外的 IndexName。 (Docs.) 其余的和查询表一样。

【讨论】:

    【解决方案2】:

    我经常遇到同样的问题

    我所做的是,添加另一个名为“all”的属性,值为 1
    (您可以使用任何键/值)
    然后创建一个 GSI

    • 分区:全部
    • 排序:过期

    为了优化一点,你可以只为活跃用户添加这个属性

    或者您可以添加一个属性 active Number 并将其用作 GSI 的分区键

    这是一个非常低效的分区键分配
    因为所有项目都属于一个分区 但我没有找到其他方法

    我很高兴听到另一个解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多