本文主要就下面几种数据库的概念进行区别:关系数据库,非关系数据库,内存数据库。
关系数据库
代表
Oracle, DB2, Microsoft SQL Server、Microsoft Access、MySQL。
定义
是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。
简单说,关系型数据库是由多张能互相联接的二维行列表格组成的数据库。
非关系数据库 NoSQL
代表
代表MongoDB,Redis、CouchDB。
定义
是用于存储和检索数据的非关系数据库系统。
非关系数据库大部分是开源的,实现比较简单,大都是针对一些特性的应用需求出现的。根据结构化方法和应用场景的不同,分为以下几类。
NoSQL 分类
(1)面向高性能并发读写的key-value数据库
主要特点是具有极高的并发读写性能,例如Redis、Tokyo Cabint等。
(2)面向海量数据访问的面向文档数据库
特点是,可以在海量的数据库快速的查询数据。例如MongoDB以及CouchDB.
(3)面向可拓展的分布式数据库
解决的主要问题是传统数据库的扩展性上的缺陷。
NoSQL的缺点
但是由于Nosql约束少,所以也不能够像sql那样提供where字段属性的查询。因此适合存储较为简单的数据。有一些不能够持久化数据,所以需要和关系型数据库结合。
内存数据库
代表
Memcached、Redis、SQLite、Microsoft SQL Server Compact 等
定义
顾名思义就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级(1万倍以上,操作磁盘数据库10ms左右,内存数据库100ns左右)
关系数据库和NoSQL区别
- 本质:非关系型数据库的实质:非关系型数据库产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能。
- 存储方式:
关系型数据库是以表的形式存储数据的,nosql不是,它是大块的组合在一起,通常存储在数据集中,用的较多的是KeyValue的形式,也有文档结构和图结构 - 存储结构
关系型数据库对应的是结构化数据,数据表都预先定义了结构(列的结构),结构描述了数据的形式和内容。这一点对数据建模至关重要,虽然预定义结构带来了可靠性和稳定性,但是修改这些数据比较困难。而Nosql数据库基于动态结构,可以很容易适应数据类型和结构的变化。
关系型数据库的数据存储为了更高的规范性,把数据分割为最小的关系表以避免重复,获得精简的空间利用。虽然管理起来很清晰,但是单个操作设计到多张表的时候,数据管理就显得有点麻烦。而Nosql数据存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储成了一个整体,这样整块数据更加便于读写。 - 存储扩展
这可能是两者之间最大的区别,关系型数据库是纵向扩展,也就是说想要提高处理能力,要使用速度更快的计算机。因为数据存储在关系表中,操作的性能瓶颈涉及到多个表,需要通过提升计算机性能来克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。而Nosql数据库是横向扩展的,它的存储天然就是分布式的,可以通过给资源池添加更多的普通数据库来分担负载。 - 查询方式
关系型数据库通过结构化查询语言来操作数据库(即SQL)。SQL支持数据库CURD操作的功能非常强大,是业界的标准用法。而Nosql查询以块为单元操作数据,使用的是非结构化查询语言(UnQl) ,它是没有标准的。关系型数据库表中主键的概念对应Nosql中存储文档的ID。关系型数据库使用预定义优化方式(比如索引)来加快查询操作。 - 事务
关系型数据库遵循ACID(原子性,一致性,隔离性,持久性)规则,而Nosql数据库遵循BASE(基本可用,软/柔性事务,最终一致性)。由于关系型数据库的数据强一致性,所以对事务的支持很好。关系型数据库支持对事务原子性细粒度控制,并且易于回滚事务。而Nosql数据库是在CAP(一致性,可用性,分区容忍度)中任选两项,因为基于节点的分布式系统中,很难全部满足,所以对事务的支持不是很好,虽然也可以使用事务,但是并不是Nosql的闪光点。 - 性能
关系型数据库为了维护数据的一致性付出了巨大的代价,读写性能比较差。在面对高并发读写性能差,面对海量数据的时候效率非常低。而Nosql存储的格式都是key-value类型的,并且存储在内存中,非常容易存储,而且对于数据的一致性是弱要求。Nosql无需sql的解析,提高了读写性能。 - 授权方式
关系型数据库通常有SQL Server,Mysql,Oracle。主流的Nosql数据库有redis,memcache,MongoDb。大多数关系的关系型数据库都是付费并且价格昂贵,成本较大,而Nosql数据库通常都是开源的。
内存数据库和NoSQL区别
- Nosql与内存数据库有交集,nosql不一定是内存数据库(如mongodb是文档型数据库),内存数据库不一定是Nosql,存在关系型的内存数据库,如SQLite,MySQL.
- 内存数据库数据是完全保存在内存中的,一旦掉电,内存内数据将完全丢失,但是大部分内存数据库会定期将数据写入磁盘,对容灾有帮助,但是在发生掉电时未来得及刷入磁盘的数据将会丢失。
- 内存数据库的优势在于高性能,所有的操作都是在内存中进行的,从而降低了IO操作,主要应用于一些对实时性要求很高的应用中。
后续还应该关注下面问题
- 内存数据库是怎么保证数据持久化的?