一:NoSQL数据库简介
1.1:技术发展
- 技术的分类
- 解决功能性的问题:Java、JSP、RDBMS、Tomcat、HTML、Linux、JDBC、SVN
- 解决扩展性的问题:Spring、Mybatis、SpringMVC
- 解决性能的问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ELasticSearch
- Web1.0时代
- Web1.0的时代,数据访问量很有限,用一夫当关的高性能的单点服务器可以解决大部分问题
- Web2.0时代
- 随着Web2.0时代的到来,用户访问量大幅度提升,同时产生了大量的用户数据。加上后来的智能移动设备的普及,所有互联网平台都面临来巨大的性能挑战。
- 解决CPU及内存压力
- 解决IO压力
1.2:NoSQL数据库
1.2.1:NoSQL数据库概述
NoSQL(Nosql = Not Only SQL)意即“不仅仅是SQL”,泛指非关系型的数据库。
NoSQL不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。
- 不遵循SQL标准
- 不支持(事务)ACID
- A(原子性):一个事务中的所有操作,要么全部成功、要么全部失败,不会结束在中间的某一个环节。
- C(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
- I(隔离型):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
- 读未提交
- 读提交
- 可重复读
- 可串行化
- D(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
- 远超于SQL的性能
1.2.2:NoSQL适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据库的高可扩展性
1.2.3:NoSQL不适用场景
- 需要事物支持
- 给予SQL的结构化查询存储。处理复杂的关系,需要即席查询
- 用不着SQL的和用了SQL也不行的情况,请考虑用NoSQL
1.2.4:Memcache
- 很早出现的NoSQL数据库
- 数据都在内存中,一般不持久化
- 支持简单的key-value模式,支持类型单一
- 一般是作为缓存数据库辅助持久化数据库
1.2.5:Reids
- 几乎覆盖了Memcache的绝大部分功能
- 数据在内存中,支持持久化,主要用作备份恢复
- 除了支持简单的key-value模式,还支持多种数据结构的存储,比如list、set、hash、zset等。
- 一般是作为缓存数据库辅助持久化的数据库
1.2.6:MongoDB
- 高性能、开源、模式自由(schema free)的文档型数据库
- 数据都在内存中,如果内存不足,把不常用的数据库保存到硬盘
- 虽然是key-valu模式,但是对value(尤其是json)提供了丰富的查询功能
- 支持二进制数据及大型对象
- 可以根据数据的特点代替RDBMS,成为独立的数据库,或者配合RDBMS,存储特定的类型