1、MySQL
关系型数据库。node
在不一样的引擎上有不一样 的存储方式。mysql
查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。web
开源数据库的份额在不断增长,mysql的份额页在持续增加。redis
缺点就是在海量数据处理的时候效率会显著变慢。算法
2、Mongodb
非关系型数据库(nosql ),属于文档型数据库。先解释一下文档的数据库,便可以存放xml、json、bson类型系那个的数据。这些数据具有自述性(self-describing),呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。sql
存储方式:虚拟内存+持久化。mongodb
查询语句:是独特的Mongodb的查询方式。数据库
适合场景:事件的记录,内容管理或者博客平台等等。json
架构特色:能够经过副本集,以及分片来实现高可用。后端
数据处理:数据是存储在硬盘上的,只不过须要常常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。
成熟度与普遍度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增加。
优点:
-
快速!在适量级的内存的Mongodb的性能是很是迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快,
-
高扩展!
-
自身的Failover机制!
-
json的存储格式!
缺点:主要是无事物机制!
3、Redis
非关系型数据库(nosql )
Redis数据所有存在内存,按期写入磁盘,当内存不够时,能够选择指定的LRU算法删除数据。
4、MongoDB和Redis区别
MongoDB和Redis都是NoSQL,采用结构型数据存储。两者在使用场景中,存在必定的区别,这也主要因为
两者在内存映射的处理过程,持久化的处理方法不一样。MongoDB建议集群部署,更多的考虑到集群方案,Redis
更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。
指标 | MongoDB(v2.4.9) | Redis(v2.4.17) | 比较说明 |
---|---|---|---|
实现语言 | C++ | C/C++ | - |
协议 | BSON、自定义二进制 | 类Telnet | - |
性能 | 依赖内存,TPS较高 | 依赖内存,TPS很是高 | Redis优于MongoDB |
可操做性 | 丰富的数据表达、索引;最相似于关系数据库,支持丰富的查询语言 | 数据丰富,较少的IO | MongoDB优于Redis |
内存及存储 | 适合大数据量存储,依赖系统虚拟内存管理,采用镜像文件存储;内存占有率比较高,官方建议独立部署在64位系统(32位有最大2.5G文件限制,64位没有改限制) | Redis2.0后增长虚拟内存特性,突破物理内存限制;数据能够设置时效性,相似于memcache | 不一样的应用角度看,各有优点 |
可用性 | 支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制 | 依赖客户端来实现分布式读写;主从复制时,每次从节点从新链接主节点都要依赖整个快照,无增量复制;不支持自动sharding,须要依赖程序设定一致hash机制 | MongoDB优于Redis;单点问题上,MongoDB应用简单,相对用户透明,Redis比较复杂,须要客户端主动解决。(MongoDB 通常会使用replica sets和sharding功能结合,replica sets侧重高可用性及高可靠性,而sharding侧重于性能、易扩展) |
可靠性 | 从1.8版本后,采用binlog方式(MySQL一样采用该方式)支持持久化,增长可靠性 | 依赖快照进行持久化;AOF加强可靠性;加强可靠性的同时,影响访问性能 | MongoDB优于Redis |
一致性 | 不支持事物,靠客户端自身保证 | 支持事物,比较弱,仅能保证事物中的操做按顺序执行 | Redis优于MongoDB |
数据分析 | 内置数据分析功能(mapreduce) | 不支持 | MongoDB优于Redis |
应用场景 | 海量数据的访问效率提高 | 较小数据量的性能及运算 | MongoDB优于Redis |
5、Mysql和Mongodb应用场景
MongoDB 的适用场景为:数据不是特别重要(例如通知,推送这些),数据表结构变化较为频繁,数据量特别大,数据的并发性特别高,数据结构比较特别(例如地图的位置坐标),这些状况下用 MongoDB , 其余状况就仍是用 MySQL ,这样组合使用就能够达到最大的效率。
-
1.若是须要将mongodb做为后端db来代替mysql使用,即这里mysql与mongodb 属于平行级别,那么,这样的使用可能有如下几种状况的考量: (1)mongodb所负责部分以文档形式存储,可以有较好的代码亲和性,json格式的直接写入方便。(如日志之类) (2)从data models设计阶段就将原子性考虑于其中,无需事务之类的辅助。开发用如nodejs之类的语言来进行开发,对开发比较方便。 (3)mongodb自己的failover机制,无需使用如MHA之类的方式实现。
-
2.将mongodb做为相似redis ,memcache来作缓存db,为mysql提供服务,或是后端日志收集分析。 考虑到mongodb属于nosql型数据库,sql语句与数据结构不如mysql那么亲和 ,也会有不少时候将mongodb作为辅助mysql而使用的类redis memcache 之类的缓存db来使用。 亦或是仅做日志收集分析。
MongoDB 有一个最大的缺点,就是它占用的空间很大,由于它属于典型空间换时间原则的类型。那么它的磁盘空间比普通数据库会浪费一些,并且到目前为止它尚未实如今线压缩功能,在 MongoDB 中频繁的进行数据增删改时,若是记录变了,例如数据大小发生了变化,这时候容易产生一些数据碎片,出现碎片引起的结果,一个是索引会出现性能问题。
另一个就是在必定的时间后,所占空间会莫明其妙地增大,因此要按期把数据库作修复,按期从新作索引,这样会提高MongoDB 的稳定性和效率。
1.MySQL 来自女儿的名字; MongoDB 来自 humongous
2.MySQL 使用 Table/Row/Column; MongoDB 使用 Collection/Document
3.MySQL 须要指定 table 的 schema; MongoDB的 collection 的每一个 document 的 schema 能够自由修改
4.MySQL 支持 join; MongoDB 没有 join
5.MySQL 使用 SQL 语言; MongoDB 使用相似 JavaScript 的函数
命令对比
MongoDB 与 MySQL 命令对比 传统的关系数据库通常由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB 是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,可是集合中没有列、行和关系概念,这体现了模式自由的特色。
6、MySQL 与 Redis 的区别
MySQL 是持久化存储,存放在磁盘里面,检索的话,会涉及到必定的 IO,为了解决这个瓶颈,因而出现了缓存,好比如今用的最多的 memcached(简称mc)。首先,用户访问mc,若是未命中,就去访问 MySQL,以后像内存和硬盘同样,把数据复制到mc一部分。
Redis 和mc都是缓存,而且都是驻留在内存中运行的,这大大提高了高数据量web访问的访问速度。然而mc只是提供了简单的数据结构,好比 string存储;Redis却提供了大量的数据结构,好比string、list、set、hashset、sorted set这些,这使得用户方便了好多,毕竟封装了一层实用的功能,同时实现了一样的效果,固然用Redis而慢慢舍弃mc。 内存和硬盘的关系,硬盘放置主体数据用于持久化存储,而内存则是当前运行的那部分数据,CPU访问内存而不是磁盘,这大大提高了运行的速度,固然这是基于程序的局部化访问原理。 推理到 Redis + MySQL,它是内存+磁盘关系的一个映射,MySQL 放在磁盘,Redis放在内存,这样的话,web应用每次只访问Redis,若是没有找到的数据,才去访问 MySQL。 然而 Redis + MySQL 和内存+磁盘的用法最好是不一样的。前者是内存数据库,数据保存在内存中,固然速度快。后者是关系型数据库,功能强大,数据访问也就慢。像memcache,MongoDB,Redis,都属于No SQL系列。不是一个类型的东西,应用场景也不太同样,仍是要看你的需求来决定。