2018-08-02-NoSql与Sql之间的优胜劣汰

2018-11-08  本文已影响0人  ohcomeyes

前言

我们都知道Sql(Structured Query Language),翻译过来就是结构化查询语言,常用的Sql database有mysql、oracle、sqlserver等等,那NoSql是什么呢?
NoSql在维基上面的解释是,"non SQL" or "non relational",翻译过来就是非SQL或非关系,我们通常的解释是Not only sql,不仅仅是SQL,我们从相关联的地方来逐步掰扯掰扯。

结构化与no 结构化

先看看数据模型,结构化:二维表(关系型),非结构化:无,半结构化:树,图。

设计角度
SQL遵循ACID原则
A:原子性(Atomicity)
C:一致性(Consistency)
I:隔离性(Isolation)
D:持久性(Durability

数据库设计:3NF
一:确保每列保持原子性
二:确保表中的每列都和主键相关
三:确保每列都和主键直接相关而不是间接相关

NoSQL遵循CAP理论,布式系统只能满足其中两项
C:一致性(Consistency)(所有节点在同一时间具有相同的数据)
A:可用性(Availability)(保证每个请求不管成功或者失败都有响应)
P:分区容错性(Partition tolerance)(系统中任意信息的丢失或失败不会影响系统的继续运作)

使用BASE模型
Basically Available:基本可用
Soft State:软状态,可以一段时间内状态不同步
Eventually consistent:最终一致性

分布式系统一致性
N--数据复制的份数;节点
W--更新数据时需要写完成的节点数;
R--更新时需要读取的节点数;
如果W+R>N,则强一致性
W+R<=N,弱一致性
为了保证高可用性,一般设置N>=3

优缺点
优点
关系型数据库:事务机制和高效的查询机制
非关系型数据库:灵活的可扩展性,灵活的数据模型,与云计算紧密融合。

缺点
关系型数据库:web2.0时代,海量数据的管理需求,数据高并发的需求,高可扩展性和高可用性的需求都很难满足。

  1. 网站系统通常不要求严格的数据库事务
  2. 并不要求严格的读写实时性
  3. 通常不包含大量复杂的SQL查询

非关系型数据库:复杂的查询和事务,还有不如关系型成熟

解决办法
没有一个模式能够适用于截然不同的业务场景
关系模型作为统一的数据模型即被用于数据分析,也被用于在线业务,但这两者一个强调高吞吐,一个强调低延时,已经演化出完全不同的架构。
Hadoop就是针对数据分析,MongoDB、Redis等就是针对在线业务,两者都抛弃了关系模型。所以在设计的时候要根据业务的实际场景来划分不同的数据区域,做不同的数据处理。

NoSQL四大类型

附上对比图

比较标准 RDBMS NoSQL 备注
数据库原理 完全支持 部分支持 RDBMS有关系代数理论作为基础,NOSQL没有统一的理论基础
数据规模 超大 RDBMS很难横向扩展,纵向扩展的空间有限,性能随规模增大而降低,NOSQL容易实现增加设备支持
数据库模式 固定 灵活 RDBMS定义数据库模式严格遵守约束条件,NOSQL不存在数据库模式
查询效率 RDBMS借助索引机制可以实现快速查询,NOSQL没有复制查询的索引,不具备高度结构化查询特性
一致性 RDBMS遵循ACID原则,NOSQL放松事务要求,遵循BASE模型只能保证最终一致性
数据完整性 容易 很难 RDBMS通过主键或者非空约束、外键等来实现,NOSQL无法实现
扩展性 一般 参考数据规模
可用性 很好 RDBMS在任何时候都可以保证数据一致性为优先目标、其次才是优化系统性能,随数据量增大为保证一致性只能提供较弱的可用性,NOSQL能提供较高的可用性
标准化 RDBMS已经标准化(SQL),NOSQL没有统一查询语言,没有行业标准
技术支持 RDBMS成熟,NOSQL起步
可维护性 复杂 复杂

结语

对NoSQL兴趣的话推荐另外一篇文章,是关于Hbase的。
浅谈Hbase与中间的一些设计策略
个人博客~
简书~

上一篇 下一篇

猜你喜欢

热点阅读