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

一)MongoDB数据库的引用

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

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

data mongodb spring 某列求和 mongodb 队列_分布式

以电商的物流信息为例:

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

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

二)RabbitMQ:消息队列

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

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

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

data mongodb spring 某列求和 mongodb 队列_rabbitmq_02

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

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

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

data mongodb spring 某列求和 mongodb 队列_mongodb_03