redis 消息离线缓存_针对缓存在Redis中的聊天消息的持久化方案分析

在Redis缓存消息的持久化方案中,通过对关系型数据库如MySQL和非关系型数据库MongoDB的对比分析,考虑到数据的非事务性、NoSQL特性以及大并发写入需求,最终选择了MongoDB。MongoDB的文档存储结构适应JSON格式,支持高并发写入,易于扩展和自动分片,特别适合存储和分析聊天消息。
摘要由CSDN通过智能技术生成

选型依据

数据库的选型主要考虑一下几个方面:

数据库本身是否收费

数据库后期维护成本

是否支持水平及垂直扩展,及扩展的容易程度

业务数据本身特性

使用此数据库的开发成本

由于此数据库主要用来存储缓存在redis中的用户发送的消息,对用户发送的消息进行持久化,主要用作以后的分析与查找,本身业务价值不大。redis数据的存储方式为 key-value。本来通过对常用的关系型数据库与非关系型数据库进行对比分析,选择适合本业务需求的最佳数据库。

关系型数据库

对关系型数据库的分析主要分析SqlServer 、Oracle、MySql

Sql Server

SQLServer只能在windows上运行,所以不做考虑。

Oracle

优点

引入了共享SQL和多线索服务器体系结构。这减少了ORACLE的资源占用,并增强了ORACLE的能力,使之在低档软硬件平台上用较少的资源就可以支持更多的用户

提供了基于角色(ROLE)分工的安全保密管理。在数据库管理功能、完整性检查、安全性、一致性方面都有良好的表现。

支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。

提供了新的分布式数据库能力。可通过网络较方便地读写远端数据库里的数据,并有对称复制的技术。

缺点

费用较高

管理维护成本高

对硬件的要求很高

对管理员经验、经验要求很高

数据库崩溃后恢复比较困难

MySql

优点

Mysql是免费开源的

Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统

MySQL不仅能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能作为一个库而嵌入到其他的软件中

支持多线程,使CPU资源得到充分利用

支持特大型的数据库。

使用C和C++编程语言编写,且可以使用多种编译器进行测试,保证源代码的可移植性,安装简单小巧

提供用于管理、检查、优化数据库操作的管理工具

缺点

MySQL在稳定性和集群方面存在一些问题。除非使用收费版本

完全免费的MySQL安装集群式非常困难的。

当表数据非常大时,修改表数据结构会锁定整个表结构

非关系型数据库

由于chat的业务需求为持久化缓存在resis中的用户交互信息。因此详细介绍面向文档的数据库 MongoDB,MongoDB中的文档类似于JSON对象。

什么是MongoDB

MongoDB是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数据结构有键值(key=>value)对组成。MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组及文档数组。

MongoDB的功能

MongoDB可以实现范围查询、数据集包含查询、不等式查询,以及其他一些查询。

可以通过MongoDB对数据进行分析并加以利用,MongoDB提供的聚合工具有:聚合框架、MapReduce、及几个简单的聚合命令:count、distinct和group

副本集 (将数据副本保存到多台服务器上)

自动分片(类似于关系型数据库的分表)

MongoDB除支持MySQL的常用索引外,还支持TTL索引

自动清除:MongoDB还提供了受限集合,当受限集合到达上限时,旧文档会被自动清除。如果想让基于时间而不是整个集合的大小,可以用TTL索引

内置GridFS ,支持大容量存储(GridFS是一个出色的分布式文件系统,可以支持海量的数据存储)

MongoDB 的优势

写入高性能:存储引擎使用的内存映射文件(MMAP的方式),将内存管理工作交给操作系统去处理。MMAP的机制,数据的操作写内存即是写磁盘,在保证数据一致性的前提下,提供了较高的性能。

易于扩展:MongoDB支持自动分片(分片就是讲数据拆分,将其分散存放在不同机器上的过程)。MongoDB自动处理数据在分片上的分布,也更容易添加和删除分片。

对非事务安全,MongoDB很适合业务系统中有大量“低价值”数据的场景

无模式(不像关系型数据库,先定义表结构)

不适合使用MongoDB的场景

MongoDB不支持事务,对事务性有要求的应用程序不建议使用MongoDB

在多个不同纬度上对不同类型的数据进行关联,这是关系型数据库最擅长的事情。

MongoDB 成功应用场景(举例如下)

结论

通过以上的对比分析,我们在MySql 和 MongoDB中选择适合我们的数据库。

数据库类型

是否收费

集群搭建

数据存储

业务关联

是否支持事务

MySql

免费开源

免费开源搭建集群非常困难,MySql集群收费

以行、列形式存储

支持多表关联

支持事务

MongoDB

免费开源

集群搭建非常容易,并自持自动分片

以类似于JSON的形式存储,非常适合web开发

不支持表关联

不支持事务

业务场景数据

redis 中的缓存数据,key-value,转换成 json格式的文本非常容易。因此选择MongoDB

redis 中缓存的用户消息,是 非事务型数据。因此选择 MongoDB

redis 中的数据本身是NoSql ,因此也 不支持关联查询。因此 选择 MongoDB

由于要持久化redis中的用户消息数据,数据量比较大,写频繁。因为 MongoDB的底层实现采用内存映射机制,因此非常适合大并发量的写。

由于用户的消息量非常大,因此要很方便的支持水平扩展。MongoDB的对水平扩展的支持非常好,并且支持自动分片。因此选择MongoDB

通过以上分析:选择MongoDB作为chat消息的持久化

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值