DynamoDB - 减少查询数量

DynamoDB - Reducing number of queries

我的用户登录后,应用程序向 DynamoDB 发出了太多请求,我正在考虑减少调用次数的不同方法。

该应用程序允许用户触发发送给其他用户的某些警报。例如:"Shipment received, come to the deck"、"Shipment completed"等

这些是拨打的电话:

  1. 获取公司的软件许可证到期日期。
  2. 获取计算机在建筑物中的位置(即 "Office A")。
  3. 获取可以触发的警报类型(即 "Shipment received, come to the deck"、"Shipment completed" 等)。
  4. 获取有关用户的信息(即用户所属的公司团队,以及用户拥有的管理员级别(可以是 0、1、2 或 3))。

我考虑过的潜在解决方案:

  1. 将公司的许可证到期日期作为每台计算机的属性(这将减少 1 个查询次数)。但是,如果我需要更新公司的许可证到期日期,那么我需要为系统中的每台计算机更新它,这对我来说听起来不切实际,因为数据库中可能有 200、300 甚至更多计算机。

  2. 将公司的许可证到期日期添加为警报的属性(这将减少 1 个查询次数);这似乎更合理,因为只有大约 15 种不同的警报,所以如果我以后需要更改许可证到期日期,那还不错。

  3. 在用户设备上缓存信息;但是,我似乎找不到一个好的策略来尽可能更新本地存储的信息。

我仍然认为这 3 个选项听起来不太好,所以我希望有人能指出我正确的方向。有什么好的方法可以减少调用次数吗?我正在检索有关 4 个不同实体(许可证、计算机、警报、用户)的信息,我应该在用户登录后保留这 4 个调用吗?

每个组件都可以做一些事情。

  1. 获取有关用户的信息

    将其保存在会话存储中,每当详细信息更改时更新存储。会话存储通常使用像redis这样的缓存来实现。

  2. 计算机位置

    将其保存在像redis这样的分布式缓存中。懒惰地初始化它。每当新的写入发生在计算机位置(罕见的 IMO)时,使用 dynamodb 流和 aws lambda 从 redis 中删除条目。

  3. 提醒类型

    与计算机位置相同

  4. 许可证到期日期

    如果可能,不要允许许可证过期日期(为这些情况颁发一个新的,以便保持可追溯性。)和永远缓存许可证过期。或与计算机位置相同。