从应用角度谈谈NoSQL 数据库和关系型数据库的区别之处
NoSQL 数据库和传统关系型数据库到底有什么区别?
不论是讲传统关系型数据库还是NoSQL 数据库的资料都会提到两者的区别,长篇大论就不写了,从实用角度就写几点:
关系型用sql,nosql不用sql
关系型数据在表中,nosql基本非结构化
ACID与BASE的区别
持久化or非持久化区别
数据结构层面的区别
关系型数据库是存储在表的行和列中,因此是表格式的。表格式存储的特点之一就是很容易关联查询,提取数据很方便。
Nosql 数据库则通常存储在数据集中,就像文档、键值对或者图结构。
关系型数据库数据表都预先定义了结构(列的定义),结构描述了数据的形式和内容,是结构化数据。优点是预定义结构带来了可靠性和稳定性,但缺点也很明显,就是修改这些数据比较困难。
Nosql 数据库基于动态结构,使用与非结构化数据。因为 Nosql 数据库是动态结构,可以很容易适应数据类型和结构的变化。
关系型数据库把数据分割为最小的关系表以避免重复,获得更好的空间利用,确保数据存储的规范性。优点是管理起来很清晰,但是单个操作设计到多张表的时候,数据管理就显得有点麻烦。
Nosql 数据存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储成了一个整体,这样整块数据更加便于读写。
关系型数据库是纵向扩展,也就是说想要提高处理能力,要使用性能更快的计算机。因为数据存储在关系表中,操作的性能瓶颈可能涉及到多个表,需要通过提升计算机性能来克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。
Nosql 数据库是横向扩展的,它的存储天然就是分布式的,可以通过给资源池添加更多的普通数据库服务器来分担负载。
关系型数据库通过结构化查询语言来操作数据库(SQL)。SQL 支持数据库 CURD 操作的功能非常强大,是业界的标准用法。
Nosql 查询以块为单元操作数据,使用的是非结构化查询语言( UnQl ),它是没有标准的。
关系型数据库表中主键的概念对应 Nosql 中存储文档的 ID 。关系型数据库使用预定义优化方式(比如索引)来加快查询操作,而 Nosql 更简单更精确的数据访问模式。
关系型数据库遵循 ACID 规则(原子性 (Atomicity) 、一致性 (Consistency) 、隔离性 (Isolation) 、持久性 (Durability) )。
Nosql 数据库遵循 BASE 原则(基本可用( Basically Availble )、软 / 柔性事务( Soft-state )、最终一致性( Eventual Consistency ))。
由于关系型数据库的数据强一致性,所以对事务的支持很好。关系型数据库支持对事务原子性细粒度控制,并且易于回滚事务。
Nosql 数据库是在 CAP (一致性、可用性、分区容忍度)中任选两项,因为基于节点的分布式系统中,很难全部满足,所以对事务的支持不是很好。
关系型数据库为了维护数据的一致性付出了巨大的代价,读写性能比较差。在面对高并发读写性能非常差,面对海量数据的时候效率非常低。
Nosql 存储的格式都是 key-value 类型的,并且存储在内存中,非常容易存储,而且对于数据的 一致性是 弱要求。Nosql 无需 sql 的解析,提高了读写性能。
关系型数据库通常有 SQL Server , Mysql , Oracle 等。
Nosql 数据库有 redis , memcache , MongoDb等等 。大多数的关系型数据库都是付费的并且价格昂贵,成本较大,而 Nosql 数据库通常都是开源的。
标签: