RDBMS(关系型数据库管理系统),是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,本质上使用一张二维表来表示关系。主要代表:Oracle、SQL Server、MySQL、SQLite。
关系型数据库的特点:
SQL (Structured Query Language) 是结构化查询语言,是一种用来操作RDBMS的数据库语言。SQL 语句的作用是实现数据库的客户端和服务端之间的通信。当前几乎所有关系型数据库都支持使用SQL语言进行操作,也就是说可以通过 SQL 操作 Oracle、SQL Server、MySQL、SQLite 等所有的关系型的数据库。
SQL语句主要分为:
NoSQL(not only sql),泛指非关系型的数据库,不支持SQL语法,NoSQL中存储的数据都是键值对(K-V)形式。NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的 api 和语法,以及擅长的业务场景。NoSQL中的产品种类相当多,主要代表:MongoDB、Redis、CouchDB、Hbase hadoop、Cassandra hadoop。
非关系型数据库的特点:
MySQL 是一个关系型数据库,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 的数据、索引都存放在硬盘中、使用的时候才交换到内存中。
MySQL的特点:
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis 是一个高性能的key-value数据库,是一个内存型数据库,即数据存储在内存中。
Redis 的特点:
MongoDB 是用 C++ 语言编写的,是一个介于关系数据库和非关系数据库之间的产品,基于分布式文件存储的开源数据库系统,是非关系数据库当中功能最丰富、最像关系数据库的。MongoDB 是一种文档型的数据库,所谓文档型的数据库,即可以存放xml、json、bson类型的数据。数据结构由键值(key=>value)对组成,MongoDB 的所有数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。
MongoDB 的特点:
MySQL 是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中。
Redis是非关系型数据库,也是缓存数据库,即将数据存储在缓存中。
MySQL 用于持久化的存储数据到硬盘,功能强大,频繁的访问数据库时,读取速度较慢,也会导致数据库的负载过高。
Redis 用于存储使用较为频繁的数据到缓存中,读取速度快,提高运行效率,但是保存时间有限。
Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。
Redis2.0 后增加虚拟内存特性,突破物理内存限制;数据可以设置时效性。
MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
MongoDB 适合大数据量存储,依赖系统虚拟内存管理,采用镜像文件存储;内存占有率比较高,官方建议独立部署在64位系统(32位有最大2.5G文件限制,64位没有改限制)
Redis 依赖基于快照形式的RDB 或 基于磁盘的AOF进行持久化,增强了可靠性,同时也影响了访问性能。
MongoDB 从1.8版本后,采用binlog方式(MySQL同样采用该方式)支持持久化,增加可靠性。
Redis 事务支持比较弱,只能保证事务中的每个操作连续执行。
MongoDB 不支持事物,靠客户端自身保证。
Redis 依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,因性能和效率问题,所以单点问题比较复杂;不支持自动sharding,需要依赖程序设定一致 hash 机制。
MongoDB 支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制。
Redis 不支持数据分析功能。
MongoDB 内置数据分析功能(mapreduce)。
Redis 更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。
MongoDB 建议集群部署,更多的考虑到集群方案。
Redis 适用于数据量较小的性能操作和运算上。
MongoDB 主要解决海量数据的访问效率问题。
MySQL 是关系型数据库,需提前定义好表和字段结构,不易被扩展。
MongoDB 是非关系型数据库,非常容易被扩展。
MySQL 支持事务,具有ACID的特点,相对比较安全。
MongoDB 不支持事务。
MySQL 的数据存储在硬盘中,读取速度较慢。
MongoDB在启动后会将数据库中的数据以文件映射的方式加载到内存中。如果内存资源相当丰富的话,这将极大地提高数据库的查询速度,毕竟内存的I/O效率比磁盘高多了。
MySQL 数据库中,数据是以表单为媒介进行存储的,每个表单均拥有纵向的列和横向的行。
MongoDB以一种直观文档的方式来完成数据的存储。它很像JavaScript中定义的JSON格式,不过数据在存储的时候MongoDB数据库为文档增加了序列化的操作,最终存进磁盘的其实是一种叫做BSON的格式,即Binary-JSON。
MySQL 数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成。
MongoDB 是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。