0%
Sql与NoSql的区别
- 设计模型
Sql数据库是关系模型的实现,设计的主体是数据库、表、行、键,数据关系以表的模型体现,遵循数据库设计范式要求,用于存储结构化的数据,数据结构、数据依赖关系在表结构设计阶段就被确定,导致了关系型数据库在快速迭代的系统中非常难以适应。
NoSql数据库模型比Sql宽泛的多,设计上有K-V模型、对象模型、文档模型、XML模型,数据结构也多为非结构或半结构的数据,能很好的适应快速迭代的环境,但由于数据约束定义不完整或缺失,数据维护不方便,不适用于数据间高度依赖的场景。
- 安全
Sql支持事务,结构化本身的定义也保证了数据的一致性和完整性,因此,在对安全要求比较高的领域,如银行等,仍然无法被nosql替换,此外,关系型数据库中权限,角色,视图的设计能保证数据得到合理的使用控制。
NoSql只能高度强调数据的不可丢失。
- 扩展性
关系型数据库中约束性的设计,限制了关系型数据库平行扩展的能力,在互联网发展过程中,为了抵抗关系型数据库在单向膨胀上的压力,出现的大量反范式的设计、技术,如分库分表、数据冷热分离、读写分离等。
NoSql数据库具备非常强的平行扩展能力,大多数NoSql数据库系统在架构上都是面向分布式的环境,可非常方便的支持数据多点备份,故障转移修复,负载均衡,主机推举机制。
- 性能
Sql数据库的设计中,一致性设计与性能的考虑往往是对抗的,一致性设计严密的体系中,由于索引,外键等的存在,数据插入性能会被压缩;由于水平扩展的困难,随着数据量的膨胀,Sql的索引,存储,查询会变得越来越缓慢。
NoSql在性能的考虑上比Sql有太多的选择,低延迟的查写方案里,Memcache、Redis内存存储都是不错的选型(Sql数据库也有一些内存引擎如Mysql memory,但是仍然是由于横向扩展的能力受限,只能最大限度压榨单机内存及交换区,或者提升机器配置来解决数据增长的问题),在高于TB级别的存储中,HBase等也可通过增加Region方式来保证查询的低时延。
- 成熟度
Sql数据库的接口是高度标准统一的(不同数据库厂家在实现上有略微区别)
NoSql数据库从设计到实现缺乏统一的标准,各产品接口大相径庭。