消息队列与MongoDB数据库概括

本文探讨了在处理大量用户消息时如何优化存储和读取效率。通过使用MongoDB数据库,解决了数据量大和一对一存储的需求,同时引入冷热数据分离策略来管理信息。另外,借助RabbitMQ消息队列,解决了MongoDB一次性插入大量数据可能导致的线程执行问题,确保用户登录时异步接收并存储消息,保证系统稳定运行。
摘要由CSDN通过智能技术生成

问题:每当用户注册成功会给其发送一条注册成功的消息,假设有一百万用户,则此时就要存储一百万条消息,因为内容相同都是注册成功,所以我们若将这条消息只存一遍于数据库虽然会很节省空间,但是这样没有办法记录用户是否已读这条消息,所以必须实现一对一的存储,而mySQL存储数据量>2000万条时,读取的效率会非常的低。

一)MongoDB数据库的引用

1、MongoDB的存储量远高于mySQL,内部是以集合的方式存在的,于是解决 了数据量和一一对应的问题。

2、尽管MongoDB数据库可以存放海量的信息,但是信息量也不能无限大,所以应用冷热数据分离,热数据定期归档。

以电商的物流信息为例:

1)热数据:要经常访问的数据。刚买的商品还未到家,则这个物流信息为热数据。

2)冷数据:不经常访问的数据。商品已邮送到家,则不经常访问物流信息了,所以该数据分到另一个集合中,这样就会缓解查询热数据集合的压力。

二)RabbitMQ:消息队列

由于MongoDB若一次插入海量数据,线程执行就会受到影响,所以进行增删改查可能无法进行,于是引用了消息队列解决该问题,发送信息时候先将消息保存在消息队列中,当用户登录查看之后消息队列再将消息插入到MongoDB数据库,这样就解决了线程执行问题。

Linux下安装RabbitMQ以及五种队列模式。

RabbitMQ支持同步和异步的消息收发,稳定性更强,有五种队列模式

 每当用户登录的时候就会将消息队列中的消息传递给用户,此时将这条消息和用户的id对应起来存放于MongoDB数据库中。

登录模块的消息设置流程:

一定要采用异步多线程的方式实现,若用户长时间不登陆消息过多,这样就会阻塞登录的正常进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值