NoSQL介绍

服务器

浏览数:14

2020-5-31

AD:资源代下载服务

1.    介绍

1.1     出现的背景

NoSQL这个术语来源于一群定期在旧金山湾区开会并讨论一些共同关注可扩展的开源数据库的人们。该术语在2009年初被认同。

1.1.1      阻抗失谐

  • 关系模型和内存中的数据结构不匹配。

在关系模型当中,“关系元组的值必须很简单”,不能包含嵌套记录或列表等任何结构。但内存中的数据结构则无此限制,所以如果要把它保存到磁盘(关系型数据库)当中,必须将其转换为“关系”,需要在两种不同的表示形式之间转译。

  • 采用更为方便的数据交互方式提升开发效率。

Web服务的集成,可以将交互工作交给应用程序的接口,可以使用嵌套记录及列表等更丰富的数据结构,可存储在xml文档或json格式的介质中。如果使用sql交互,必须使用关系型的数据结构。

1.1.2      待处理的数据量大

  • 超过关系型数据库的承载能力。

21世纪互联网公司的网站规模在扩大,数据量在不断增长,用户越来越多,访问量越来越大。

  • 大集群的出现。

关系型数据库并不是设计给集群用的,使用集群时,会出现技术(关系型数据库集群中的ACID问题)、许可费(商用关系型数据库非常昂贵)、横向扩展(sharding)和纵向扩展(购买机器,扩展度及其有限)问题。

  • 对数据的访问效率要求高。

 

1.2     什么是NoSQL?

NoSQL是关于快速而高效地处理数据,专注于性能、可靠性和敏捷性的一组概念。从以下方面来揭示它的主题:

  • NoSQL不仅仅是普通意义上的表——NoSQL系统可以从许多格式中存储和检索数据:键值存储、图数据库、列族存储、文档存储甚至是普通的表。
  • NoSQL避免连接操作——NoSQL系统能够通过简单的接口提取数据从而避免连接操作。
  • NoSQL无模式——NoSQL系统允许将数据拖拽到一个文件夹并进行查询,而不需要创建对象-关系模型。
  •  NoSQL工作在多核处理器上——NoSQL系统允许将数据库部署在多核处理器上从而保持良好的性能。
  • NoSQL运行在无共享的商用计算机——大多数(并不是所有)NoSQL系统利用廉价的商用处理器、独立的硬盘和内存进行搭建。
  • NoSQL支持线性扩展——当你增加更多的处理器时,你的单位性能增量始终是一致的。
  • NoSQL是创新的——NoSQL对于存储、检索、操作数据提供了更多的选择。NoSQL的支持者对于NoSQL和SQL解决方案持一种兼收并蓄的态度。NoSQL社区定义其为“不只是SQL”。

1.3     NoSQL不是什么?

  • NoSQL不是一种SQL语言——NoSQL并不是用非SQL查询语言的应用。SQL和其他查询语言也可以被用于NoSQL数据库。
  • NoSQL不仅是开源的——尽管许多NoSQL系统都有一个开源模式,但是借鉴NoSQL思想的商业产品同样也不排斥开源。仍然可以通过商业产品创新地解决问题。
  • NoSQL不仅仅代表海量数据——大部分但不是所有的NoSQL应用都是来源于为应对海量数据而提升当前应用运行规模的需求。虽然数据的容量和数据处理速度很重要,但NoSQL也专注于数据的种类和敏捷性。
  • NoSQL和云计算没有特定的关系——虽然很多的NoSQL系统为了能在负载变化时利用云端动态扩展的优势而部署在云端,但是NoSQL系统也能像在云端运行那样运行在公司的数据中心。
  • 这不是关于如何用好RAM和SSD——NoSQL专注于高效的使用RAM和SSD以获得性能的提升,但NoSQL系统可以运行在普通硬件之上。

2.    NoSQL类型

NoSQL应用采用很多数据存储类型。有简单的表现键值关系的键值数据库、表现关联关系的图数据库、用以存储可变数据的文档存储和稀疏矩阵存储的列族数据库。每一种都有其独特的属性和使用场景:

 

                                   如表所示       4种主要的NoSQL系统及其代表产品

                

3.    NoSQL相关疑问总结

    3.1    为什么要用nosql?

        基于传统数据库的数据容量、处理速度、多样性而带来的问题,需要开发出这么一种数据结构多样化、灵活、处理速度达到大数据集的能力的产品。
        google论文的发表往往会催生出一些新技术的产生,如推动nosql运动最有影响力的Mapreduce系统,Google利用商用廉价的cpu将大量的web数据转换为内容搜索引擎
        Google的Bigtable催生出了一系列的分布式存储系统。而亚马逊的Dynamo是nosql运动的重要转折点,它的出生背景就是因为传统关系型数据库无法解决他们的业务需求,基于存储灵活、可靠性和可扩展性催生了键值对类型的数据结构,而在之后的nosql运动当中,nosql和RDBMS是兼收并蓄的。

         git、svn与nsoql采用了相同的模式,如分布式系统、文档散列和散列树来快速确定事务是同步的。如修改数据库的本地副本并且在需要时快速和主副本进行同步,实现方式就是计算系统的每个对象的散列值。

3.2    既然是个新兴数据库,是不是可以代替传统数据库?

主要为了弥补关系型数据库的不足而设计,所以两者是互补关系,并不能说谁替代谁

3.3    与关系型数据库有什么区别?

a.传统关系型数据库在设计的时候还没有诞生SSD,所以必然是HDD的产物,而且他是设计在单cpu上的。我们知道SSD比HDD快很多,nosql可以有效地利用SSD。
b.nosql大多采用一致性散列算法,将热点信息存储于缓存当中,可以减少磁盘访问,而且基于分布式的设计,一致性散列算法可以发布到分布式节点而
有效地比较远程数据库的一致性。
c.事务方面。两者采用完全不同的方法ACID和BASE(基本可用,软状态,最终一致性),从一定角度上说,ACID是悲观的,而BASE是乐观的。两者关注的点是不一样的
d.数据库的水平扩展。传统关系型数据库在面临cpu、磁盘瓶颈的时候,通常是分库分表,也就是数据切片,分布到不同的机器上,来平摊这些工作,而这些分库分表的操作都需要人手工干预。nosql则不然,他们内置了这种特性,只需增加机器就可以了。
e.nosql利用了协同工作的模块化组件这一思想,他认为工作可以划分给各个机器协同工作,可以重复利用资源
f.应用之间的差异非常明显,看图RDBMS与nosql应用的差异.PNG
g.RDBMS视图可以控制用户对表的访问权限,可以通过连接操作摘出表中可以被访问的字段,nosql没有这种特性,所以用哪种类型数据库还得看需求

3.4    nosql主要用来解决什么问题的?

性能瓶颈(磁盘、cpu处理器等)、存储容量(水平扩展与纵向扩展)、成本(数据库重构,分库分表,加字段)、数据结构僵硬不灵活、太过于复杂

作者:你我他有个梦