[NoSQL](https://zh.wikipedia.org/wiki/NoSQL)
NoSQL是对不同于传统的关系数据库的数据库管理系统的统称。
两者存在许多显著的不同点,其中最重要的是NoSQL不使用SQL作为查询语言。其数据存储可以不需要固定的表格模式,也经常会避免使用SQL的JOIN操作,一般有水平可扩展性的特征。
## 发展历史
NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库[1]。
2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论[2],来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。
2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。因此,对NoSQL最普遍的解释是“非关联型的”,强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。
## 特点
当代典型的关系数据库在一些数据敏感的应用中表现了糟糕的性能,例如为巨量文档创建索引、高流量网站的网页服务,以及发送流式媒体。[3]关系型数据库的典型实现主要被调整用于执行规模小而读写频繁,或者大批量极少写访问的事务。
NoSQL的结构通常提供弱一致性的保证,如最终一致性,或交易仅限于单个的数据项。不过,有些系统,提供完整的ACID保证在某些情况下,增加了补充中间件层(例如,CloudTPS)[4]。有两个成熟的系统有提供快照隔离的列存储:像是Google基于过滤器系统的BigTable[5],和滑铁卢大学开发的HBase[6]。这些系统,自主开发,使用类似的概念来实现多行(multi-row)分布式ACID交易的快照隔离(snapshot isolation)保证为基础列存储,无需额外的数据管理开销,中间件系统部署或维护,减少了中间件层。
少数NoSQL系统部署了分布式结构,通常使用分布式散列表(DHT)将数据以冗余方式保存在多台服务器上。依此,扩充系统时候添加服务器更容易,并且扩大了对服务器失效的承受能程度。[7]
##分类
1. 文档存储
| 名称 | 语言 |
| --- | --- |
|BaseX| XQuery,Java|
|CouchDB| Erlang|
|eXist | XQuery|
|iBoxDB | Java,CSharp|
|Jackrabbit| Java|
|Lotus Notes| LotusScript,Java等|
|MarkLogic Server| XQuery|
|MongoDB |C++|
|OrientDB |Java|
|SimpleDB |Erlang|
|Terrastore |Java|
|ElasticSearch |Java|
|No2DB |C#|
2. 图形关系存储
| 名称 | 语言 |
| --- | --- |
|AllegroGraph| SPARQL|
|DEX |Java , C#|
|Neo4j |Java|
|FlockDB| Scala|
3. 键-值(key‐value)存储
**最终一致性的键-值存储**
* Cassandra
* Dynamo
* Hibari
* Project Voldemort
* Riak
**架构性键-值储存**
* GT.M
* InterSystem Globals
4. 主机式服务
**Key/value硬盘存储**
* BigTable
* MemcacheDB
* LevelDB
* Tokyo Cabinet
* Tuple space
* TreapDB
**Key/value RAM存储**
* Oracle Coherence
* memcached
* Citrusleaf database
* Velocity
* Redis
* Tuple space
**Key-value基于Paxos算法的存储**
* Keyspace
5. 多数据库
* OpenQM
* Rocket U2
* Revelation Software's OpenInsight
* Extensible Storage Engine(ESE/NT)
6. 时序型数据库
| 名称 | 语言 |
| --- | --- |
|Graphite |Python|
|InfluxDB |Go|
|Informix TimeSeries| Erlang|
|OpenTSDB |Java|
|RRDtool | C |
7. 对象数据库[编辑]
* Versant Object Database
* db4o
* GemStone/S
* InterSystems Caché
* JADE
* Objectivity/DB
* ZODB
* ObjectStore
8. 列存储[编辑]
* Cassandra
* HBase
* Hypertable
- 数据库
- CAP定理
- 关系模型
- 关系数据库
- NoSQL
- ODBC
- JDBC
- ODBC、JDBC和四种驱动类型
- mysql
- 安装与配置
- CentOS 7 安装 MySQL
- 优化
- 比较全面的MySQL优化参考
- 1、硬件层相关优化
- 1.1、CPU相关
- 1.2、磁盘I/O相关
- 2、系统层相关优化
- 2.1、文件系统层优化
- 2.2、其他内核参数优化
- 3、MySQL层相关优化
- 3.1、关于版本选择
- 3.2、关于最重要的参数选项调整建议
- 3.3、关于Schema设计规范及SQL使用建议
- 3.4、其他建议
- 后记
- Mysql设计与优化专题
- ER图,数据建模与数据字典
- 数据中设计中的范式与反范式
- 字段类型与合理的选择字段类型
- 表的垂直拆分和水平拆分
- 详解慢查询
- mysql的最佳索引攻略
- 高手详解SQL性能优化十条经验
- 优化SQL查询:如何写出高性能SQL语句
- MySQL索引原理及慢查询优化
- 数据库SQL优化大总结之 百万级数据库优化方案
- 数据库性能优化之SQL语句优化1
- 【重磅干货】看了此文,Oracle SQL优化文章不必再看!
- MySQL 对于千万级的大表要怎么优化?
- MySQL 数据库设计总结
- MYSQL性能优化的最佳20+条经验
- 数据操作
- 数据语句操作类型
- DCL
- 修改Mysql数据库名的5种方法
- DML
- 连接
- 连接2
- DDL
- 数据类型
- 字符集
- 表引擎
- 索引
- MySQL理解索引、添加索引的原则
- mysql建索引的几大原则
- 浅谈mysql的索引设计原则以及常见索引的区别
- 常用工具简介
- QA
- MySQL主机127.0.0.1与localhost区别总结
- 视图(view)
- 触发器
- 自定义函数和存储过程的使用
- 事务(transaction)
- 范式与反范式
- 常用函数
- MySQL 数据类型 详解
- Mysql数据库常用分库和分表方式
- 隔离级别
- 五分钟搞清楚MySQL事务隔离级别
- mysql隔离级别及事务传播
- 事务隔离级别和脏读的快速入门
- 数据库引擎中的隔离级别
- 事务隔离级别
- Innodb中的事务隔离级别和锁的关系
- MySQL 四种事务隔离级的说明
- Innodb锁机制:Next-Key Lock 浅谈
- SQL函数和存储过程的区别
- mongo
- MongoDB设置访问权限、设置用户
- redis
- ORM
- mybatis
- $ vs #
- mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译
- 电商设计
- B2C电子商务系统研发——概述篇
- B2C电子商务系统研发——商品数据模型设计
- B2C电子商务系统研发——商品模块E-R图建模
- B2C电子商务系统研发——商品SKU分析和设计(一)
- B2C电子商务系统研发——商品SKU分析和设计(二)
- 数据库命名规范--通用