Nosql

目录

简介

数据库类型

整体框架

适用场景

数据库

MongoDB

Redis


简介

NoSQL【Non-relational】泛指非关系型的数据库,可用于解决大数据应用难题。

NoSQL的一大优点是易拓展。NoSQL数据库的一个共同特点是去掉了关系数据库的关系型特性,因此数据库的结构简单,数据之间无关系,非常容易拓展。

数据库类型

NoSQL数据库分为如下六类:

1. 键值(Key-Value)存储数据库【如Redis】。这类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key-Value模型优势在于简单、易部署。但如果只是对部分值进行查询或更新,Key-Value就会显得效率不够高。

        典型应用场景:内容缓存、大数据量高访问负载、日志系统。

        数据模型:键值对、哈希表【Hash Table】。

        优点:查找速度快。

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

2. 列存储数据库【如HBase】。这部分数据库通常用于应对分布式存储的海量数据,键的特点是指向多个列。

        典型应用场景:分布式的文件系统。

        数据模型:以列簇式存储,将同一列数据存在一起。

        优点:查找速度快,分布式可拓展性强。

        缺点:功能相对局限。

3. 文档型数据库【如MongoDB】。这类数据库的数据模型是版本化的文档,半结构的文档以特定格式【如JSON】存储。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值,在处理网页等复杂数据时,文档型数据库比传统键值数据库的查询效率更高。

        典型应用场景:Web应用。

        数据模型:键值对,值为结构化数据。

        优点:表结构可变,不用像关系型数据库那样预先定义表结构。

        缺点:查询性能不高,缺少统一查询语法。

4. 图形(Graph)数据库【如Neo4J】。这类数据库使用灵活的图形模型,并且能够拓展到多个服务器上,没有标准的查询语言,因此进行图形数据库查询需要制定数据模型。

        典型应用场景:社交网络、推荐系统。专注于构建关系图谱。

        数据模型:图结构。

        优点:利用图结构相关算法,如最短路径寻址、N度关系查找等。

        缺点:很多时候需要对整个图做计算才能得出需要的信息。不好做分布式集群方案。

5. 对象存储【如db4o】。通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。

6. XML数据库【如BaseX】。高效地存储XML数据,并支持XML内部查询语法,如XPath、XQuery。

整体框架

NoSQL整体框架可分为四层:

1. 数据持久层。此层定义了数据的存储形式,主要的数据存储形式有以下四种。

       (1). 基于内存。速度快,但数据易丢失。

       (2). 基于硬盘。保存时间久,但存取速度比基于内存形式的存取速度慢。

       (3). 基于内存和硬盘。既保障了速度,又保障了数据不易丢失。

       (4). 订制可拔插。保障了数据存取具有较高的灵活性。

2. 数据分布层。此层定义了数据的分布形式,主要的分布形式有以下三种。

       (1). CAP支持,可用于水平拓展。

       (2). 多数据中心支持,可以保障跨多数据中心也能够平稳运行。

       (3). 动态部署支持,可以在运行着的集群中动态地添加或删除节点。

3. 数据逻辑层。此层表述了数据的逻辑表现形式,主要的逻辑表现形式有以下四种。

       (1). 键值模型,表现形式单一,但拓展性强。

       (2). 列式模型,比键值模型能够支持更复杂的数据,但拓展性相对较差。

       (3). 文档模型,对于复杂数据的支持和拓展性有很大优势。

       (4). 图模型,使用场景不多,一般是基于图数据结构的数据定制的。

4. 接口层。此层为上层应用提供了方便的数据调用接口,主要的接口类型选择有以下五种。

       (1).Rest。

       (2).Thrift。

       (3).Map/Reduce。

       (4).Get/Put。

       (5).特定语言API。

注意:

        NoSQL分层架构并不代表每个产品在每一层里只能有一种选择。

适用场景

NoSQL数据库适用于以下几种情况:

1. 数据模型比较简单。

2. 对数据库性能要求较高。

3. 不需要高度的数据一致性。

数据库

MongoDB

MongoDB是一个用C++语言编写的文档型数据库,介于关系数据库和非关系数据库之间,支持跨平台,功能丰富,支持松散的数据结构【Bjson,类似json】。

MongoDB一大特点是支持的查询语言很丰富,可以实现类似关系数据库单表查询的绝大部分功能,还能给数据建立索引。

MongoDB还具备高性能、易部署、易使用、存储数据很方便的特点。

MongoDB面向集合存储,易存储对象类型的数据,MongoDB的语言也类似于面向对象的查询语言。

MongoDB模式自由,可以将不同结构的文件存储在同一个数据库里。

Redis

Redis是一个用C语言编写的高性能Key-Value存储数据库,支持跨平台,遵守BSD协议。

Redis是基于内存的存储系统,在将数据持久化到本地磁盘时,支持以下两种模式:

1. 全量模式。将即时内存中的数据做一次快照全部存储到本地磁盘中,缺点是将数据以全量模式存入磁盘是靠一个单线程执行请求的,因此会对吞吐量造成一些压力。

2. 增量模式。 记录每次执行的语句并保存到磁盘中,类似mysql中基于语句的日志记录,每次磁盘操作时长会很短,对写入影响小。但是随着执行语句数量的不断增长,对应的aof【append only file】文件会不断变大,并占用大量磁盘空间,后续的aof操作也会越来越慢。因此可采用全量+增量复合的模式进行优化。

Redis和其它Key-Value缓存产品相比,有三个特点:

1. 支持数据的持久化,可以把内存里的数据存放到磁盘里。

2. 不仅支持简单的Key-Value类型的数据【如字符串】存储,也支持哈希【Hash】、双向链表【List】、集合【Set】、排序集合【Zset】数据结构数据的存储。

3. 支持数据备份【master-slave模式】。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关系型数据库NoSQL数据库 什么是NoSQL 大家有没有听说过“NoSQL”呢?近年,这个词极受关注。看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要了呢?”但实际上,它是“Not Only SQL”的缩写。它的意义是:适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。 为弥补关系型数据库的不足,各种各样的NoSQL数据库应运而生。 为了更好地了解本书所介绍的NoSQL数据库,对关系型数据库的理解是必不可少的。那么,就让我们先来看一看关系型数据库的历史、分类和特征吧。 关系型数据库简史 1969年,埃德加•弗兰克•科德(Edgar Frank Codd)发表了划时代的论文,首次提出了关系数据模型的概念。但可惜的是,刊登论文的《IBM Research Report》只是IBM公司的内部刊物,因此论文反响平平。1970年,他再次在刊物《Communication of the ACM》上发表了题为“A Relational Model of Data for Large Shared Data banks”(大型共享数据库的关系模型)的论文,终于引起了大家的关注。 科德所提出的关系数据模型的概念成为了现今关系型数据库的基础。当时的关系型数据库由于硬件性能低劣、处理速度过慢而迟迟没有得到实际应用。但之后随着硬件性能的提升,加之使用简单、性能优越等优点,关系型数据库得到了广泛的应用。 通用性及高性能 虽然本书是讲解NoSQL数据库的,但有一个重要的大前提,请大家一定不要误解。这个大前提就是“关系型数据库的性能绝对不低,它具有非常好的通用性和非常高的性能”。毫无疑问,对于绝大多数的应用来说它都是最有效的解决方案。 突出的优势 关系型数据库作为应用广泛的通用型数据库,它的突出优势主要有以下几点: 保持数据的一致性(事务处理) 由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处) 可以进行JOIN等复杂查询 存在很多实际成果和专业技术信息(成熟的技术) 这其中,能够保持数据的一致性是关系型数据库的最大优势。在需要严格保证数据一致性和处理完整性的情况下,用关系型数据库是肯定没有错的。但是有些情况不需要JOIN,对上关系型数据库的优点也没有什么特别需要,这时似乎也就没有必要拘泥于关系型数据库了。 关系型数据库的不足 不擅长的处理 就像之前提到的那样,关系型数据库的性能非常高。但是它毕竟是一个通用型的数据库,并不能完全适应所有的用途。具体来说它并不擅长以下处理: 大量数据的写入处理 为有数据更新的表做索引或表结构(schema)变更 字段不固定时应用 对简单查询需要快速返回结果的处理 。。。。。。 NoSQL数据库 为了弥补关系型数据库的不足(特别是最近几年),NoSQL数据库出现了。关系型数据库应用广泛,能进行事务处理和JOIN等复杂处理。相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了之前所列举的关系型数据库的不足之处。 易于数据的分散 如前所,关系型数据库并不擅长大量数据的写入处理。原本关系型数据库就是以JOIN为前提的,就是说,各个数据之间存在关联是关系型数据库得名的主要原因。为了进行JOIN处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散。相反,NoSQL数据库原本就不支持JOIN处理,各个数据都是独立设计的,很容易把数据分散到多个服务器上。由于数据被分散到了多个服务器上,减少了每个服务器上的数据量,即使要进行大量数据的写入操作,处理起来也更加容易。同理,数据的读入操作当然也同样容易。 提升性能和增大规模 下面说一点题外话,如果想要使服务器能够轻松地处理更大量的数据,那么只有两个选择:一是提升性能,二是增大规模。下面我们来整理一下这两者的不同。 首先,提升性能指的就是通过提升现行服务器自身的性能来提高处理能力。这是非常简单的方法,程序方面也不需要进行变更,但需要一些费用。若要购买性能翻倍的服务器,需要花费的资金往往不只是原来的2倍,可能需要多达5到10倍。这种方法虽然简单,但是成本较高。 另一方面,增大规模指的是使用多台廉价的服务器来提高处理能力。它需要对程序进行变更,但由于使用廉价的服务器,可以控制成本。另外,以后只要依葫芦画瓢增加廉价服务器的数量就可以了。 不对大量数据进行处理的话就没有使用的必要吗? NoSQL数据库基本上来说为了“使大量数据的写入处理更加容易(让增加服务器数量更容易)”而设计的。但如果不是对大量数据进行操作的话,NoSQ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值