MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL(Not Only SQL)的数据库。它们各有各的优点,关键是看用在什么地方。所以我们所熟知的那些SQL语句就不适用于MongoDB了,因为SQL语句是关系型数据库的标准语言。
(1)不同的引擎上有不同的存储方式;
(2)查询语句使用传统的sql语句,拥有较为成熟的体系,成熟度高;
(3)开源数据库的份额在不断增加,MySQL的份额也在持续增长。
海量数据处理时效率变慢。
非关系型数据库属于文档数据库,可以存放xml、json、bson类型数据,这些数据特点是具备自述性,呈现分层的树状数据结构,数据结构由键值对组成。
存储方式:虚拟内存+持久化。
适合场景:事件的记录、内容的管理、博客平台等。
架构特点:可以通过副本集,以及分片来实现高可用。
数据处理:数据是存储在硬盘的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物流内存中,从而达到高速读写。
成熟度与广泛度:新兴数据库,成熟度较低。NOSQL数据库中最接近关系型数据库且比较完善的DB之一,适用人群在不断增长。
1.性能优越:在适量级的内存的MangoDB的性能非常迅速,它将热数据存储在物流内存中,使得热数据的读写变得很快。
2.高拓展:第三方支持丰富,存放的数据格式是json格式。
主要是无事务机制。
1.不支持事务,MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。
2. 应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。
3. MongoDB占用空间过大。
redis内存数据库,也是非关系型数据库,数据保存在内存中,速度快。
1.读写性能优异。
2.支持数据持久化,支持AOF和RDB两种持久化方式。
3.支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
4.数据结构丰富 : 除了支持 string 类型的value 外还支持string, hash, set, stortset, list 等数据结构。
1.Redis 不具备自动容错和恢复功能, 主机从机的宕机都会导致前端部分读写请求失败, 需要等待机器重启或者手动切换前端的 IP 才能恢复。
2.主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
3.Redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦。
4.Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。
Mysql 是关系型数据库, 持久化存储, 存放在磁盘里, 功能强大. 检索的话, 会涉及到一定 IO , 数据访问也就慢;
Redis 是内存数据库,也是非关系型数据库 数据保存在内存中, 速度快。
Redis 和MongoDB 的优缺点:
MongoDb 和Redis 都是NoSQL, 采用结构型数据存储 . 二者在使用场景中,存在一定的区别, 这也主要由于二者在内存映射的处理过程, 持久化的处理方法不同.
MongoDB 建议集群部署, 更多我的考虑到集群方案, Redis 更偏重与进程顺序写入, 虽然支持集群, 也仅限于主-从模式。