vlambda博客
学习文章列表

关系库、内存库、Nosql区别与联系

关系型数据库和Nosql区别

也许有人迷惑关系型数据库和非关系型数据库区别,其实非关系型数据库就是Nosql,所谓Nosql,就是(NotOnly SQL),这个问题等价于关系型数据库和Nosql区别。

Nosql简介 Redis,Memchche,MongoDb的区别

1. 本质:非关系型数据库的实质:非关系型数据库产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能。

2. 存储方式:

关系型数据库是以表的形式存储数据的,nosql不是,它是大块的组合在一起,通常存储在数据集中,用的较多的是KeyValue的形式,也有文档结构和图结构

3. 存储结构

关系型数据库对应的是结构化数据,数据表都预先定义了结构(列的结构),结构描述了数据的形式和内容。这一点对数据建模至关重要,虽然预定义结构带来了可靠性和稳定性,但是修改这些数据比较困难。而Nosql数据库基于动态结构,可以很容易适应数据类型和结构的变化。

关系型数据库的数据存储为了更高的规范性,把数据分割为最小的关系表以避免重复,获得精简的空间利用。虽然管理起来很清晰,但是单个操作设计到多张表的时候,数据管理就显得有点麻烦。而Nosql数据存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储成了一个整体,这样整块数据更加便于读写。

4. 存储扩展

这可能是两者之间最大的区别,关系型数据库是纵向扩展,也就是说想要提高处理能力,要使用速度更快的计算机。因为数据存储在关系表中,操作的性能瓶颈涉及到多个表,需要通过提升计算机性能来克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。而Nosql数据库是横向扩展的,它的存储天然就是分布式的,可以通过给资源池添加更多的普通数据库来分担负载。

5. 查询方式

关系型数据库通过结构化查询语言来操作数据库(即SQL)。SQL支持数据库CURD操作的功能非常强大,是业界的标准用法。而Nosql查询以块为单元操作数据,使用的是非结构化查询语言(UnQl) ,它是没有标准的。关系型数据库表中主键的概念对应Nosql中存储文档的ID。关系型数据库使用预定义优化方式(比如索引)来加快查询操作。

6. 事务

关系型数据库遵循ACID(原子性,一致性,隔离性,持久性)规则,而Nosql数据库遵循BASE(基本可用,软/柔性事务,最终一致性)。由于关系型数据库的数据强一致性,所以对事务的支持很好。关系型数据库支持对事务原子性细粒度控制,并且易于回滚事务。而Nosql数据库是在CAP(一致性,可用性,分区容忍度)中任选两项,因为基于节点的分布式系统中,很难全部满足,所以对事务的支持不是很好,虽然也可以使用事务,但是并不是Nosql的闪光点。

7. 性能

关系型数据库为了维护数据的一致性付出了巨大的代价,读写性能比较差。在面对高并发读写性能差,面对海量数据的时候效率非常低。而Nosql存储的格式都是key-value类型的,并且存储在内存中,非常容易存储,而且对于数据的一致性是弱要求。Nosql无需sql的解析,提高了读写性能。

8. 授权方式

关系型数据库通常有SQL Server,Mysql,Oracle。主流的Nosql数据库有redis,memcache,MongoDb。大多数关系的关系型数据库都是付费并且价格昂贵,成本较大,而Nosql数据库通常都是开源的。

内存数据库和Nosql区别

1. nosql数据库与内存数据库

2. Nosql与内存数据库有交集,nosql不一定是内存数据库(如mongodb是文档型数据库),内存数据库不一定是Nosql,存在关系型的内存数据库,如SQLite,MySQL.

3. 内存数据库数据是完全保存在内存中的,一旦掉电,内存内数据将完全丢失,但是大部分内存数据库会定期将数据写入磁盘,对容灾有帮助,但是在发生掉电时未来得及刷入磁盘的数据将会丢失。

4. 内存数据库的优势在于高性能,所有的操作都是在内存中进行的,从而降低了IO操作,主要应用于一些对实时性要求很高的应用中。

本着“操作越少,速度越快”的原则,有人推荐直接使用内存集合而不使用内存数据库。

如果想提高速度,可以用Dictionary泛型类,

如果想查询灵活,可以用DataTable类,

其实如果多机应用的话,还不如直接用sql server,用内存数据更麻烦也不会提高速度。


免责声明:内容整理自网络,仅供学习交流,如涉及作品版权问题,请及时与我们联系,谢谢!