NoSQL数据库简介-程序员宅基地

技术标签: json  数据库  大数据  

一、简介

 

    NoSQL(Not Only SQL),泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

    虽然NoSQL流行语火起来才短短一年的时间,但是不可否认,现在已经开始了第二代运动。尽管早期的堆栈代码只能算是一种实验,然而现在的系统已经更加的成熟、稳定。不过现在也面临着一个严酷的事实:技术越来越成熟——以至于原来很好的NoSQL数据存储不得不进行重写,也有少数人认为这就是所谓的2.0版本。这里列出一些比较知名的工具,可以为大数据建立快速、可扩展的存储库。

 

二、NoSQL数据库的四大分类

 

  

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

 

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

 

2、列存储数据库

 

    这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak。

 

3、文档型数据库

 

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

 

4、图形(Graph)数据库

 

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

 

    因此,我们总结NoSQL数据库在以下的这几种情况下比较适用:1、数据模型比较简单;2、需要灵活性更强的IT系统;3、对数据库性能要求较高;4、不需要高度的数据一致性;5、对于给定key,比较容易映射复杂值的环境。

 

三、共同特征

 

    对于NoSQL并没有一个明确的范围和定义,但是他们都普遍存在下面一些共同特征:
    不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
    无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
    弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
    分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
    异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
    BASE:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。
    NoSQL数据库并没有一个统一的架构,两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长,成功的NoSQL必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL。

 

适用场景

NoSQL数据库在以下的这几种情况下比较适用:

1、数据模型比较简单;
2、需要灵活性更强的IT系统;
3、对数据库性能要求较高;
4、不需要高度的数据一致性;
5、对于给定key,比较容易映射复杂值的环境。

 

未来与问题

 

    尽管大多数NoSQL数据存储系统都已被部署于实际应用中,但归纳其研究现状,还有许多挑战性问题。
    已有key-value数据库产品大多是面向特定应用自治构建的,缺乏通用性;
    已有产品支持的功能有限(不支持事务特性),导致其应用具有一定的局限性;
    已有一些研究成果和改进的NoSQL数据存储系统,但它们都是针对不同应用需求而提出的相应解决方案,如支持组内事务特性、弹性事务等,很少从全局考虑系统的通用性,也没有形成系列化的研究成果;
    缺乏类似关系数据库所具有的强有力的理论(如armstrong公理系统)、技术(如成熟的基于启发式的优化策略、两段封锁协议等)、标准规范(如SQL语言)的支持。
    目前,HBase数据库时安全特性最完善的NoSQL数据库产品之一,而其他的NoSQL数据库多数没有提供内建的安全机制,但随着NoSQL的发展,越来越多的人开始意识到安全的重要,部分NoSQL产品逐渐开始提供一些安全方面的支持。
    随着云计算、互联网等技术的发展,大数据广泛存在,同时也呈现出了许多云环境下的新型应用,如社交网络网、移动服务、协作编辑等。这些新型应用对海量数据管理或称云数据管理系统也提出了新的需求,如事务的支持、系统的弹性等。同时云计算时代海量数据管理系统的设计目标为可扩展性、弹性、容错性、自管理性和“强一致性”。目前,已有系统通过支持可随意增减节点来满足可扩展性;通过副本策略保证系统的容错性;基于监测的状态消息协调实现系统的自管理性。“弹性”的目标是满足Pay-per-use 模型,以提高系统资源的利用率。该特性是已有典型NoSQL数据库系统所不完善的,但却是云系统应具有的典型特点;“强一致性”主要是新应用的需求。 

















本文转自朱先忠老师51CTO博客,原文链接: http://blog.51cto.com/zhuxianzhong/1614961,如需转载请自行联系原作者




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33670713/article/details/90066243

智能推荐

字符串的输入输出_字符串输入-程序员宅基地

文章浏览阅读2.5w次,点赞23次,收藏89次。字符串输入输出_字符串输入

【雕爷学编程】Arduino动手做(184)---体验各种小车轮子:极低成本搭建机器人的实验平台_arduino趣味小制作-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏7次。因为轮子在自然界是有原型的。古代最简陋的乡村大车,用两个几乎一英尺厚的圆形木作车轮,是用横断的树干做成的,同时,这些圆形物,或者叫车轮,不是在轴上旋转,而是固定在轴上。当然,所有这些,无非是一种想象,但是,无论如何,它使我们的头脑完全清楚了车的本质。圆形的底盘,无法像普通小车那样采用平行车轴(电机轴也短),比较适合的是十字轴动力结构,百度查了下,这种结构很少见,不实用的结构,做做实验还行。初步的想法,是通过这个非常简单的底盘,学习机器人的行走机构,动手尝试不同的运动方式,实际测试各种形态的轮子系统。_arduino趣味小制作

F5 GTM DNS 知识点和实验 3 -加速dns解析_dns express-程序员宅基地

文章浏览阅读3.6k次,点赞3次,收藏15次。第三章:加速dns解析目标:了解一个请求是如何发送到一个dns资源池中的,并且了解如何监控资源池中成员的健康状态使用dns缓存对dns请求进行加速使用dns express进行对dns请求进行加速智能解析dns请求加速解析(dns express,dns cache,load balance dns queries)配置监听器3.1、Big-IP DNS解析过程wide ipdns expressdns cachedns resolving cache_dns express

【嵌入式】构建嵌入式Linux系统(uboot、内核、文件系统)_嵌入式linux引导程序操作模式是什么-程序员宅基地

文章浏览阅读3.1k次,点赞6次,收藏61次。内核是嵌入式Linux 系统的核心,负责管理系统的进程、内存、文件系统、网络和设备驱动等。如果把地球比作计算机系统,内核就是管理计算机资源的“政府”,内核中的每个功能模块相当于政府中的每个部门,如下图所示。从功能角度来看:系统调度进程管理负责管理CPU资源,以便让各个进程可以以尽量公平的方式访问CPU。进程管理还包括控制活动进程。内存管理Linux的成功和它优秀的内存管理联系非常密切,因为一个系统的高效性欲稳定性往往决定于它的内存管理机制。为了解决容量,Linux 引入了虚拟存储系统;_嵌入式linux引导程序操作模式是什么

JS高级——JSON、数据存储学习笔记-程序员宅基地

文章浏览阅读1.4k次。在目前的开发中,JSON是一种非常重要的数据格式,它并不是编程语言,而是一种可以在服务器和客户端之间传输的数据格式。JSON的全称是JavaScript Object Notation(JavaScript对象符号):JSON是由Douglas Crockford构想和设计的一种轻量级资料交换格式,算是JavaScript的一个子集;但是虽然JSON被提出来的时候是主要应用JavaScript中,但是目前已经独立于编程语言,可以在各个编程语言中使用;很多编程语言都实现了将JSON转成对应模型的.

RK3588快速上手 | 01-RK3588开发板快速上手_3588 开发板 wiki-程序员宅基地

文章浏览阅读2.3k次。RK3588是Rockchip最新推出的八核64位处理器(4核A76+4核A55),主频2.4GHz,集成GPU,内部集成6TOPS AI算力的NPU,多媒体方面支持到了8K视频编解码,_3588 开发板 wiki

随便推点

抛出自定义错误 assert_assert 自定义错误-程序员宅基地

文章浏览阅读1k次。先检查错误,再抛出异常,很多开发人员会创建自己的assert函数,很多编程语言中都内置了assert方法,其实自己创建也很方便。 function assert(!bCondition,sErrorMessage){ if(!bCondition){ throw new Error(sErrorMessage); }} 使用方法: function _assert 自定义错误

小米开盘大跌超 5 % ;今日头条或联合网易做游戏;YurunHttp 3.0 发布 | 极客头条...-程序员宅基地

文章浏览阅读1.5k次。「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道。风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时..._印度小米厂网易新闻

Android 编译命令 envsetup.sh-程序员宅基地

文章浏览阅读179次。编译模块Android中的一个应用程序可以单独编译,编译后需要重新生成system.img。在Android目录下运行$ . build/envsetup.sh 或者$ source build/envsetup.sh ,然后就会多出几个可用的命令:- croot: Changes directory to the top of the tree.- m: Makes..._编译单个应用命令

怎么实现将Windows上的文件传到Linux、将Linux上的文件传输到Windows、不同的Linux设备之间文件传输_怎么把windows中的文件拖入linux中-程序员宅基地

文章浏览阅读2.4w次,点赞20次,收藏171次。本文基于Linux上CentOS 7版本和Windows 11专业版本配合Xshell 7演示三种传输方式怎么实现将Windows上的文件传到Linux、将Linux上的文件传输到Windows、不同的Linux设备之间文件传输使用rz和sz命令使用Xftp软件进行传输使用Sftp服务进行传输使用scp (-r)命令_怎么把windows中的文件拖入linux中

linux文件系统ext2\ext3\ext4\xfs详解_ext4、ext3、ext2、xfs-程序员宅基地

文章浏览阅读2.5k次。1.ext2介绍:第二代扩展文件系统是LINUX内核所用的文件系统,用以代替ext,是 EXT文件系统的升级版,特点:在ext2文件系统中,文件由inode(包含有文件的所有信息)进行唯一标识。一个文件可能对应多个文件名,只有在所有文件名都被删除后,该文件才会被删除。此外,同一文件在磁盘中存放和被打开时所对应的inode是不同的,并由内核负责同步。2.ext3介绍:EX..._ext4、ext3、ext2、xfs

matlab:字符向量、字符数组、字符串标量、字符串数组_matlab 字符串数组-程序员宅基地

文章浏览阅读8.8k次,点赞5次,收藏26次。matlab:字符向量、字符数组、字符串标量、字符串数组_matlab 字符串数组

推荐文章

热门文章

相关标签