IT学习笔记--NoSQL
背景及简介
sql容易学吗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)图偏重于查、统计、分析应⽤

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。