重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
像MongoDB, Cassandra, HBase, DynamoDB, 和
目前创新互联建站已为成百上千的企业提供了网站建设、域名、虚拟主机、网站运营、企业网站设计、华蓥网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
Riak这些NoSQL缺乏传统的原子事务机制,所谓原子事务机制是可以保证一系列写操作要么全部完成,要么全部不会完成,不会发生只完成一系列中一两个
写操作;因为数据库不提供这种事务机制支持,开发者需要自己编写代码来确保一系列写操作的事务机制,比较复杂和测试。
这些NoSQL数据库不提供事务机制原因在于其分布式特点,一系列写操作中访问的数据可能位于不同的分区服务器,这样的事务就变成分布式事务,在分
布式事务中实现原子性需要彼此协调,而协调是耗费时间的,每台机器在一个大事务过程中必须依次确认,这就需要一种协议确保一个事务中没有任何一台机器写操
作失败。
这种协调是昂贵的,会增加延迟时间,关键问题是,当协调没有完成时,其他操作是不能读取事务中写操作结果的,这是因为事务的all-or-
nothing原理导致,万一协调过程发现某个写操作不能完成,那么需要将其他写操作成功的进行回滚。针对分布式事务的分布式协调对整体数据库性能有严重
影响,不只是吞吐量还包括延迟时间,这样大部分NoSQL数据库因为性能问题就选择不提供分布式事务。
MongoDB, Riak, HBase, 和 Cassandra提供基于单一键的事务,这是因为所有信息都和一个键key有关,这个键是存储在单个服务器上,这样基于单键的事务不会带来复杂的分布式协调。
那么看来扩展性性能和分布式事务是一对矛盾,总要有取舍?实际上是不完全是,现在完全有可能提供高扩展的性能同时提供分布式原子事务。
FIT是这样一个在分布式系统提供原子事务的策略,在fairness公平性, isolation隔离性, 和throughput吞吐量(简称FIT)可以权衡。
一个支持分布式事务的可伸缩分布式系统能够完成这三个属性中两个,公平是事务之间不会相互影响造成延迟;隔离性提供一种幻觉好像整个数据库只有它自
己一个事务,隔离性保证当任何同时发生的事务发生冲突时,能够保证彼此能看到彼此的写操作结果,因此减轻了程序员为避免事务读写冲突的强逻辑推理要求;吞
吐量是指每单元时间数据库能够并发处理多少事务。
FIT是如下进行权衡:
保证公平性fairness 和隔离性isolation, 但是牺牲吞吐量
保证公平性fairness和吞吐量, 牺牲隔离性isolation
保证隔离性isolation和吞吐量throughput, 但是牺牲公平性fairness.
牺牲公平性:放弃公平性,数据库能有更多机会降低分布式事务的成本,主要成本是分布式协调带来的,也就是说,不需要在每个事务过程内对每个机器都依
次确认事务完成,这样排队式的确认commit事务是很浪费时间的,放弃公平性,意味着可以在事务外面进行协调,这样就只是增加了协调时间,不会增加互相
冲突事务因为彼此冲突而不能运行所耽搁的时间,当系统不需要公平性时,需要根据事务的优先级或延迟等标准进行指定先后执行顺序,这样就能够获得很好的吞吐
量。
G-Store是一种放弃公平性的 Isolation-Throughput
的分布式key-value存储,支持多键事务(multi-key transactions),MongoDB 和
HBase在键key在同样分区上也支持多键事务,但是不支持跨分区的事务。
总之:传统分布式事务性能不佳的原因是确保原子性(分布式协调)和隔离性同时重叠,创建一个高吞吐量分布式事务的关键是分离这两种关注,这种分离原
子性和隔离性的视角将导致两种类型的系统,第一种选择是弱隔离性能让冲突事务并行执行和确认提交;第二个选择重新排序原子性和隔离性机制保证它们不会某个
时间重叠,这是一种放弃公平的事务执行,所谓放弃公平就是不再同时照顾原子性和隔离性了,有所倾斜,放弃高标准道德要求就会带来高自由高效率。
2. 什么是NoSQL?
2.1 NoSQL 概述
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,
泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。
(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
2.2 NoSQL代表
MongDB、 Redis、Memcache
3. 关系型数据库与NoSQL的区别?
3.1 RDBMS
高度组织化结构化数据
结构化查询语言(SQL)
数据和关系都存储在单独的表中。
数据操纵语言,数据定义语言
严格的一致性
基础事务
ACID
关系型数据库遵循ACID规则
事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:
A (Atomicity) 原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。
C (Consistency) 一致性
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的
D (Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
3.2 NoSQL
代表着不仅仅是SQL
没有声明性查询语言
没有预定义的模式
键 - 值对存储,列存储,文档存储,图形数据库
最终一致性,而非ACID属性
非结构化和不可预知的数据
CAP定理
高性能,高可用性和可伸缩性
分布式数据库中的CAP原理(了解)
CAP定理:
Consistency(一致性), 数据一致更新,所有数据变动都是同步的
Availability(可用性), 好的响应性能
Partition tolerance(分区容错性) 可靠性
P: 系统中任意信息的丢失或失败不会影响系统的继续运作。
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。
CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。
而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。
所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。
说明:C:强一致性 A:高可用性 P:分布式容忍性
举例:
CA:传统Oracle数据库
AP:大多数网站架构的选择
CP:Redis、Mongodb
注意:分布式架构的时候必须做出取舍。
一致性和可用性之间取一个平衡。多余大多数web应用,其实并不需要强一致性。
因此牺牲C换取P,这是目前分布式数据库产品的方向。
4. 当下NoSQL的经典应用
当下的应用是 SQL 与 NoSQL 一起使用的。
代表项目:阿里巴巴商品信息的存放。
去 IOE 化。
ps:I 是指 IBM 的小型机,很贵的,好像好几万一台;O 是指 Oracle 数据库,也很贵的,好几万呢;M 是指 EMC 的存储设备,也很贵的。
难点:
数据类型多样性。
数据源多样性和变化重构。
数据源改造而服务平台不需要大面积重构。
互联网公司常用的基本集中在以下几种,每种只举一个比较常见或者应用比较成功的例子吧。
1. In-Memory KV Store : Redis
in memory key-value store,同时提供了更加丰富的数据结构和运算的能力,成功用法是替代memcached,通过checkpoint和commit log提供了快速的宕机恢复,同时支持replication提供读可扩展和高可用。
2. Disk-Based KV Store: Leveldb
真正基于磁盘的key-value storage, 模型单一简单,数据量不受限于内存大小,数据落盘高可靠,Google的几位大神出品的精品,LSM模型天然写优化,顺序写盘的方式对于新硬件ssd再适合不过了,不足是仅提供了一个库,需要自己封装server端。
3. Document Store: Mongodb
分布式nosql,具备了区别mysql的最大亮点:可扩展性。mongodb 最新引人的莫过于提供了sql接口,是目前nosql里最像mysql的,只是没有ACID的特性,发展很快,支持了索引等特性,上手容易,对于数据量远超内存限制的场景来说,还需要慎重。
4. Column Table Store: HBase
这个富二代似乎不用赘述了,最大的优势是开源,对于普通的scan和基于行的get等基本查询,性能完全不是问题,只是只提供裸的api,易用性上是短板,可扩展性方面是最强的,其次坐上了Hadoop的快车,社区发展很快,各种基于其上的开源产品不少,来解决诸如join、聚集运算等复杂查询。
一:传统数据库
(1)传统索引不适于海量数据
传统行存数据库索引需要手工设定,对应用不完全透明,随场景和需求的变化需要不断调整,人工维护成本很高。并且传统索引占用存储空间很大,甚至高于数据本身,造成查询效率的下降。
(2)数据装载速度慢
因为索引需要重新创建,加载性能会变的很糟糕。分析型架构系统要解决这些个问题,必须最大限度地减少磁盘 I/O ,提升查询效率,减小人工维护成本。南大通用分析型数据库GBase8a (以下简称GBase 8a)通过列存储模式、数据压缩、智能化的索引、并行处理、并发控制、高效的查询优化器等技术,使得上述问题得到有效解决。以下各节将描述 GBase 8a 的创新架构如何实现这些目标。
二:新型数据库
新型数据库采用分布式并行计算架构,部署于X86通用服务器,满足大数据实时交易需求,成本低、扩展性高,突破了传统数据库性能瓶颈。
分布式非关系型数据库技术创新
非关系型数据库即NoSQL,抛弃了关系数据库复杂的关系操作、事务处理等功能,仅提供简单的键值对(Key, Value)数据的存储与查询,换取高扩展性和高性能,满足论坛、博客、SNS、微博等互联网类应用场景下针对海量数据的简单操作需求。主要技术创新为:
(1) 简单的数据操作换取高效响应。NoSQL仅支持按照Key(关键字)来存储和查询Value(数据),不支持对非关键字数据列的高效查询;因数据操作简单、数据间一般不需要关联操作,故系统可支持高并发和较快的响应速度。
(2) 多种一致性策略满足业务需求。不同于传统关系型数据库仅支持强一致性策略,NoSQL还支持弱一致性和最终一致性等多种策略,可根据应用场景进行对应配置。例如,对写入操作频繁,但数据读取最新版本要求并不严格的应用,如互联网网页数据的存储和分析应用,可以采用最终一致性策略;而对订购关系存储的应用,则必须用强一致性策略,保证总是读取最新版本数据
作者 石默研
关于CAP的讨论已经很多,包括作者的另一篇文章“对CAP的初步解释”,基本已经即定思维的理解就是:分布式系统必须遵循CAP,一个分布式系统的设计只能同时满足其中两个,不可能同时满足;传统关系数据库选择A与C,代表了互联网新兴技术的NoSQL数据库则选择A与P(或者C与P,虽然这种情况其实需要详细讨论)。
但是,近年来,新兴的NewSQL数据库(TiDB或者OceanBase),则是一种在分布式环境下,保证的ACID强事务特征的强一致性数据库,并且很显然,它同时也满足了高可用性与优秀的分区可容忍性(很好的可扩展特性便是其一个层面的证明),似乎看起来,C、A、P都同时保证了,这不是违反了已经经过严格证明的CAP理论吗?
这个问题初看起来,似乎是比较神奇,但仔细分析,其实答案是很明显的。
首先,需要读者区分“分布式”与CAP中所提到的分区可容忍性Paritition Tolerance并不是一回事。分区可容忍性P是指以下两种分布式的情况:
. 同一份数据的多个副本的可分布性
. 有相互关联的数据的可分布性(操作中表现为保证ACID的强分布式事务)
即使是分库分表,如果不存在以上两种情况,只是独立数据在同一个节点上的情况,虽然也是分布式,但跟CAP中的P没有半毛钱关系。
那么,还是回到上面的问题,NewSQL数据库,确实也是在保证了同一份数据多副本的强读写一致性、以及强分布式事务特性这样的C的情况下,同时保证了A与P呀!事实确实如此,但这还是要仔细分析:
无论是TiDB,还是OceanBase,其在保证数据多副本的强一致性时,都采用了Paxos协议或者Raft,它们简单来讲就是多数选举的原则,即写不需要全部副本都完成,就能保证读的强一致性,反过来也是一样。因此,其在分布式情况下,保证数据读写强一致性的效率还是很高的,就是说,在同一个数据中心的网络环境下,虽然这种分布可容忍性的满足理论上讲也会比单节点多一点点效率损失,但实际上是可以忽略不计的。但需要指出的是,在跨数据中心、跨城市的分布式情况下,如果要保证数据多副本的强一致性,即保证分区可容忍性,对效率(实际上是可用性A)的影响那还是不可忽略的。因此,在这种情况下,CAP理论依然成立。
再来看相互关联数据的可分布性,这就涉及到了分布式事务。现有的NewSQL数据库,即使在同一数据中心,为了保证强的分布式事务,对效率的折衷都是不可忽略的,所谓的乐观事务,只是因为客观问题本身冲突就少,并不改变冲突很多时效率明显受影响的现实。因此,NewSQL数据库虽然提供强分布式事务的能力,但在现实应用中,都是提倡尽量避免大量的分布式事务出现。如果你所遇到的应用场景是确实需要大量的分布式事务执行,又不做应用优化全交给数据库执行,那么,现有的NewSQL分布式数据库,依然会遇到明显的性能问题,其实就是可用性A降低了。同学仔细去研究应用中的实际情况就会发现,很多互联网应用,当其所需要的QPS很高很高,而对读写一致性与强分布式事务的要求又不那很高时候,其实,NewSQL数据库还是不能满足他们的需求的,他们仍然需要根据自己的情况改造或者选用NoSQL数据库,这也是CAP理论并没有被NewSQL打破的现实证明。
因此,总结来讲,NewSQL数据库,也是遵循CAP理论的,只不过,在同中心数据多副本情况下,保证P的同时对A的影响微乎其微;而在分布式事务的情况下,又采用了与应用特性相关的策略(其实乐观、悲观事务本质上就有根本应用特性区分的意思)来保证性能而已。当然,随着网络与计算机性能的提高,CAP三个特征中,保证其中两个,折衷另外一个,所带来的影响也会逐渐变小,但其理论依然是正确的。