滨州网站建设sdshiya,接网站建设外包的工作,网站建设要学多久,工程软件专业文章目录NoSQL定义NoSQL种类键值存储文档存储宽列存储图形数据库NoSQL 意味着什么ACID vs. BASESQL or NoSQLNoSQL定义
不同于关系型数据库#xff0c;NoSQL 数据库#xff08;也叫非 SQL 或非关系型数据库#xff09;提供的数据存储、检索机制并不是基于表关系建模的。没有…
文章目录NoSQL定义NoSQL种类键值存储文档存储宽列存储图形数据库NoSQL 意味着什么ACID vs. BASESQL or NoSQLNoSQL定义
不同于关系型数据库NoSQL 数据库也叫非 SQL 或非关系型数据库提供的数据存储、检索机制并不是基于表关系建模的。没有了数据表自然就没有了多表连查join操作的性能顾虑范式约束和反范式化的抉择也就不复存在了。 对于 NOSQL另一种有趣的理解是 Not Only SQL在关系型数据库之外的广阔世界里数据不一定非要打平存放到二维表格里关系也不是只能用主键、外键、关系表来描述。
NoSQL种类
不同于关系型数据库中的表结构NoSQL 数据库支持一些更灵活的数据结构使得某些操作更快。
键值存储
键值存储Key-value store是最简单的 NoSQL 数据模型只能存键值对儿只能按 key 查询因为所存储的值对数据库系统不透明类似于 BLOB无法根据值的特征查找或建立索引。 有些键值数据库能够对 key 进行排序从而支持范围查询检索 key 在特定区间内的数据比如找出工号大于 100000 的新人信息。 数据模型上是个哈希表因此能够达到O(1)的读写性能适用于简单、或者频繁更改的数据经常用作内存缓存例如Memcached、Redis。
文档存储
文档存储Document store以文档XML、JSON 等半结构化数据为中心建模相当于增强版的键值存储面向文档提供更精细的数据操作。与键值存储最大的区别在于数据库能够理解并处理所存储的值即文档根据值的特征即文档的内部结构查询和建立索引。此外文档还支持嵌套甚至MongoDB、CouchDB等文档数据库还提供了类 SQL 的查询语言以支持复杂查询。适用于持久化存储用来存放不经常更改的数据作为关系型数据库的一般替代方案。
宽列存储
宽列存储Wide column store中列column是最小的数据单元每一列是个名值对儿以及用于版本控制和冲突解决的时间戳在列之上还有一级超级列super column 仅含列的行称为列族column family含有超级列的行称为超级列族super column family每一行即一个列族或超级列族代表一个实体包含该实体的所有相关信息 数据模型上是个二维 Map特点是高性能以及良好的扩展性因此适用于非常大的数据集被 Twitter、Facebook 等社交网络用来存储海量用户所产生的数据。
图形数据库
数据基于图来建模图中每个节点代表一条记录每条边表示节点之间的关系因此能够轻松描述数据对象之间的复杂关系比如关系模型中复杂的外键和多对多关系
图形数据库的实际应用还不十分成熟甚至还没有一种被广泛采用的标准化查询语言但其连接性优势尤其适用于具有复杂关系的数据模型比如社交网络值得期待。
NoSQL 意味着什么
采用简单的 NoSQL 模型如键值存储相当于把一部分工作从数据库层转移到了应用层。与数据库层相比应用层通常更容易横向扩展因此这种工作量转移有助于提升系统的可扩展性将复杂的数据操作抛给应用层来处理以求更大的优化空间。 甚至事务等强一致性保证也要由应用层来处理因为多数 NoSQL 数据库并不提供事务支持。
ACID vs. BASE
关于这两者的定义解释可以看看我以前的文章 BASE理论基本可用策略 最终一致性实现 和 什么是ACID理论(二阶段、三阶段提交、TCC) 不同于关系型数据库中追求的ACID事务的 4 大特性:
Atomicity原子性一系列操作要么全部成功要么失败全部回滚Consistency一致性事务执行前后数据库都必须处于一致性状态满足既定的所有一致性约束Isolation隔离性并发事务操作的结果状态与按顺序执行一样Durability持久性事务一旦提交对数据的改变就是永久性的遭遇故障也不会丢失已提交的结果
NoSQL 在CAP 的抉择中对 C 做了妥协允许最终一致性即BASE
Basically Available基本可用读写操作尽可能保证可用但不保证任何一致性Soft state软状态由于没有一致性保证在一段时间后只是有可能读到最新状态因为可能还没收敛Eventual consistency最终一致性如果系统运行正常等待足够长的时间后最终能够读到最新状态
也就是说在分布式环境下大多数NoSQL 数据库仅保证最终一致性可能无法立即读到最新的数据。
SQL or NoSQL
相比之下SQL 数据库关系型数据库的优势在于
支持事务操作有明确的扩展模式开发人员、社区、工具等相对成熟
主要缺陷是
复杂的连表查询导致数据读取性能不佳不太容易扩展手动分片关系模型与 OOP 之间存在较大差异Object-relational impedance mismatch只支持存取结构化数据关系模式如表结构必须预先定义并且修改成本高
而 NoSQL 数据库非关系型数据库的优势集中在
不存在复杂的连表查询容易扩展一些 NoSQL 数据库支持自动分片与 OOP 数据模型一致易于使用不必预先定义数据模式支持存取快速变化的结构化、半结构化和非结构化数据读写性能IOPS很高适合数据密集型工作
主要缺陷在于
缺少强一致性保证开发人员、社区、工具等没那么成熟
因此NoSQL 数据库适用于
快速变化数据如点击流click stream数据或日志数据排行榜或评分数据临时数据如购物车数据频繁访问的热点数据元数据metadata以及查找表lookup tables