IT学习笔记--NoSQL

背景及简介

NoSQL 技术主要解决以互联网业务应用为主的大数据应用问题,重点要突出处理速度的响应和海量数据的存储问题。

NoSQL 的定义 :主体符合非关系型、分布式、开放源码和具有横向扩展能力的下一代数据库。英文名称 NoSQL 本身的意思是“Not not SQL”,意即“不仅仅是 SQL ” 。

在 NoSQL 里经常要用到 的一些时间单位为秒 (s )、毫秒( ms )、微秒(µs )、纳秒(ns )。

从数据存储结构原理的角度,一般将 NoSQL 数据库分为键值存储、文档存储、列族存储、图存储、其他存储 5 种模式。

传统关系向数据库(TRDB) 与 NoSQL主要技术区别:

  1. 数据库数据存储模式不一样, TRDB 为强数据存储模式, NoSQL 为弱数据存储模式 。
  2. 分布式技术是 NoSQL 的核心技术思路,而 TRDB 以集中部署 一 台物理机为最初出发点 。
  3. TRDB 的事物严格遵循 ACID 原则,而 NoSQL 主体遵循 Base 原则 。
  4. TRDB 都遵循 SQL 操作标准, NoSQL 没有统一 的操作标准 。
  5. TRD B 基于单机的硬盘数据处理技术为主 , NoSQL 基于分布式的或者内存数据处理技术为主。

帽子定理( CAP Theorem ):

当网络环境一旦出现故障,某一条网线松脱、某一台服务器岩机、某一条网络链路出现严重拥墙问题,就必须认真考虑以下三大问题即帽子定理( CAP Theorem ):

  • 一 致性( Cons i s te ncy ),指的是在同 一 时刻 , 任何 一个终端客户在每个节点都能读到最新写入的数据 : 这里的核心要求至少两台服务器保存着一样的数据, 一致性从客户角度是针对“读(选择〉”。可以简单理解为同步数据复制功能。
  • 可用性( Availab i lity ),指的是一个运行的节点在合理的时间内总能响应更新请求,不会发生错误或超时 ; 可用 性从客户角度是针对 “ 更新(插入、修改、删除)”,可以简单理解为满足随时更新操作功能。
  • 分区容错 性 ( Partition Tolerance ),指 的 是当网络发生故障时,系统仍能继续保持响应客户读请求的能力。可以简单理解为满足随时读有效数据功能 。

帽子定理被证明在分布式处理情况下,发生故障节点,三种期望属性最多只能满足两个。

ACID :原子性( A )、一致性 CC )、隔离性( I )、持久性( D)

TRDB 在具体数据处理过程中,经常需要用到事务( Transaction )处理功能,目的为了保证数据处理的原子性、 一致性、隔离性、持久性。这四个属性通常称为 ACID 特性 。

  • 原子性( Atomicity )。一个事务是一个不可分割的工作单位,事务中包括的许多操作要么都做,要么都不做。
  • 一致性 C Consistency ) 。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
  • 隔离性( Isolation )。一个事务的执行不能被其他事务干扰。即 一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰 。
  • 持久性( Durability ) 。持久性也称永久性( Permanence ),指 一个事务 一 旦提交,它对数据库中数据的改变就应该是永久性的 。 接下来的其他操作或故障不应该对其有任何影响。

BASE :基本可用( BA)、软状态 CS)、最终一致性( E)

  • 基本可用 CBasicallyAvailable), NoSQL 允许分布式系统中某些部分出现故障,那么系统的其余部分依然可以继续运作。它不会像 ACID 那样,在系统出现故障时,进行强制拒绝,允许继续部分访问。
  • 软状态 C Soft State) , NoSQL 在数据处理过程中,允许这个过程,存在数据状态暂时不一致的情况。但经过纠错处理 ,最终会一致的。
  • 最终一 致性( Eventually Consistent) , NoSQL 的软状态允许数据处理过程状态的暂时不一致,但是最终处理结果将是一致的。这句话告诉我们 NoSQL 对数据处理过程可以有短暂的时间间隔,也允许分更细的步骤一个 一个地处理,最后数据达到 一致性即可 。 这在互联网 上进行分布式应用具有其明显的优势。

NoSQL 数据存储模式

键值数据存储模式:

键值数据库是一类轻量级结合内存处理为主的NoSQL数据库。轻量级是指它的存储数据结构特别简单,数据库系统本身规模也比较小;而以内存为主的运行处理,设计目的是为了更快地实现对大数据的处理。

键起唯一索引值的作用,确保一个键值结构里数据记录的唯一性,同时也起信息记录的作用。键内容不是越长越好,越多的键内容,意味更多的内存开销,而且在大数据环境下,给数据查找这类计算带来更大的运行负担。

值是对应键相关的数据,通过键来获取,可以存放任何类型的数据。键值数据库的值由 二进制大对象( BLOB, Binary Large Object )进行存储,这意味着任何类型的数据都可以保存,键值数据库无预先定义数据类型的要求 。

基本数据操作方式:

NoSQL 数据库没有 SQL 概念,它们对数据操作的实现是通过 Put 、 Get 和 Delete实现的:

  • Put 命令:用于写或更新键值存储里指定地址的值 。 当指定地址有值时,更新值;当指定地址没有值时,新增一个值。
    即,Put (键地址,待插入的值)
  • Get 命令:用于读键值存储里指定地址的值,如果没有值,返回 一条错误提示信息。即,Get (键地址)
  • Delete 命令:用于删除键值存储里指定地址的键和值,如果键值存储里没有该键,就返回一条错误提示信息。即,Delete (键地址)

键值存储优缺点:

优点:

  • 简单
  • 快速
  • 高效计算
  • 分布式处理

缺点:

  • 对值进行多值查找功能很弱
  • 缺少约束,意味着更容易出错
  • 不容易建立复杂关系:多表关联方式在键值数据库里无法直接操作,键值数据库局限于两个数据集之间的有限计算

文档数据存储模式

被用于管理文档,尤其适合于处理各种非结构化与半结构化的文档数据、建立工作流应用、建立各类基于 Web 的应用。

文档数据库存储结构基本要素:

1)键值对( Key-Value Pair)

文档数据库数据存储结构的基本形式为键值对形式 ,具体由数据和格式组成。数据分键和值两部分,格式根据数据种类的不同有所区别,如 JSON (JavaScript Object Notation )、 XML 、 BSON ( Binary Serialized Document Format ) 等。

键一般用字符串来表示,值可用各种数据类型表示,如数字、字符串、日期 、逻辑值 ( True 或 False ),也可以是更加复杂的结构,如数组、文档 。

2)文档( Document)

文档是由键值对所构成的有序集 。每个文档里的键值对必须唯 一。

3)集合( Collection)

集合是由若干条文档构成的对象; 一个集合对应的文档应该具有相关性。在文档数据库中为了便于操作 , 每个集合都有一个集合名称。

4)数据库( Database)

文档数据库中包含若干个集合,在进行数据操作之前,必须指定数据库名。

基本数据操作方式:

对文档数据库进行操作的基本方式包括了读、 写 、改、删 4 种,以 MongoDB 文档数据库为例进行介绍。

  • 写(insert)命令

假设我们想往 DB 数据库 Books 集合里写入一条关于《 C 语言》 的新文档 ,用代码实现如下 :
DB.Books.Insert ({” Book ID ”:” 100005 ”,”Name ”:”《C 语言》”,” Price ”:” 60 ”})

  • 读( Select )命令

假设我们想在DB数据库Books集合里读取《C语言》这本书的信息,用代码实现如下 :
DB.Books.find({” Name”:”《c 语言》”})

  • 改( Update )命令

当《Python 语言》价格有变化时,我们应该允许修改其值。其代码如下 :
DB.Books.Update ({”Book_ ID”:”1 00002 ”} , ($set {”Price”: 78)))

  • 删( Remove )命令

当《 Java 语言》这本书销售完毕后 ,我们不想在 Books 集合里保留该信息,就可以把它删除。具体代码如下:
DB.Books.Remove ({” Book ID”:”1 00004 ”}}

文档存储优缺点:

优点:

  • 简单
  • 相对高效
  • 文档格式处理:
    既然是文档数据库,那么它们擅长的就是基于 JSON 、 XML 、 BSON 类似的格式文档数据处理。在选择该类数据库产品时,必须遵循这样的格式约定,否则应该选择其他类型的数据库产品。
  • 查询功能强大
  • 分布式处理:
    文档数据库具有分布式多服务器处理功能,那么它们就具有了很强的可伸缩性, 给大数据处理带来了很多方便。它们可以轻松解决 PB 级甚至是 EB 级的数据存储应用 需要。

缺点:

  • 缺少约束
  • 数据出现冗余
  • 相对低效

列族数据存储模式

列族数据库为了解决大数据存储问题引入了分布式处理技术,为了提高数据操作效率,针对传统数据库的弱点,采用了去规则、去约束化的思路 。

列族数据库存储结构基本要素:

1)命名空间( NameSpace)

命名空间是列族数据库的顶级数据库结构。相当于传统关系型数据库的表名 。

2)行键( Row Key)

行键用来唯一确定列族数据库中不同行数据区别的标识符。它的作用与传统关系型数据库表的行主键作用类似 。 但是列族数据库的行是虚的,只存在逻辑关系,因为它们的值以列为单位进行存储 。 而传统关系型数据库表的行是一 条连续而紧密的记录。另外行键还起分区和排序作用 。 当列族的列存放于不同服务器的分区里时,则行键起分区地址指向的标识作用 。 列族数据库存放数据时,自动按照行键进行排序。

3)列族( Column Family)

由若干个列所构成的一个集合称为列族。对于关系紧密的列可以放到 一个列族里,目的是提高查询速度 。

4)列( Column)

列是列族数据库里用来存放单个数值的数据结构 。列的每个值( Value )都附带时间戳( Time Stamp)。通过时间戳来区分值的不同版本。

列族存储特点:

  • 擅长大数据处理,特别是 PB 、 EB 级别的大数据存储和从几千台到几万台级别的服务器分布式存储管理,体现了更好的可扩展性和高可用性。
  • 对于命名空间、行键、列族需要预先定义,列无需预先定义,随时可以增加。
  • 在大数据应用环境下,管理复杂,必须借助各种高效的管理工具来监控系统的正常运行。
  • Hadoop 生态系统为基于列族的大数据分析,提供了各种开发工具。
  • 数据存储模式相对键值数据库、文档数据库要复杂。
  • 查询功能相对更加丰富。
  • 高密集写入处理能力,不少列族数据库一般都能达到每秒百万次的并发插入处理能力。

图数据存储模式

图存储是一个包含若干个节点、节点之间存在边关系,节点和边可以附加相关属性的结合系统,简称图( Graph ) 。

注意:

1)图里的节点 ( Node ) 不同于服务器集群里的节点 , 服务器集群节点指一台服务器。

2)圈里的节点也不同于分布式数据库里的片或节点软件 , 那个片指存储于一台服务器上的若干数据存储区域( Region )。

图数据库存储结构基本要素:

  • 节点( Node ):代表一个个事物实体
  • 边( Edge ):表明实体之间的关系
  • 属性( At tribute )
  • 图( Graph )

基本数据操作方式:

1)对于单个节点,提供建立( Create )、 删 除( Delete )、更新( Update 〉、移动(Re move )、合并( Merge )等操作

2)对于图,提供图的交集、图的并集、图的遍历等操作功能

图存储特点:

1)处理各种具有图结构的数据

2)应用领域相对明确

3)以单台服务器运行的图数据库为主

4)图偏重于查找、统计、分析应用
 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值