内存数据库
更多的节点,可以保证服务器性能
数据存储为一个文档,数据结构由键值(key=>value)对组成
MongoDB 数据库为文档增加了序列化的操作,最终存进磁盘的其实是一种叫做 BSON 的格式,即 Binary-JSON
非关系型数据库(NoSQL ),属于文档型数据库
MongoDB 对数据之间事务关系支持比较弱
存储方式:虚拟内存+持久化
索引是b树(因为每个数据是一个文档,不需要连续的空间)
持久化方式
主要特点
MongoDB优点
MongoDB缺点
MongoDB 的适用场景
MongoDB 与MySQL 的比较
- 适合那些对数据库具体数据格式不明确或者数据库数据格式经常变化的需求模型
- 自带一个分布式文件系统,可以很方便地部署到服务器机群上
- 自带了对map-reduce运算框架的支持,这也很方便进行数据的统计,类似group-BY
- MongoDB与MySQL命令对比 传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成
- MongoDB 是由数据库(database)、集合(collection)、文档对象(document)三个层次组成
- MongoDB 对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点
- mysql和redis的数据库类型
- mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢
- redis是NOSQL,非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限
- 运行机制
- mysql每次请求访问数据库时,都存在着I/O操作
- redis缓存就是数据交换的缓冲区(cache),读取速度快
- 需求上
- mysql和redis因为需求的不同,一般都是配合使用
- 需要高性能的地方使用Redis,不需要高性能的地方使用MySQL。存储数据在MySQL和Redis之间做同步‘
- 二者在内存映射的处理过程,持久化的处理方法不同
- mongo mmap
- redis AOF RDB
- 实现语言
- mongo c++
- redis c++/c
- 协议
- mongo BSON/二进制定义
- redis RESP
- 性能
- mongo 依赖内存,TPS较高
- redis 依赖内存,TPS非常高
- redis>mongo
- 可操作性
- mongo 丰富的数据表达、索引;最类似于关系数据库,支持丰富的查询语言
- redis 数据丰富,较少的IO
- mongo>redis
- 内存及存储
- mongo
- 适合大数据量存储,依赖系统虚拟内存管理,采用镜像文件存储;内存占有率比较高,官方建议独立部署在64位系统(32位有最大2.5G文件限制,64位没有改限制
- redis
- Redis2.0后增加虚拟内存特性,突破物理内存限制;数据可以设置时效性,类似于memcache
- 可用性
- mongo支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制
- redis 依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制;不支持自动sharding,需要依赖程序设定一致hash机制
- MongoDB优于Redis;单点问题上,MongoDB应用简单,相对用户透明,Redis比较复杂,需要客户端主动解决。(MongoDB 一般会使用replica sets和sharding功能结合,replica sets侧重高可用性及高可靠性,而sharding侧重于性能、易扩展)
- 可靠性
- mongo从1.8版本后,采用binlog方式(MySQL同样采用该方式)支持持久化,增加可靠性
- redis依赖快照进行持久化;AOF增强可靠性;增强可靠性的同时,影响访问性能
- MongoDB优于Redis
- 一致性
- mongo不支持事物,靠客户端自身保证
- redis支持事物,比较弱,仅能保证事物中的操作按顺序执行
- Redis优于MongoDB
- 数据分析
- mongo内置数据分析功能(mapreduce)
- redis 不支持
- redis > mongo
- 应用场景
- mongo海量数据的访问效率提升
- redis较小数据量的性能及运算
- 都不适合的场景
- 需要使用复杂sql的操作
- 需要事务系统
内容 | mongo | mysql |
---|---|---|
数据类型 | 非关系型 | 关系型 |
存储方式 | 虚拟内存+持久化 | 不同的存储引擎存储方式不一样 |
架构特点 | 通过副本集和sharding实现高可用 | 单点,M-S,MHA,MMM,Cluster |
数据处理方式 | 基于内存,将数据存储在物理内存中,从而达到高速读写 | 不同的引擎有不同的特点 |