将Amazon SQS用于汇集数据库写入操作

7
假设我正在构建 Netflix,我希望记录每个用户和电影的观看次数。
格式应为 viewID, userID, timestamp,
然而,为了扩展这个功能,假设我们每秒收到 1000 次观看。将这些视图排队到 SQS 中,然后由我们的队列读取器逐个取消队列并将其写入 MySQL 数据库,这样数据库就不会因为写入请求过载。
这种方法看起来可行吗?
1个回答

7

Faisal,

这是一种合理的架构;然而,你应该知道写入SQS比写入像RabbitMQ(或任何本地)消息队列要慢得多。

默认情况下,SQS FIFO队列支持每秒高达3,000条批处理消息,或者每秒高达300条消息(300个发送、接收或删除操作)。要请求限制增加,您需要提交支持请求。

话虽如此,从SQS开始并不是一个坏主意,因为它易于使用和调试。

另外,您可能想要研究MongoDB进行日志记录...请查看以下参考文献:

MongoDB非常适用于日志记录

http://blog.mongodb.org/post/172254834/mongodb-is-fantastic-for-logging

Capped Collections

http://blog.mongodb.org/post/116405435/capped-collections

使用MongoDB进行实时分析

http://blog.mongodb.org/post/171353301/using-mongodb-for-real-time-analytics


非常感谢!这些链接很棒。 - Faisal Abid
1
我不再推荐使用MongoDB进行日志记录。现在,我可能会使用更类似于Kafka的东西,并且可能会使用多个流消费者处理器。其中一个处理器应该是整个流历史记录的备份,以便轻松重放。 - Wil Moore III
@WilMooreIII:经过这么多年,这个架构还有效吗?最好将操作写入SQS并在那里完成(从而使其更简短)?然后有一个独立的进程从SQS读取并写入数据库? - Rohitesh
1
@Rohitesh:在我看来,我个人仍然更喜欢Kafka;不过SQS也可以。 - Wil Moore III
@WilMooreIII 实际上,我的问题是,这种结构仍然有意义吗?如果我有一个高流量的应用程序,需要进行数据库写入,通过将数据写入队列,然后有一个单独的进程从该队列中读取并写入数据库,是否真的可以提高吞吐量,还是直接在第一时间写入数据库更好?(如果您愿意,我可以将此作为单独的问题而不是在此评论线程中发送垃圾信息) - Rohitesh
@Rohitesh 最好提出一个新问题,这样其他人也可以参与进来。 - Wil Moore III

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接