什么是数据库并发保证一致性的一致性?一致性弱意味着什么

传统关系型数据库面临的挑战
l&High&Performance&&对数据库高并发读写的需求
l&Huge&Storage&&对海量数据的高效率存储的需求
l&High&Scalability&&&High&Availablity&&对数据库的高可扩展性和高可用性的需求。
对于当前的很多网站来说,关系数据库的很多主要特性往往无用武之地,例如:
(1)&数据库事务一致性需求(关于一致性的理解,下面的图表很形象)
很多系统并不要求严格的数据库事务,对读一致性的要求很低,因此数据库事务管理成了数据库高负载下一个沉重的负担。
(2)数据库的实时性需求
对关系型数据库来说,插入一条数据后立刻查询,是肯定可以读出来这条数据的,但是对于很多应用而言,并不要求这么高的实时性,比方说我发一条微博之后,过几秒乃至十几秒后,别人才提示有新微博,这是完全可以的。
(3)对复杂的查询,特别是多表关联查询的需求
大数据量的系统,非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是类型的网站,从需求以及产品设计角度,就避免这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分布查询,的功能被极大地弱化了。
现在一般认为全称是,是一种不同于关系型数据库的数据库管理系统设计方式。对最普遍的解释是&非关系型的&,强调和文档数据库的优点,而不是单纯的反对。
NoSQL的理论基础
CAP,和最终一致性是数据库存在的三大基石。
ACID&vs.&BASE
ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性)、一致性()、隔离性()、持久性()。&
(这张是Brewer教授在PODC大会上用的PPT。)
BASE内容:
Basically&Availble&&&基本可用
所谓的高可用性是指:每次插入或者删除一条数据,执行的速度必须要快。也可以说,我们的每一次查询都必须有结果返回。(尽管结果可能由于延迟而导致两次的结果不一致)。在换句话说,也就是低延迟!
Soft-state&&&软状态柔性事务,状态可以有一段时间不同步
也就是一致性。见下面的图表解释
Eventual&Consistency&&&最终一致性
&最终我们获得的是一致的,能达到这样的目的就是正确的。
&分布式系统中,有三种重要的属性,分别是:
一致性:任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的。
可用性:每一个操作总是能够在确定的时间内返回,也就是系统随时都是可用的。
分区容忍性:在出现网络分区(比如断网)的情况下,分离的系统也能正常运行。
这个概念比较难理解。
&CAP原理的意思是,一个分布式系统不能同时满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。
&注意:可用性与分区容忍性在一些情况下很容易混淆。举个例子,假设系统中有若干个节点宕机了,系统仍然能正常运行,那么应该说是系统的可用性高还是分区容忍性高呢?个人的理解是,这种应该理解为系统的分区容忍性高。因为若干个节点宕机,可以理解为这几个节点与其它正常的节点失去联系了,也就是出现了网络分区,按照定义,这属于分区容忍性的范畴。那么可用性是什么?个人的理解可用性更多强调的是,系统对于读写操作的反应快慢,反应越快,可用性越高。
&CAP原理是由美国著名科学家,Berkerly大学教授提出的。后来麻省理工学院的两位科学家证明了原理的正确性。虽然在后来近十年的时间很多人对原理出了很多异议,但是在的世界中,它还是非常有参考价值的。
一致性可用性,鱼和熊掌不可得兼
下面是一个牺牲一致性换取可用性的小例子。
假设N1和是分布式环境下的两个节点,它们有保存了共同的数据,它们的值都是,和是两个分别对数据进行操作的进程。我们看看这么一个过程:向节点写入了新的值,读取的值。
&如果一切正常的话,这个过程看起来像是这样的:
&(1)&A写入V的新值V1。
(2)&N1向N2发送消息M以更新V值。
(3)&B读取V的新值V2。&
&但是现实可能是这样子的:
&由于网络分区,N1发向的消息很有可能没送达,那么,节点将读取到一个过时的值,不一致性产生了。并且当把节点的规模不断扩大的时候,不一致性问题也会更加严重。
所以如果我们希望A&B都是高可用的(也就是低延迟),那么一致性通常就不能得到很好的保证,我们必须要容忍一定的不一致性以换取高可用性。
&感谢博客:
《数据库综述》,作者范凯
《的模式》,作者
阅读(...) 评论()SQL数据库&“内部一致性错误”_同岳科技_新浪博客
SQL数据库&“内部一致性错误”
SQL数据库被广泛运用于中小型企业, 作为数据存储的仓库。 但是由于一些故障原因,
会造成sql数据库损坏, 数据丢失。 本文小编就主要谈谈SQL数据库
“内部一致性错误”故障以及sql数据库恢复技术。
“内部一致性错误”
故障表现:通过之前备份的数据库进行数据库还原时,出现“内部一致性错误”。明明是做了备份,却在还原时发现备份文件是损坏的。这意味着数据库的丢失,后果非常严重。
故障原因分析:
1)备份文件和数据库放在同一个物理硬盘上,硬盘出故障,备份也损坏。
2)备份介质损坏;或者做的是网络备份,数据在网络传输中发生了损坏。
3)数据库在做完整备份、文件备份或者文件组备份的时候,里面的内容就已经有了损坏。
4)在备份数据库时由于磁盘中有坏道,备份出来的MDF文件不完整时也会出现这种错误。
只要有数据文件,
同岳科技数据恢复中心就能够恢复SQL数据库。同岳科技程师能够把各个碎片数据进行海量计算重组恢复,把数据恢复出来。
【数据恢复服务承诺】
1.&免费检测,免费咨询,免费售后服务
2.&与客户签订保密协议,对客户的数据严格保密3.&数据恢复不成功不收费4.&专业工程师提供服务5.&数据恢复前报价,客户确认后工程师开始数据修复6.&整个恢复过程不会对客户的原盘有任何的写操作,以确保原盘的数据完全
重要提醒:
在企业数据库进行维护时要进行备份并且不要轻易删除数据,建议最好复制完整的MDF,LDF文件。并且一旦发生问题,一定要及时联系专业数据恢复的机构。
博客等级:
博客积分:0
博客访问:1,677
关注人气:0
荣誉徽章:下一代NoSQL:最终一致性的末日?
发表于 10:54|
作者Dave Rosenthal
摘要:数据与实际时间不同步导致开发者在构建数据库时总是接受一些折衷的办法,但是如果你能改变这种状况将会怎样?
相比关系型数据库,NoSQL解决方案提供了shared-nothing、容错和可扩展的分布式架构等特性,同时也放弃了关系型数据库的强数据一致性和隔离性,美其名曰:“最终一致性”。
最终一致性将读取不一致和不可靠的写带来的麻烦推给了软件开发人员。以如此弱的数据保证能力构建一个如今互联网需求的复杂、可扩展的系统是异常困难的,我们需要停止接受最终一致性,去探索能提供数据强一致性的可扩展的、分布式数据库设计。
最终一致性的概念频繁出现在分布式数据库的讨论中,主要的NoSQL数据库像Riak、Couchbase和DynamoDB,为客户端程序提供了“最终一致性”,MongoDB和Cassandra在一些配置中保证最终一致性。
最终一致性意味着:该系统最终一致——如果相当长的一段时间内,没有更新一个给定的数据项,最终,硬件和网络故障修复以后,所有该项目的读取都将返回相同一致的值。这也意味着:如果客户没有等足够长的时间,他们根本不能保证一致性。
最终一致性的问题
虽然最终一致性被吹捧为一种新的模式,但它同样有一定的负面含义,因为它不是在所有的情况下都很吸引人,这和分布式系统是一样的。
当一个工程师使用最终一致性数据库构建一个应用程序时,他们每次从数据库访问数据都要解决一些棘手的问题:如果数据库读取返回一个任意的旧值对应用程序的影响是什么?如果对数据库的修改顺序发生了错误对应用程序的影响是什么?如果我在其他用户修改数据库时,读取数据对应用程序的影响是什么?我的数据库更新对其它试图读取数据的客户有什么影响?
这是一个繁重的任务,并且占用大量的开发人员的时间。从本质上说,工程师需要手动去大量的工作,以确保多个用户不产生冲突和处理过期数据。
最终一致性带给软件开发者巨大的负担,在一个不能保证准确性的数据库上,设计一个准确的应用程序是一个巨大的挑战。谷歌最近发布的一篇关于其F1数据库的论文中指出了最终一致性的痛点:
谷歌在最终一致性系统方面有很多的经验。在所有这些系统中,我们发现开发人员花费相当一部分时间构建极其复杂且容易出错的机制来应对最终一致性和处理可能过时的数据。我们认为这是一个不可接受的强加给开发者的负担,并且一致性问题应该在数据库级别解决。
为什么是最终一致性?
构建一个最终一致性数据库有两个优势,一是构建一个弱一致性保证的系统更容易,第二个是从大型数据库机器中分割出来的数据库服务器仍然可以接受应用程序的写入。然而,第二个理由是由第一代NoSQL系统的创始人给出的,其可信度值得探究。
许多第一代NoSQL系统设计都是基于对Eric Brewer的CAP定理的早期理解:(C)onsistency、(A)vailability和(P)artition-tolerance三者只能满足两个。
这个定理适用于任何通信网络可能出错的分布式系统,根据这个原理,假设系统的可用性是必不可少的,早期的NoSQL数据库放弃了一致性(即采用了最终一致性)。
怎样解决这个问题?
CAP理论中的可用性,意味着每一个节点即使无法与系统其它部分通信时,仍然能够读取和写入。很容易看到可用性和一致性的矛盾:如果一个节点不能与其它任何节点通信,怎么能保持它们的一致性?
然而,一个优秀的备选方案是可能的:一个分区内部分结点可读写的系统是不可用的,从CAP理论来看是不可用的,但是从用户仍然能够与连接的节点进行交互的角度来说是可用的。可以构建这种没有单点故障的容错型数据库,而不是诉诸最终一致性。
处理最终一致性带来的麻烦不应该交给开发人员去处理。供应商应该停止以CAP定理作为理由来推崇最终一致性。新的分布式、一致的系统,例如谷歌的Spanner,在强一致性和高可用性之间演示了虚假的一种权衡。
下一代的商业分布式强一致性数据库虽然不容易构建,但它们将比它们的前任更加强大。像第一代,它们拥有真正的shared-nothing分布式架构、容错性和可扩展性。然而,相比最终一致性,他们也应该采取更强有力的模型如ACID,使他们在企业生产工具中更强大。
原文链接:
(编译/张磊
审校/周小璐)
以“应用驱动的架构与技术”为主题的(Big
Data Technology Conference 2013,BDTC 2013)将于日-6日在北京世纪金源大酒店举行。大会共设“大数据架构与系统”、“大数据技术”、“大数据应用”、“大数据的研发趋势”、“大数据基准测试(Benchmark)”,以及“智能交通与大数据”
六个分论坛,大牛坐而论道,专家实践分享。
!欲购从速!Hortonworks CTO&Ari Zilka 已经确认参会!&
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章您所在的位置: &
简单说一说数据存储的一致性
简单说一说数据存储的一致性
本文主要介绍了数据存储的一致性模型的一些知识,包括一致性的程度和最终一致性的各种实体等,希望能对您有所帮助。
数据存储的一致性模型是存储系统和数据使用者之间的约定。一致性有不同程度,大致如下:
1. 强一致性:更新完成后,任何后续访问都将返回更新过的值。
2. 弱一致性:系统不保证后续访问将返回更新过的值,在那之前要先满足若干条件。通常条件就是经过一段时间,也就是不一致窗口。
3. 最终一致性:存储系统保证如果对象没有新的更新,最终所有访问都将返回最后更新的值。
最终一致性的各种实体:
1. 因果一致性:如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将返回更新后的值,且一次写入将保证取代前一次写入。与进程A无因果关系的进程C的访问遵守一般的最终一致性规则。
2.读己之所写一致性:这是一个重要的模型。当进程A自己更新一个数据项之后,它总是访问到更新过的值,绝不会看到旧值。这是因果一致性模型的一个特例。
3.会话一致性:这是上一个模型的实用版本,它把访问存储系统的进程放到会话的上下文中。只要会话还存在,系统就保证&读己之所写&一致性。如果由于某些失败情形令会话终止,就要建立新的会话,而且系统的保证不会延续到新的会话。
4.单调读一致性:如果进程已经看到过数据对象的某个值,那么任何后续访问都不会返回在那个值之前的值。
5.单调写一致性:系统保证来自同一个进程的写操作顺序执行。要是系统不能保证这种程度的一致性,就非常难以编程了。
关于数据存储的一致性模型就介绍这么多,希望本文的理论知识能对各位在以后的数据库开发道路上有所帮助吧,谢谢各位了!
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
MariaDB是一个向后兼容、替代MySQL的数据库服务器。它包含所有主
数据库产品
数据库综合
数据库新闻
维基百科将切换到另外一款开源数据库MariaDB
本专题与大家共同讨论与分享ORACLE SQL的一些常用经典
这条路,有人说是一条不归路,走上来了,就要勇敢的走
MongoDB现在已经越来越受到重视,学习的人也越来越多
精选目前国内外最流行的程序设计语言――Java作为本书的选题,并以丰富的内容来解决读者学习该语言时可能遇到的各种问题。以专业
51CTO旗下网站

我要回帖

更多关于 缓存和数据库一致性 的文章

 

随机推荐