扫描 AWS DynamoDB 的替代方案?
Alternative to scanning AWS DynamoDB?
我知道不推荐扫描 DynamoDB,这是一种不好的做法。
假设我有一个食品订购网站,我想每天扫描所有用户以找出上周没有订购食品的用户,以便我可以向他们发送电子邮件(仅举个例子)。
这会对数据库提出一些非常尖锐的需求,尤其是对于庞大的用户群。
除了我缺少的这些计划扫描之外,还有其他替代方法吗?或者在这种情况下,扫描是这项工作的最佳工具吗?
这个问题有很多不同的可能答案。通常,所有这一切都始于一个简单的事实,即执行此类操作的最佳方法 取决于 实际细节以及您要优化的内容(成本、延迟、持续时间等)。
由于这似乎是“每周一次”的事情,我猜延迟和“工作”持续时间在优先级列表中并不高,但成本可能是。
下一个要考虑的重要事项是实现的复杂性。例如:如果您的服务只有 100 个用户,我不会理会任何更复杂的解决方案,而只是进行扫描。但如果您的服务有数百万用户,这可能不再是一个好主意。
出于此答案的目的,我将假设您的用户群已经变得太大而无法仅进行扫描。在这种情况下,我可以想到两种可能的解决方案:
- 添加一个单独的索引,让您轻松“查询”最后订单日期。
- Use a S3 backup
第一个应该是不言自明的。正如 DynamoDB 文章中经常描述的那样,您应该定义您的“访问模式”并围绕它们构建索引。这里的优点是您仍在 DynamoDB 中操作,缺点是增加了成本。
我的首选解决方案可能是只对 table 进行计划备份到 S3,然后在其他地方处理备份。也许是您编写的自定义工具或某些允许处理大量数据的 AWS 服务。这可能是最便宜的解决方案,但处理时间可能不会“超快”。
我期待这个有趣问题的其他解决方案。
我知道不推荐扫描 DynamoDB,这是一种不好的做法。
假设我有一个食品订购网站,我想每天扫描所有用户以找出上周没有订购食品的用户,以便我可以向他们发送电子邮件(仅举个例子)。
这会对数据库提出一些非常尖锐的需求,尤其是对于庞大的用户群。
除了我缺少的这些计划扫描之外,还有其他替代方法吗?或者在这种情况下,扫描是这项工作的最佳工具吗?
这个问题有很多不同的可能答案。通常,所有这一切都始于一个简单的事实,即执行此类操作的最佳方法 取决于 实际细节以及您要优化的内容(成本、延迟、持续时间等)。
由于这似乎是“每周一次”的事情,我猜延迟和“工作”持续时间在优先级列表中并不高,但成本可能是。
下一个要考虑的重要事项是实现的复杂性。例如:如果您的服务只有 100 个用户,我不会理会任何更复杂的解决方案,而只是进行扫描。但如果您的服务有数百万用户,这可能不再是一个好主意。
出于此答案的目的,我将假设您的用户群已经变得太大而无法仅进行扫描。在这种情况下,我可以想到两种可能的解决方案:
- 添加一个单独的索引,让您轻松“查询”最后订单日期。
- Use a S3 backup
第一个应该是不言自明的。正如 DynamoDB 文章中经常描述的那样,您应该定义您的“访问模式”并围绕它们构建索引。这里的优点是您仍在 DynamoDB 中操作,缺点是增加了成本。
我的首选解决方案可能是只对 table 进行计划备份到 S3,然后在其他地方处理备份。也许是您编写的自定义工具或某些允许处理大量数据的 AWS 服务。这可能是最便宜的解决方案,但处理时间可能不会“超快”。
我期待这个有趣问题的其他解决方案。