NoSQL = Not Only SQL,意即 不仅仅是SQL
概述
技术可不严谨的分为以下三类
-
解决功能性的问题:
-
解决扩展性的问题:struts、spring、SpringMVC、Hibernate、Mybatis
-
解决性能的问题:NoSQL、 Java线程 Hadoop Nginx、MQ、ElasticSearch
而NoSQL就是针对性能提升的一种泛指非关系型数据库
在web1.0 时代,大多是单体应用,压力一般
在web2.0 时代 ,数据访问量增大,服务器 CPU 及内存压力剧增
在web3.0 ...
在这其中一个瓶颈就是数据库的IO压力, 而通过使用缓存数据库可以很大程度减少数据库IO压力
针对此提出的一些已经应用的方案有
- nginx 负载均衡
- session 同步问 多个服务器的全局变量
- 存储到客户端 cookie
- 缓存数据库 NoSQL
- ...
NoSQL 数据库
不依赖业务逻辑方式存储,而以简单的key-value模式存储,极大增加了数据库的扩展能力
- 不遵循 SQL标准
- 不支持ACID 原子性 隔离性 持久性
- 远高于SQL 的性能
NoSQL适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性
NoSQL不适用场景
- 需要事务支持
- 基于sql结构化查询存储,处理复杂的关系,需要即席查询
- 用不着sql的 和用了sql 也不行的情况,请考虑用NoSql
Memcache
很早出现的NoSql 数据库
数据在内存中,一般不支持持久化
支持简单的key-value模式,支持类型单一
一般是作为缓存数据库辅助持久化的数据库
Redis
几乎覆盖了 memached的绝大部分功能
数据在内存中,支持持久化,主要用作备份恢复
除了支持简单的key-value 模式,还支持多种数据结构的存储 如 list set hash zset 等
一般是作为缓存数据库辅助持久化的数据库
MongoDB
高性能、开源、模式自由、的文档型数据库
数据都在内存中,如果内存不足,把不常用的数据保存到硬盘
虽然是key-value 模式,但是对value 尤其是 json 提供了丰富的查询功能
支持二进制数据及大型对象
可以根据数据的特点 RDMBS,成为独立的数据库,或者配合RDBMS,存储特定的数据
其他数据库
行式存储数据库:MySQL、Oracle
列式数据库:HBase、Cassandra
图关系数据库:Neo4j