MySQL概述:
关系型数据库。无论数据还是索引都存放在硬盘中。到要用的时候才交换到内存中。能够解决远超过内存总量的数据。
在不同的引擎上有不同 的存储方式。
查询语句是用传统的 SQL 语句,拥有较为成熟的体系,成熟度很高。
开源数据库的份额在不断添加,MySQL 的份额页在持续增长。
缺点:在海量数据解决的时候效率会明显变慢。
MySQL特点:
1. 用c和c++编写,并用了多种编译器进行测试,保证源代码的可移植性
2. 支持多种操作系统
3. 为多种编程语言提供可API
4. 支持多线程,充分利使用CPU资源
优化的SQL查询算法,有效的提高查询速度
5. 提供多语言支持,常见的编码如:GB2312、BIG5、UTF8
6. 提供TCP/IP、ODBC和JDBC等多种数据库连接途径
提供使用于管理、检查、优化数据库操作的管理工具
7. 大型的数据库。可以解决拥有上千万条记录的大型数据库
8.支持多种存储引擎
9. MySQL软件采使用了双受权政策,分为社区版和商业版,因为其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库
10. MySQL用标准的SQL数据语言形式
11. Mysql是可以定制的,采使用GPL协议,你可以修改源码来开发自己的MySQL系统
12. 在线DDL更改功能
13. 复制全局事务标识
14. 复制无崩溃从机
15.复制多线程从机
MongoDB概述:
它是一个内存数据库,数据都是放在内存里面的。
对数据的操作大部分都在内存中,但 MongoDB 并不是单纯的内存数据库。
MongoDB 是由 C++ 语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,增加更多的节点,可以保证服务器性能。
MongoDB 旨在为 WEB 应使用提供可扩展的高性能数据存储处理方案。
缺点:占使用的空间很大
MongoDB特点:
1. 模式自由:可以把不同结构的文档存储在同一个数据库里
2. 面向集合的存储:适合存储JSON风格文件的形式
3. 完整的索引支持,对任何属性可索引
4. 复制和高可使用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移
5. 自动分片:支持水平的数据库集群,可动态增加额外的机器
6.丰富的查询:支持丰富的查询表达方式,查询指令用JSON形式额标记,可轻易查询文档中的内嵌的对象及数组
7. 快速就地升级:查询优化器会分析查询表达式,并生成一个高效的查询计划
8.高效的传统存储方式:支持二进制数据及大型对象
Redis:
它就是一个不折不扣的内存数据库。
持久化方式:Redis 所有数据都是放在内存中的,持久化是用 RDB 方式或者者 aof 方式。
Redis特点:
1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行用。
2. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,在set,hash等数据结构的存储。
3. Redis支持数据的备份,即master-slave模式的数据备份
4. 性能极高- Redis能读的速度是110000次/s,写的速度是81000次/s
5. 丰富的数据类型-Redis支持二进制案例的Strings,Lists,Hashes,Setes及Ordered Sets数据类型操作。
6. 原子 - Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
7. 丰富的特性 - Redis还支持publish/subscribe,通知,key过期等等特性。
数据量和性能的比较:
当物理内存够使用的时候,Redis > MongoDB > MySQL
当物理内存不够使用的时候,Redis 和 MongoDB 都会用虚拟内存。
实际上假如Redis要开始虚拟内存,那很显著要么加内存条,要么你就该换个数据库了。
但是,MongoDB 不一样,只需,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmap 的交换较少。
MongoDB 还是能够保证性能。有人用 MongoDB 存储了上T的数据。
MySQL,MySQL根本就不需要担心数据量跟内存下的关系。不过,内存的量跟热数据的关系会极大地影响性能体现。
当物理内存和虚拟内存都不够使用的时候,预计除了 MySQL 你没什么好选择了。
其实,从数据存储原理来看,我更倾向于将 MongoDB 归类为硬盘数据库,但是用了 mmap 作为加速的手段而已。
用场景的不同:
1、MongoDB适使用于:
①网站数据:适合实时的插入,升级与查询,并具有网站实时数据存储所需对的复制及高度伸缩性;
②缓存:因为性能很高,也适合作为信息基础设备的缓存层,在系统重启之后,搭建的持久化缓存可以避免下层的数据源过载;
③大尺寸、低价值的数据也是MongoDB的最佳选择,用传统的关系数据库存储少量数据时可能会比较贵,再次之前很多程序员往往会选择传统的文件进行存储
④高伸缩的场景,非常是个由数十或者者数百台服务器组成的数据库
⑤使用于对象及json数据的存储,MongoDB的bson数据格式非常适合文档格式化的存储及查询。
2、而mysql还是更加适使用于:
①高度事务性的系统。例如银行或者者会计系统,传统的关系型数据库目前还是更实使用于需要大量原子性复杂事务的应使用程序
②传统的商业智能应使用,针对特定问题的BI数据库会对产生高度优化的查询方式,对于此类应使用,数据仓库可能是更合适的选择
3、Redis应使用场景:
①使用来做缓存-redis的所有数据时放在内存中的
②可以在某些特定应使用场景下替代传统数据库--比方社交类的应使用
③在少量大型系统中,巧妙的实现少量特定的功能:session共享、购物车