文档章节

NoSQL介绍

你我他有个梦
 你我他有个梦
发布于 2017/02/23 14:50
字数 2074
阅读 1670
收藏 134

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处理器等)、存储容量(水平扩展与纵向扩展)、成本(数据库重构,分库分表,加字段)、数据结构僵硬不灵活、太过于复杂

© 著作权归作者所有

下一篇: spanner论文
你我他有个梦

你我他有个梦

粉丝 96
博文 130
码字总数 109764
作品 0
通州
程序员
私信 提问
加载中

评论(1)

抢地主
抢地主
了解一下,谢谢
聚焦NOSQL数据库实战分享

NOSQL正在被更多的公司所接受,在选型时如何考虑关系型数据库和NOSQL数据库的差异?在迁移及NOSQL应用过程中有哪些利弊、陷阱与挑战?NOSQL如何运用于大型管理系统的开发和使用,人人游戏如何...

CSDN云计算俱乐部
2013/08/16
729
1
《NoSQL数据库入门》书评赠书活动,国内首本NoSQL书

图灵教育&开源中国联合举办读样章赠图书活动,免费赠送《NoSQL数据库入门》10册! 本书核心:了解当今最炙手可热的NoSQL新型数据库技术;介绍memcached、Tokyo Tyrant、Redis、MongoDB;如何...

生气的散人
2012/06/19
5.2K
44
【新书推荐】《NoSQL数据库入门 》国内第一本NoSQL书

【介绍memcached、Tokyo Tyrant、Redis、MongoDB】【如何基于MySQL应用NoSQL技术特性】 内容简介: 在云计算时代,传统的关系型数据库的不足凸显出来,尤其是它无法应对大数据量的处理需求。...

生气的散人
2012/05/11
947
0
Martin Fowler对于nosql的看法

The rise of NoSQL databases marks the end of the era of relational database dominance NoSQL数据库的崛起标志这个关系型数据库统治时代的终结。 But NoSQL databases will not become ......

PaperHY
2014/03/18
98
0
关系型数据库和NoSQL数据库

关系型数据库和NoSQL数据库 什么是NoSQL 大家有没有听说过“NoSQL”呢?近年,这个词极受关注。看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要...

丈量大地
2014/03/11
335
1

没有更多内容

加载失败,请刷新页面

加载更多

HashSet和HashMap有什么区别?

HashSet 底层是采用 HashMap 实现,HashSet 的实现比较简单,HashSet 的绝大部分方法都是通过调用 HashMap 的方法来实现 调用 HashSet 的 add 方法时,实际上是向 HashSet 对象内部持有的 Ha...

ConstXiong
1分钟前
0
0
击穿JVM虚拟机

什么是JVM虚拟机 首先我们需要了解什么是虚拟机,为什么虚拟机可以实现夸平台,虚拟机在计算机中扮演一个什么样的角色。 (从下向上看) 看上图的操作系统与虚拟机层,可以看到,JVM是在操作...

兜兜毛毛
8分钟前
2
0
OpenNMS 利用 Sentinel处理Netflow(流量流向分析)

准备环境 CentOS-7-x86_64 Java8 OpenNMS 23.0.4 minion-23.0.4 sentinel-23.0.4 elasticsearch-6.7.1.tar.gz OpenNMS 配置 1 配置ActiveMQ vi $OPENNMS_HOME/etc/opennms-activemq.xml 取消......

qoswork
12分钟前
2
0
PHP Socket初探---先从一个简单的socket服务器开始

socket的中文名字叫做套接字,这种东西就是对TCP/IP的“封装”。现实中的网络实际上只有四层而已,从上至下分别是应用层、传输层、网络层、数据链路层。最常用的http协议则是属于应用层的协议...

bengozhong
19分钟前
2
0
Git

指令 git init :创建版本库,生成.git文件夹 git add XX:上传代码到暂存区 git state:查看目前本地工作起、暂存区、分支,三者之间的文件状态 git diff demo.html:查看工作区和暂存区的代码...

Hui先生
39分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部