我正在尝试发送大量文本消息提醒,这些提醒存储在MongoDB数据库中,需要在某个特定时间发送至分钟(它们将使用AWS发送)。
当前想法是使用AWS来让Lambda工作者被CloudWatch每分钟调用一次,以提取当前分钟的提醒,并将它们放入SQS队列中,以便工作者将提醒发送出去。
问题是,我担心由于队列中的提醒数量过多或由于提醒数据库太大而无法足够快地查询,所以提醒发送得太晚了。因此,第一个问题是我可以提前5分钟查询数据库,然后将其添加到队列中以在正确的时间发送吗?我知道您可以将计时器添加到SQS消息中,但是您不能指定时间,这是最好的方法吗?
是否值得保留一个数据库,其中包含所有需要发生的提醒,然后在将它们添加到SQS队列后将过去的提醒移到另一个数据库中(我需要保存过去的提醒)?这是制作此系统的好方法吗?
编辑:我目前正在计划开发,所以我目前没有任何瓶颈。我们希望在最忙的时候,我们必须在一分钟内发送300至400条提醒,但估计数据库每天会增加大约100条条目。
答案 0 :(得分:1)
在没有更多信息的情况下很难完全回答,您的规模有多大?您要运行什么查询来获取文档?该查询需要多长时间?瓶颈到底在哪里?还有更多...
假设您的mongo侧流已经完善并且仍然太慢,您可以向SQS添加延迟,但可以从amazon docs开始对其进行限制:
队列的默认(最小)延迟为0秒。最多15分钟。
这意味着只要您可以将其他mongo lambda过程保持在15分钟以下,就可以了。
如果您想添加更多信息,我很乐意对此发表意见。
答案 1 :(得分:0)
我喜欢将过去的提醒移至其他数据库或表的想法。这样,获取最新提醒的查询将很快执行几毫秒。但是,从一个具有适当索引的数据库开始,将根据您提到的规模(每天100个条目)工作。另外,如果您将Lambda本身用作工作人员来从SQS中提取消息并发送提醒,则它的可伸缩性会更高。