导读 NoSQL(not only sql,不仅仅是SQL),是一项全新的数据库革命性运动,泛指非关系型数据库,对于NoSQL这个新兴的名词,每个人的理解都不同。其实NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。但是直到2009年,Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。

2009年在亚特兰大举行的”no:sql(east)”讨论会是一个里程碑,其口号是”select fun, profit from real_world where relational=false;”。因此,对NoSQL最普遍的解释是”非关联型的”,强调Key-Value存储和文档数据库的优点,而不是单纯的反对RDBMS。

NoSQL的迅速发展以及由于NoSQL中没有像传统数据库那样定义数据的组织方式为关系型的,所以只要内部的数据组织采用了非关系型的方式,就可以称之为NoSQL数据库。所以随之带来了开源社区上百种所谓的NoSQL数据库,让人眼花缭乱。对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:

不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。

弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。

分布式:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。

BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。

NoSQL优势:避免不必要的复杂性、高吞吐量、高水平扩展能力;比如随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

NoSQL劣势:数据模型和查询语言没有经过数据验证,没有坚实的理论基础;不支持ACID特性,当然使用SQL数据库可以解决这个问题;有些NoSQL数据库过于简单,比如Memcache只是一个内存数据库,适用于某些特性场景;最大的劣势就是没有统一的数据查询模型,每种NoSQL产品都有自己的语言使用方式。

由于NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL。

什么是NewSQL?

通过比较可以发现NoSQL跟SQL之间的对立性太强了,基于NoSQL跟SQL之间的某种差异,比如NoSQL有的功能SQL没有,如分布式、简单数据模型;而SQL有的特性NoSQL又没有,如ACID功能;当然不管哪种数据库,不管其劣势还是优势都有其适用的场景。而SQL很难实现分布式的原因在于,SQL自身的日志机制、锁机制以及缓冲区管理机制。于是就出来了NewSQL数据库的概念,所谓的NewSQL是什么呢?就是想柔和SQL与NoSQL独有的特性。

目前NewSQL大概有两类,第一类是拥有关系型数据库产品和服务,并将关系型数据库的好处与优势带入到分布式架构上,简单来说就是把ACID引入到分布式中;第二类是提供关系型数据库的性能,达到不用考虑水平扩展的方式,简单来说就是改变SQL架构使得它不用水平扩展,不用运行在分布式环境中就能够带来性能上的提升。对于第一类把ACID引入到分布式中去的产品有Clustrix、GenieDB、ScaleArc、ScaleBase、NimbusDB以及MySQL Cluster等。

NoSQL的分类?

总的来说,如今的数据库市场真是百花齐放,大概分类为SQL、NoSQL、NewSQL以及缓存数据库系统。而SQL和NewSQL不是本章讨论的主题,所以下面来说一说NoSQL数据库。

首先需要明确的一点,NoSQL数据库并不是要取代现在广泛应用的传统数据库,而是采用一种非关系型的方式解决数据的存储和计算的问题。目前,可以将众多的NoSQL数据库按照内部的数据组织形式进行如下分类:

键值(Key-Value)存储数据库

这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key-value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key-value就显得效率低下了。

数据模型:key-value

优点:查找速度快

缺点:数据无结构,通常只被当做字符串或二进制数据

应用场景:内容缓存

典型产品:Tokyo,Redis(一键多值),Dynamo ,Oracle BDB以及Memcache(一键一值),但Memcache虽然是Key-avlue存储但是它是缓存数据库。

列存储数据库

顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。

数据模型:数据按列存储、将同一列数据存在一起

优点:查找迅速、可扩展性强、易于实现分布式

缺点:功能相对SQL很有限

应用场景:分布式文件系统或分布式存储

典型产品:Cassandra, HBase, Bigtable

文档型数据库

文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。

数据模型:与键值模型类似,但value指向类似一个容器(文档),容器内有一组信息

优点:数据格式要求不严格,无须提前定义结构,每个文档字段随意

缺点:查询性能不高(比SQL可能稍微好点),缺乏统一查询语法

应用场景:只要不需要ACID就可以使用

典型产品:CouchDB, MongoDB,国内也有文档型数据库SequoiaDB,已经开源

图式数据库

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。

数据模型:图结构模型

优点:利用图结构相关算法提高性能,并满足特殊场景应用需求

缺点:功能有限,且难以实现分布式

应用场景:社交网络推荐系统,比如好友推荐功能,关系图谱

典型产品:Neo4J, InfoGrid, Infinite Graph

因此,我们总结NoSQL数据库在以下的这几种情况下比较适用:

1. 数据模型比较简单;

2. 需要灵活性更强的IT系统;

3. 对数据库性能要求较高;

4. 不需要高度的数据一致性;

5. 对于给定key比较容易映射复杂值的环境。

NoSQL是什么?的更多相关文章

  1. NoSql数据库使用半年后在设计上面的一些心得

    NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...

  2. 非关系型数据库(NoSql)

    最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...

  3. 关系型数据库与NoSQL数据库

    关系型数据库的优缺点 优点: 可以做事务处理,从而保证了数据的一致性: 可以进行JOIN等多表查询: 由于以SQL标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处). 缺点: 大量数据的写 ...

  4. 几款主流 NoSql 数据库的对比

    最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...

  5. “NOSQL” 杂谈

    引言: nosql 的兴起和革命,在我看来已经开始逐渐影响到了传统的sql的地位,但是仅仅是影响而已,取代是不太可能的. 正文: 两年前,一个偶然的机会开始接触到 nosql ( mongodb ). ...

  6. Squirrel: 通用SQL、NoSQL客户端

    安装 配置数据库 配置驱动 配置连接 如果你的工作中,需要使用到多个数据库,又不想在多种客户端之间切换来切换去.那么就需要找一款支持多数据库的客户端工具了.如果你要连接多个关系型数据库,你就可以使用N ...

  7. NoSQL和MongoDB

     NoSQL(NoSQL=Not Only SQL),意即“不仅仅是SQL”.关系数据库关注在关系上,NoSQL关注在存储上. 发展背景 (1)传统关系型数据库遇到了性能瓶颈. 高并发读写(High ...

  8. NoSQL指南

    一.数据库发展 1.早期出现的数据库包括平面文件数据管理系统.分层数据管理系统和网络数据管理系统,分别对应的数据结构是线性表.树和图. 平面文件数据管理系统是使用磁带对数据进行顺序存储的,带来的问题不 ...

  9. NoSQL与RDBMS的九点区别联系

    原文链接:http://blog.sina.com.cn/s/blog_5373fb0b0101ft8a.html     1 理解ACID与BASE的区别(ACID是关系型数据库强一致性的四个要求, ...

  10. 本人为巨杉数据库(开源NoSQL)写的C#驱动,支持Linq,全部开源,已提交github

    一.关于NoSQL的项目需求 这些年在做AgileEAS.NET SOA 中间件平台的推广.技术咨询服务过程之中,特别是针对我们最熟悉的医疗行业应用之中,针对大数据分析,大并发性能的需求,我们也在慢慢 ...

随机推荐

  1. List泛型与DataTable相互转换

    public static class ExtensionMethods{/// <summary>/// 将List转换成DataTable/// </summary>/// ...

  2. sqlserver 删除表中 指定字符串

    源表T "单据编号"               "航班计划日期"        "航班号"          "起飞航站代码&q ...

  3. scrapy中pipeline的一点综合知识

    初次学习scrapy ,觉得spider代码才是最重要的,越往后学,发现pipeline中的代码也很有趣, 今天顺便把pipeline中三种储存方法写下来,算是对自己学习的一点鼓励吧,也可以为后来者的 ...

  4. puppet 横向扩展(二)

    Table of Contents 1. 概述 2. 实验环境 3. 实验步骤 3.1. 机器B 的环境 3.1.1. 安装puppetmaster 以及 apache passenger 3.1.2 ...

  5. Java多线程(四)java中的Sleep方法

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  6. C# 基础知识之 Unix 时间戳转换

    unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒. /// 时间戳转为C#格式时间 private DateTime GetTime(string timeSt ...

  7. 新建SpringBoot项目运行页面报错Whitelabel Error Page This application has no explicit mapping for /error, so yo

    新建SpringBoot项目运行页面报错Whitelabel Error Page This application has no explicit mapping for /error, so yo ...

  8. C# 生成和解析二维码

    下面是C#和JAVA两个版本的开放源码下载: C#:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library JAVA: ...

  9. php文件管理,能够点击依照时间,大小,名称排序

    php文件管理.能够点击依照时间.大小,名称排序  本例没实用到jquery 演示   PHP Code <?php    $rootdir="./";    $spacen ...

  10. Android中实现短信发送的一种方式

    SendSmsActivity.java: package com.test.smsmangerdemo.sendsmsactivity; import android.support.v7.app. ...