配色: 字号:
关系型与非关系型数据库(3)
2022-02-11 | 阅:  转:  |  分享 
  
关系型与非关系型数据库(3)

胡经国





虽然NoSQL并没有一个明确的范围和定义,但是们都普遍下一些共同:不需要预定义模式

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

相对于将所有数据存放于存储区域网络中的全共享架构,NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。弹性可扩展

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

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

与RAIDRedundantArraysofIndependentDisks,磁盘阵列存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。其缺点是并不总是能保证一致性这样的方式在出现故障的时候,可能会丢失少量的数据。异步复制复制技术是指在写被响应到主机之前,数据必须被承诺存储在单独的一级站点而不是存储在二级站点。当网络容量允许时数据传向二级站点。BASE

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

所谓最终一致性,就是不保证在任意时刻任意节点上的同一份数据都是相同的但是随着时间的迁移,不同节点上的同一份数据总是在向趋于相同的方向变化。也可以简单的理解为在一段时间后,节点间的数据会最终达到一致状态。软事务ACID

ACID,指数据库事务正确执行的四个基本要素的缩写包含原子性Atomicity)、一致性Consistency)、隔离性Isolation)、持久性Durability)。事务Transaction)正确执行,必需要具有这四种特性,否则在事务过程Transactionprocessing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。

原子性整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

隔离性隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。

持久性在事务完成以后,该事务对数据库所作的更改便被持久地保存在数据库中,而不会被回滚。目前主要有两种方式实现ACID第一种是WriteAheadLogging预,也就是日志式的方式;第二种是ShadowPagingWriteAheadLogging

WriteAheadLogging(WAL,预写日志数据库中一种高效的日志算法对于非内存数据库而言,磁盘I/O操作是数据库效率的一大瓶颈。在相同的数据量下,采用WAL日志的数据库系统在事务提交时,磁盘写操作只有传统的回滚日志的一半左右,大大提高了数据库磁盘I/O操作的效率,从而提高了数据库的性能。ShadowPaging

相对于WAL技术,hadowPaging(SP,影子分页)技术实现起来比较简单,消除了写日志记录的开销恢复的速度也快。hadowPaging的缺点在于事务提交时要输出多个块这使得提交的开销很大,而且以块为单位,很难应用到允许多个事务并发执行的情况——这是它致命的缺点。NoSQL数据库并没有一个统一的架构两种NoSQL数据库之间的不同,甚至远远超过两种关系型数据库的不同。可以说,NoSQL各有所长成功的NoSQL必然特别适用于某些场合或者某些应用在这些场合中会远远胜过关系型数据库和其的NoSQL。

NoSQL数据库没有标准的查询语言SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4JInfoGrid,InfiniteGraph。因此,NoSQL数据库在以下的这几种情况下比较适用:、数据模型比较简单;、需要灵活性更强的IT系统;、对数据库性能要求较高;、不需要高度的数据一致性;、对于给定key,比较容易映射复杂值的环境。数据接口

接口可以比喻为一个通道,两个相互独立的程序,通过这个接口通道,实现数据传输,信息交流。当然这个两个程序都必须遵守这个接口规定的一些标准,只有共同遵守这个接口标准,才能进行正常的通信。复杂值

Javascript一种直译式脚本语言的数据类型可以分为两种,即:原始类型和引用类型。原始类型也称为基本类型或简单类型而引用类型也称为复杂类型。与此相对应,它们的值也分别被称为原始值和复杂值。复杂值可以由很多不同类型的Javascript对象组成。复杂对象在内存中的大小是未知的,因为复杂对象可包含任何值,而不是一个特定的已知值一套开源分布式NoSQL数据库系统对等计算或对等网络一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

尽管大多数NoSQL数据存储系统都已被部署于实际应用中,但归纳其研究现状,还许多挑战性问题。已有Key-Value数据库产品大多是面向特定应用自治构建的,缺乏通用性已有产品支持的功能有限(不支持事务特性),导致其应用具有一定的局限性已有一些研究成果和改进的NoSQL数据存储系统,但它们都是针对不同应用需求而提出的相应解决方案,如支持组内事务特性、弹性事务等,很少从全局考虑系统的通用性,也没有形成系列化的研究成果缺乏类似关系数据库所具有的强有力的理论如Armstrong公理系统、技术(如成熟的基于启发式的优化策略、两段封锁协议等)、标准规范(如SQL语言)的支持。目前,HBase数据库安全特性最完善的NoSQL数据库产品之一而其他的NoSQL数据库多数没有提供内建的安全机制但随着NoSQL的发展,越来越多的人开始意识到安全的重要部分NoSQL产品逐渐开始提供一些安全方面的支持。两段封锁协议

两段封锁协议两段锁协议是指每个事务的执行可以分为两个阶段生长阶段加锁阶段和衰退阶段解锁阶段。

加锁阶段在该阶段可以进行加锁操作。在对任何数据进行读操作之前要申请并获得S锁在进行写操作之前要申请并获得X锁。加锁不成功,则事务进入等待状态,直到加锁成功才能继续执行。

解锁阶段当事务释放了一个封锁以后,事务进入解锁阶段在该阶段只能进行解锁操作不能再进行加锁操作。





2016年12月22日编写于重庆

2022年2月11日修改于重庆

5







献花(0)
+1
(本文系胡经国图书...原创)