-
2018-07-28 00:22:20
一、讲述CAP.BASE
CAP原则(CAP定理)、BASE理论
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
CAP原则是NOSQL数据库的基石。Consistency(一致性)。 Availability(可用性)。Partition tolerance(分区容错性)。
分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:
- 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
- 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
- 分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
一致性与可用性的决择编辑
CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。
对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地
-
数据库事务一致性需求
很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求并不高。允许实现最终一致性。 -
数据库的写实时性和读实时性需求
对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说发一条消息之 后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。 -
对复杂的SQL查询,特别是多表关联查询的需求
任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是SNS类型的网站,从需求以及产品设计角 度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。
BASE理论
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写,BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的结论,是基于CAP定理逐步演化而来的,其核心思想是即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。接下来我们着重对BASE中的三要素进行详细讲解。
基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性——但请注意,这绝不等价于系统不可用,以下两个就是“基本可用”的典型例子。
- 响应时间上的损失:正常情况下,一个在线搜索引擎需要0.5秒内返回给用户相应的查询结果,但由于出现异常(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了1~2秒。
- 功能上的损失:正常情况下,在一个电子商务网站上进行购物,消费者几乎能够顺利地完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。
弱状态也称为软状态,和硬状态相对,是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据听不的过程存在延时。
最终一致性
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性
亚马逊首席技术官Werner Vogels在于2008年发表的一篇文章中对最终一致性进行了非常详细的介绍。他认为最终一致性时一种特殊的弱一致性:系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有客户端对系统的数据访问都能够胡渠道最新的值。同时,在没有发生故障的前提下,数据达到一致状态的时间延迟,取决于网络延迟,系统负载和数据复制方案设计等因素。
在实际工程实践中,最终一致性存在以下五类主要变种。
因果一致性:
因果一致性是指,如果进程A在更新完某个数据项后通知了进程B,那么进程B之后对该数据项的访问都应该能够获取到进程A更新后的最新值,并且如果进程B要对该数据项进行更新操作的话,务必基于进程A更新后的最新值,即不能发生丢失更新情况。与此同时,与进程A无因果关系的进程C的数据访问则没有这样的限制。
读己之所写:
读己之所写是指,进程A更新一个数据项之后,它自己总是能够访问到更新过的最新值,而不会看到旧值。也就是说,对于单个数据获取者而言,其读取到的数据一定不会比自己上次写入的值旧。因此,读己之所写也可以看作是一种特殊的因果一致性。
会话一致性:
会话一致性将对系统数据的访问过程框定在了一个会话当中:系统能保证在同一个有效的会话中实现“读己之所写”的一致性,也就是说,执行更新操作之后,客户端能够在同一个会话中始终读取到该数据项的最新值。
单调读一致性:
单调读一致性是指如果一个进程从系统中读取出一个数据项的某个值后,那么系统对于该进程后续的任何数据访问都不应该返回更旧的值。
单调写一致性:
单调写一致性是指,一个系统需要能够保证来自同一个进程的写操作被顺序地执行。
以上就是最终一致性的五类常见的变种,在时间系统实践中,可以将其中的若干个变种互相结合起来,以构建一个具有最终一致性的分布式系统。事实上,可以将其中的若干个变种相互结合起来,以构建一个具有最终一致性特性的分布式系统。事实上,最终一致性并不是只有那些大型分布式系统才设计的特性,许多现代的关系型数据库都采用了最终一致性模型。在现代关系型数据库中,大多都会采用同步和异步方式来实现主备数据复制技术。在同步方式中,数据的复制国耻鞥通常是更新事务的一部分,因此在事务完成后,主备数据库的数据就会达到一致。而在异步方式中,备库的更新往往存在延时,这取决于事务日志在主备数据库之间传输的时间长短,如果传输时间过长或者甚至在日志传输过程中出现异常导致无法及时将事务应用到备库上,那么狠显然,从备库中读取的的数据将是旧的,因此就出现了不一致的情况。当然,无论是采用多次重试还是认为数据订正,关系型数据库还是能搞保证最终数据达到一致——这就是系统提供最终一致性保证的经典案例。
总的来说,BASE理论面向的是大型高可用可扩展的分布式系统,和传统事务的ACID特性使相反的,它完全不同于ACID的强一致性模型,而是提出通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。但同时,在实际的分布式场景中,不同业务单元和组件对数据一致性的要求是不同的,因此在具体的分布式系统架构设计过程中,ACID特性与BASE理论往往又会结合在一起使用。
小结:
计算机系统从集中式向分布式的变革随着包括分布式网络、分布式事务和分布式数据一致性等在内的一系列问题与挑战,同时也催生了一大批诸如ACID、CAP和BASE等经典理论的快速发展。
与NoSQL的关系编辑
传统的关系型数据库在功能支持上通常很宽泛,从简单的键值查询,到复杂的多表联合查询再到事务机制的支持。而与之不同的是,NoSQL系统通常注重性能和扩展性,而非事务机制(事务就是强一致性的体现)[2] 。
传统的SQL数据库的事务通常都是支持ACID的强事务机制。A代表原子性,即在事务中执行多个操作是原子性的,要么事务中的操作全部执行,要么一个都不执行;C代表一致性,即保证进行事务的过程中整个数据加的状态是一致的,不会出现数据花掉的情况;I代表隔离性,即两个事务不会相互影响,覆盖彼此数据等;D表示持久化,即事务一量完成,那么数据应该是被写到安全的,持久化存储的设备上(比如磁盘)。
NoSQL系统仅提供对行级别的原子性保证,也就是说同时对同一个Key下的数据进行的两个操作,在实际执行的时候是会串行的执行,保证了每一个Key-Value对不会被破坏。CAP的是什么关系
It states, that though its desirable to have Consistency, High-Availability and Partition-tolerance in every system, unfortunately no system can achieve all three at the same time.
在分布式系统的设计中,没有一种设计可以同时满足一致性,可用性,分区容错性 3个特性
注意:不要将弱一致性,最终一致性放到CAP理论里混为一谈(混淆概念的坑真多)
弱一致性,最终一致性 你可以认为和CAP的C一点关系也没有,因为CAP的C是更新操作完成后,任何节点看到的数据完全一致, 弱一致性。最终一致性本身和CAP的C一致性是违背的,所以你可以看到那些谎称自己系统同时具备CAP 3个特性是多么的可笑,可能国内更多的场景是:一个开放人员一旦走上讲台演讲,就立马转变为了营销人员,连最基本的理念也不要了。
这里有一篇标题很大的文章 cap-twelve-years-later-how-the-rules-have-changed ,实际上本文的changed更多的是在思考方式上,而本身CAP理论是没有changed的为什么会是这样
我们来看一个简单的问题, 一个DB服务 搭建在两个机房(北京,广州),两个DB实例同时提供写入和读取
1. 假设DB的更新操作是同时写北京和广州的DB都成功才返回成功
在没有出现网络故障的时候,满足CA原则,C 即我的任何一个写入,更新操作成功并返回客户端完成后,分布式的所有节点在同一时间的数据完全一致, A 即我的读写操作都能够成功,但是当出现网络故障时,我不能同时保证CA,即P条件无法满足
2. 假设DB的更新操作是只写本地机房成功就返回,通过binlog/oplog回放方式同步至侧边机房
这种操作保证了在出现网络故障时,双边机房都是可以提供服务的,且读写操作都能成功,意味着他满足了AP ,但是它不满足C,因为更新操作返回成功后,双边机房的DB看到的数据会存在短暂不一致,且在网络故障时,不一致的时间差会很大(仅能保证最终一致性)
3. 假设DB的更新操作是同时写北京和广州的DB都成功才返回成功且网络故障时提供降级服务
降级服务,如停止写入,只提供读取功能,这样能保证数据是一致的,且网络故障时能提供服务,满足CP原则,但是他无法满足可用性原则选择权衡
通过上面的例子,我们得知,我们永远无法同时得到CAP这3个特性,那么我们怎么来权衡选择呢?
选择的关键点取决于业务场景对于大多数互联网应用来说(如网易门户),因为机器数量庞大,部署节点分散,网络故障是常态,可用性是必须需要保证的,所以只有设置一致性来保证服务的AP,通常常见的高可用服务吹嘘5个9 6个9服务SLA稳定性就本都是放弃C选择AP
对于需要确保强一致性的场景,如银行,通常会权衡CA和CP模型,CA模型网络故障时完全不可用,CP模型具备部分可用性,实际的选择需要通过业务场景来权衡(并不是所有情况CP都好于CA,只能查看信息不能更新信息有时候从产品层面还不如直接拒绝服务)
延伸
BASE(Basically Available, Soft State, Eventual Consistency 基本可用、软状态、最终一致性) 对CAP AP理论的延伸, Redis等众多系统构建与这个理论之上
ACID 传统数据库常用的设计理念, ACID和BASE代表了两种截然相反的设计哲学,分处一致性-可用性分布图谱的两极。分布式系统的典型应用
分布式系统是一个非常广泛的概念,它最终要落实到解决实际问题上,不同的问题有不同的方法和架构。所有的开源软件都是以某个应用场景出现,而纯粹以“分布式”概念进行划分的比较少见。
但如果以算法划分,到能分出几类:
1.以Leader选举为主的一类算法,比如paxos、viewstamp,就是现在zookeeper、Chuby等工具的主体
2.以分布式事务为主的一类主要是二段提交,这些分布式数据库管理器及数据库都支持
3.以若一致性为主的,主要代表是Cassandra的W、R、N可调节的一致性
4.以租赁机制为主的,主要是一些分布式锁的概念,目前还没有看到纯粹“分布式”锁的实现
5.以失败探测为主的,主要是Gossip和phi失败探测算法,当然也包括简单的心跳
6.以弱一致性、因果一致性、顺序一致性为主的,开源尚不多,但大都应用在Linkedin、Twitter、Facebook等公司内部
7当然以异步解耦为主的,还有各类Queue2.数据分割
数据分割是指把逻辑上是统一整体的数据分割成较小的、可以独立管理的物理单元进行存储,以便于重构、重组和恢复,以提高创建索引和顺序扫描的效率。数据分割使数据仓库的开发人员和使用者具有更大的灵活性。
优点
对当前细节数据进行分割的总体目的就是把数据划分成小的物理单元,为操作者和设计者在管理数据时提供更大的灵活性。小物理单元具有容易重构、自由索引、顺序扫描、容易重组、容易恢复和容易监控等优点。数据仓库的本质之一就是灵活地访问数据,大块数据达不到这个目的。
标准
数据分割的标准可以根据实际情况来确定,通常可选择按日期、地域、业务领域或组织单位等来进行分割,也可以按多个分割标准的组合来进行,但一般情况下,分割标准应包括日期项。
例如,数据分割的标准是由开发人员选择的,在数据仓库中按日期总是必需的。
层次
分割的层次一般分为系统层和应用层。系统层的分割由数据库管理系统和操作系统完成;应用层的分割由应用系统完成,在应用层上的分割更有意义。
分割方法
水平分割
水平分割(Horizontal Splitting)就是把全局关系的元组分割成一些子集,这些子集被称为数据分片或段(Fragment)。数据分片中的数据可能是由于某种共同的性质(如地理、归属)而需要聚集一起的。通常,一个关系中的数据分片是互不相交的,这些分片可以选择地放在一个站点上,也可以通过副本被重复放在不同的站点上。
垂直分割
垂直分割(Vertical Splitting)就是把全局关系按着属性组(纵向)分割成一些数据分片或段(Fragment)。数据分片中的数据可能是由于使用上的方便或访问的共同性而需要聚集一起的。通常,一个关系中的垂直数据分片问只在某些键值上重叠,其他属性是互不相交的。这些垂直分片可以放一个站点上,也可以通过副本被重复放在不同的站点上。
3.副本策略-primary-secondary,paxos-->通过面试
副本
replica/copy 指在分布式系统中为数据或服务提供的冗余:
数据副本:在不同的节点上持久化同一份数据
例如GFS同一个chunk的数个副本
服务副本:数个节点提供相同的服务,服务不依赖本地存储,数据来自其他节点。
更多相关内容 -
CAP原则和BASE理论
2022-01-19 10:23:59文章目录CAP原则分区容错性、可用性和一致性一致性与可用性的抉择取舍策略为什么不能全部满足BASE理论基本可用软状态最终一致性延伸 CAP原则 CAP原则指的是在一个分布式系统中, Consistency(一致性)、 ...
引言
随着分布式计算的发展,事物在分布式计算领域也得到了广泛的应用。在单机数据库中,我们很容易能够实现一套满足ACID特性的事物处理系统,但在分布式数据库中,数据分散在各台不同的机器上,如何对这些数据进行分布式的事物处理具有非常大的挑战。
CAP原则
CAP原则指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
CAP原则是NOSQL数据库的基石。
分区容错性、可用性和一致性
分区容错性:指的是分布式系统中的某个节点或者网络分区出现了故障的时候,整个系统仍然能对外提供满足一致性和可用性的服务。也就是说部分故障不影响整体使用。
事实上我们在设计分布式系统是都会考虑到bug,硬件,网络等各种原因造成的故障,所以即使部分节点或者网络出现故障,我们要求整个系统还是要继续使用的
(不继续使用,相当于只有一个分区,那么也就没有后续的一致性和可用性了)
可用性: 一直可以正常的做读写操作。简单而言就是客户端一直可以正常访问并得到系统的正常响应。用户角度来看就是不会出现系统操作失败或者访问超时等问题。
一致性:在分布式系统完成某写操作后,任何读操作,都应该获取到该写操作写入的那个最新的值。相当于要求分布式系统中的各节点时时刻刻保持数据的一致性。
一致性与可用性的抉择
CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。
对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地 。(Web1.0以静态、单向阅读为主,网站内信息可以直接和其他网站信息进行交互,能通过第三方信息平台同时对多家网站信息进行整合使用。Web2.0以分享为特征的实时网络,用户在互联网上拥有自己的数据,并能在不同的网站上使用。)- 数据库事务一致性需求
很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求并不高。允许实现最终一致性。 - 数据库的写实时性和读实时性需求
对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说发一条消息之 后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。 - 对复杂的SQL查询,特别是多表关联查询的需求
任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是SNS类型的网站,从需求以及产品设计角 度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。
取舍策略
CAP三个特性只能满足其中两个,那么取舍的策略就共有三种:
CA without P:如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但放弃P的同时也就意味着放弃了系统的扩展性,也就是分布式节点受限,没办法部署子节点,这是违背分布式系统设计的初衷的。传统的关系型数据库RDBMS:Oracle、MySQL就是CA。
CP without A:如果不要求A(可用),相当于每个请求都需要在服务器之间保持强一致,而P(分区)会导致同步时间无限延长(也就是等待数据同步完才能正常访问服务),一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问系统。设计成CP的系统其实不少,最典型的就是分布式数据库,如Redis、HBase等。对于这些分布式数据库来说,数据的一致性是最基本的要求,因为如果连这个标准都达不到,那么直接采用关系型数据库就好,没必要再浪费资源来部署分布式数据库。
AP wihtout C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。典型的应用就如某米的抢购手机场景,可能前几秒你浏览商品的时候页面提示是有库存的,当你选择完商品准备下单的时候,系统提示你下单失败,商品已售完。这其实就是先在 A(可用性)方面保证系统可以正常的服务,然后在数据的一致性方面做了些牺牲,虽然多少会影响一些用户体验,但也不至于造成用户购物流程的严重阻塞。
为什么不能全部满足
我们来看一个简单的问题, 一个DB服务 搭建在两个机房(北京,广州),两个DB实例同时提供写入和读取:
-
假设DB的更新操作是同时写北京和广州的DB都成功才返回成功
在没有出现网络故障的时候,满足CA原则,C 即我的任何一个写入,更新操作成功并返回客户端完成后,分布式的所有节点在同一时间的数据完全一致, A 即我的读写操作都能够成功,但是当出现网络故障时,我不能同时保证CA,即P条件无法满足。 -
假设DB的更新操作是只写本地机房成功就返回,通过binlog/oplog回放方式同步至侧边机房
这种操作保证了在出现网络故障时,双边机房都是可以提供服务的,且读写操作都能成功,意味着他满足了AP ,但是它不满足C,因为更新操作返回成功后,双边机房的DB看到的数据会存在短暂不一致,且在网络故障时,不一致的时间差会很大(仅能保证最终一致性)。 -
假设DB的更新操作是同时写北京和广州的DB都成功才返回成功且网络故障时提供降级服务
降级服务,如停止写入,只提供读取功能,这样能保证数据是一致的,且网络故障时能提供服务,满足CP原则,但是他无法满足可用性原则。
BASE理论
BASE是
Basically Available(基本可用)
、Soft state(软状态)
和Eventually consistent(最终一致性)
三个短语的简写,BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的结论,是基于CAP定理逐步演化而来的,其核心思想是即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。
基本可用
基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性——但请注意,这绝不等价于系统不可用,以下两个就是“基本可用”的典型例子。
- 响应时间上的损失:正常情况下,一个在线搜索引擎需要0.5秒内返回给用户相应的查询结果,但由于出现异常(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了1~2秒。
- 功能上的损失:正常情况下,在一个电子商务网站上进行购物,消费者几乎能够顺利地完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。
软状态
弱状态也称为软状态,和硬状态相对,是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据听不的过程存在延时。
最终一致性
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。
总的来说,BASE理论面向的是大型高可用可扩展的分布式系统,和传统的事物ACID特性是相反的,它完全不同于ACID的强一致性模型,而是通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。但同时,在实际的分布式场景中,不同业务单元和组件对数据一致性的要求是不同的,因此在具体的分布式系统架构设计过程中,ACID特性和BASE理论往往又会结合在一起。
延伸
BASE(Basically Available, Soft State, Eventual Consistency 基本可用、软状态、最终一致性) 对CAP AP理论的延伸, Redis等众多系统构建与这个理论之上。
ACID 传统数据库常用的设计理念, ACID和BASE代表了两种截然相反的设计哲学。BASE理论面向的是大型高可用可扩展的分布式系统,和传统事务的ACID特性使相反的,它完全不同于ACID的强一致性模型,而是提出通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。但同时,在实际的分布式场景中,不同业务单元和组件对数据一致性的要求是不同的,因此在具体的分布式系统架构设计过程中,ACID特性与BASE理论往往又会结合在一起使用。
- 数据库事务一致性需求
-
【生信】全基因组关联分析(GWAS)原理
2022-03-12 15:39:05【生信】全基因组关联分析(GWAS) ...2.1 几个需要知道的概念: 2.2全基因组关联分析 3、GWAS——数据预处理 3.1质控的原因: 3.2基因型数据的质控: 3.4表型数据质控: 3.5正负链翻转 3.6 基因型填补 3.7群体分层校【生信】全基因组关联分析(GWAS)原理
文章的文字/图片/代码部分/全部来源网络或学术论文,文章会持续修缮更新,仅供大家学习使用。
目录
1.前提知识介绍
1.1 最小二乘法
1.2 GWAS的数学原理
a的最优化为 2.8387, b的最优化为 2.0968 ,公式 y = 2.8387* x + 2.0968
实际上,我们在计算的时候,会加入其他的变量,比如性别,年龄,品系等。这些因素也是影响表型的变量。因此,当考虑其他变量存在时,计算公式会稍微改变一下:y = ax + zβ + b
y:研究的表型
x:基因型数据,这里指每一个SNP
a:SNP的系数
z:年龄,性别等因素
β:年龄,性别等因素的系数
b:残差,除了我们纳入的SNP,性别年龄等因素外等其他可能影响表型的因素;
1.3 Hardy-Weinberg定律&卡方检验
1.4 连锁不平衡
在群体遗传学研究中,LD连锁不平衡分析是非常常见的内容,同时也是关联分析的基础。简单理解就是只要两个基因不是完全独立遗传,就会表现出某种程度的连锁,这种情况就叫连锁不平衡。
两个相邻的基因A B, 他们各自的等位基因为a b. 假设A B相互独立遗传,则后代群体中观察得到的单倍体基因型 AB 中出现的P(AB)的概率为 P(A)*P(B)。
但我们实际观察得到群体中单倍体基因型 AB 同时出现的概率为P(AB)。若这两对等位基因是非随机结合的,即两个等位基因是完全独立的,则P(AB)=P(A)*P(B)。
但我们发现实际上P(AB)≠P(A)*P(B),这说明A B是连锁不平衡的。
不平衡程度度量的指标为D:D=P(AB)- P(A) *P(B)
例如位于同一染色体的两个等位基因(AB)同时存在的概率大于人群中因随机分布而同时出现的概率,称这两点处于LD状态。
1.5 曼哈顿图
曼哈顿图(manhattan plot)是一种散点图,通常用于显示具有大量数据点,许多非零振幅和更高振幅值分布的数据。
下图中每个点代表一个SNP,纵轴为每个SNP计算出来的P value取-log10,横轴为SNP所在的染色体,图中对候选位点的分布和数值一目了然。
基因位点的P value越小即-log10(P value)越大,该位点与表型性状或疾病等关联程度越强。
而且通常来说受到连锁不平衡的影响,强关联位点周围的SNP也会显示出相对较高的信号强度,并依次向两边递减,所以会出现上图中红色部分的现象。
一般,在GWAS的研究中,P value的阈值在10^-6 或者10^-8以下。
ggplot标注的SNP
注意:曼哈顿图中,显著的SNP并不是鹤立鸡群的冒出来,而是似乎被捧出来的,就像高楼大厦一样,从底下逐步冒出来的。这一座大厦其实就是连锁在一起的SNP,具有很高的LD score。虽然曼哈顿图里每个点是SNP,但是通常都会把最显著的SNP指向某个基因,因为大家最关注的还是SNP的致病根源,但这样找出来的只有编码区的SNP。
注意:最突出的SNP极有可能不是关键的SNP,它只是临近关键SNP的位点。
1.6 箱式图Box-plot
箱形图(Box-plot)是一种用作显示一组数据分散情况的统计图,因形状如箱子而得名。主要用于反映原始数据分布的特征,并且可以进行多组数据分布特征的比较。
箱形图能显示出一组数据的最大值(Maximum)、最小值(Minimum)、中位数(Median)及上下四分位数(1st/3rd Quartile),同时还可以显示逸出值(Outlier)。
第一四分位数(Q1),又称较小四分位数,等于该样本中所有数值由小到大排列后第25%的数字。
第二四分位数,又称中位数,等于该样本中所有数值由小到大排列后第50%的数字。
第三四分位数(Q3)又称较大四分位数,等于该样本中所有数值由小到大排列后第75%的数字。
逸出值,是根据四分位间距(interquartile range)进行计算的:
四分位间距= Q3-Q1=ΔQ,在区间 [Q3+1.5ΔQ, Q1-1.5ΔQ] 之外的值即被视为逸出值。
1.7 QQ plot
Q-Q(分位数-分位数)图,是通过将绘制两个概率分布的分位数来比较两者分布关系的图形方法。Q-Q plot可用于比较数据集合或理论分布。
- Q-Q plot就是理论值和实际值的关系图,x=理论值,y=实际值。
- 理想状态下y=x,这些点应该落在y=x这样一条过0点,斜率45度的直线上。
- 如果实际的样本点的值符合的是一般的正态分布,mean=μ,画出的点就应该落在y= x+μ这条直线上,因为此时每个实际的样本点的值,应该就是理论期望值经过 x+μ这样的线性变化得到的。
- 如果样本点确实取自一个正态分布, 那么样本点数量越大,QQplot就越接近一条直线,反之,当样本点数量过少时,QQplot中的点很容易偏离直线。
2、GWAS的定义
2.1 几个需要知道的概念:
基因型:是指某一生物个体全部基因组合的总称。它反映生物体的遗传构成,即从双亲获得的全部基因的总和。GWAS中主要关注的是全基因组范围上的遗传变异(SNP)。
SNP:SNP单核苷酸多态性是最common的genetic variation类型。
与其并列的还有小的indel(插入或者删除一段小序列,一般在50bp以下)、CNV(基因拷贝数变异)、SV(大的结构变异,一般在50bp以上的长序列的插入、删除、染色体倒位等)。
表型:生物个体可观测的性状。
Allele frequency等位基因频率:每一个基因位点都有两个或多个allele,不同allele之间有明显的频率上的差异,简单点理解就是A和a两个性质的频率,但这里是碱基位点,而不是性状基因。
2.2 全基因组关联分析
全基因组关联分析(Genome wide association study,GWAS)是对多个个体在全基因组范围的遗传变异(标记)多态性进行检测,获得基因型,进而将基因型与可观测的性状,即表型,进行群体水平的统计学分析,根据统计量或显著性 p 值筛选出最有可能影响该性状的遗传变异(标记),挖掘与性状变异相关的基因。
很多地方都是按照上面的一段话定义的,简而言之就是在全基因组范围,研究与目标性状关联的候选基因或基因组区域并进行验证和分析,再进一步解释就是看某个SNP在case和control两个人群间是否有allele frequency的显著差异。
这是我理解的GWAS的大致流程和步骤:
网上也有人将GWAS的流程图整理如下:
基因型数据来源:GWAS通常需要大量的样本,几千是标配,几百就太少,现在有的都达到了几万甚至几十万级别。且GWAS不一定必须做WGS(那太贵了),大部分是做DNA chip即DNA芯片(SNP array),只包含了常见的10^6个SNP。经费多一些会做WES,钱很多的话可以做WGS,编码区和非编码区都检测到。
表型数据来源:表型数据一般是课题研究者前期实验动物群体饲养获得的数据,或者志愿者招募等渠道,网上也有很多共享的数据。
3、GWAS——数据预处理
3.1质控的原因:
一般来说,一个人的基因型终其一生几乎不会改变的,因此很少存在同时影响表型又影响基因型的变异。要去除一些可能引起偏差的因素(也就是我们在第一部分中提到的残差),主要有群体结构、个体间存在血缘关系、技术性操作。
3.2基因型数据的质控:
排除基因型缺失率高的个体。
排除个体杂合率太高和太低的数据。
如下图,对于SNP过滤阈值的设定,如哈温伯格-log(P value)、基因型缺失率(call rate)>0.05的样本剔除、MAF值<0.01的SNP位点剔除。
下图为总结出的几个质量控制需要完成的task,最后,会得出干净的SNP和样本:
Step
Command
Function
Missingness of SNPs
‐‐geno
具有很低genotype calls的SNP被剔除。即大部分受试者中都缺失的SNP被排除了。
Missingness of individuals
‐‐mind
具有很低genotype calls的个体被剔除。即基因型缺失率过高的个体数据被剔除。
Sex discrepancy
‐‐check‐sex
根据 X 染色体杂合/纯合率检查数据集中记录的个体的性别与其性别之间的差异。
Minor allele frequency (MAF)
‐‐maf
仅包括高于设置的 MAF(次等位基因频率) 阈值的 SNP。
Hardy–Weinberg equilibrium (HWE)
‐‐hwe
排除偏离 Hardy-Weinberg 平衡的标记。
Heterozygosity
排除个体杂合率太高和太低的数据。
Relatedness IBD
‐‐genome
Calculates identity by descent (IBD) of all sample pairs.
计算所有样本对的IBD值。IBD:血源同一。
Relatedness
‐‐min
设置阈值并创建相关性高于所选阈值的个人列表。 这意味着可以检测到例如 pi-hat >0.2 相关的受试者(即二级亲属)。
Population stratification IBD
‐‐genome
计算所有样本对的IBD值。IBD:血源同一。
Population stratification
‐‐cluster ‐‐mds‐plot k
基于 IBS 生成数据中任何子结构的 k 维表示。
3.4表型数据质控:
需要对表型数据统计分析:
表型数据为二元——使用逻辑回归
表型数据为连续性变量——使用线性回归
表型数据正态分析(如果不是正态分布,需转换处理为正态分布)
表型数据均值、中值、最大值、最小值,影响因子对表型的影响分析等等。
这些回归,正态分析,最大最小值,就是很基础的数学处理不做展开。
3.5正负链翻转
什么是正负链翻转:在合并数据过程当中,经常会发现不同来源的数据正负链不是统一的。
从个体的角度理解:假如从小明和小红分别拿到了一批基因型数据。那么存在以下几种可能:1)小明的基因型数据统一好正链或者负链;2)小红的基因型数据统一好正链或者负链;3)小明和小红都不知道他们的数据有没有统一好,反正数据拿给你了,你自己解决。
在不知道基因型数据正负链是否统一的情况下,如果直接合并不同来源的数据:
对于大多数突变位点,合并是没有问题的,比如对于A/G,A/C,T/G,T/C突变是可以规避的,但对于A/T,C/G这种突变得到的结果是:对于同一个个体,他在小明的数据库显示的碱基是A,在小红的数据库显示的是T。
从群体的角度理解:对于同一个个体,他在小明的数据库显示的碱基是A,在小红的数据库显示的是T。这就是正负链惹的祸。
解决方法:snpflip软件。本篇blog暂时不涉及实操内容,实操步骤会涉及各项软件、代码和调整参数等,会单独再写一篇。(下面涉及软件实现的)
3.6 基因型填补
定义:基因型填补(genotype imputation),这是处理芯片数据时(前面数据来源部分调到的DNA chip的方法获得的数据),必须走的一个流程。如果你是WGS全基因组测序数据,那么就不需要imputation。
基因型填充的作用是:精确地预测没有被芯片设计所覆盖的SNP位点的基因型,使得更多的遗传位点应用到关联分析中,从而提高发现新的致病基因的可能性。
我的理解:也就是说当我们没钱做很深的测序深度时,有些SNP是被遗漏的,因此需依据模板做基因型填充。这个模板是由高密度SNP构成的单体型(haplotypes)作参考模板。随着千人基因组计划的完成,超过7千万的多态性位点被发现,由此构建了一张丰富的人类遗传单体型图谱,为基因型填充提供了有力依据。
基因型填充的原理概述如下:
- 在具有相同单体型的家系中,遗传标记少的样本可以参照遗传标记多的样本进行基因型填充。
- 对于没有亲缘关系的样本,以上理论也基本适用,主要的差别在于无血缘关系的样本之间共享的单体型比家系样本之间的要短很多。
- 对无亲缘关系样本进行基因型填充需要一个高密度遗传标记构成的单体型图谱作为参照。通过对比待填充样本和参考模板,找到两者之间共有的单体型,然后就可以将匹配上的参考模板中的位点复制到目标数据集中。
- 然而,不是所有的单体型配对都准确一致。当无法准确断定哪一个单体型应该被填充,通常的做法是给出不同单体型出现的概率,并估算不确定性。
上图∶无明显亲缘关系样本的基因体填充简化图。
A输入待研究目标样本和参考模板,
B在目标样本和参考模板之间构建单体型(pre-phasing),
C根据目标样本和参考模板之间共享的单体型进行基因型填充
使用的软件:一个在线网站,Michigan Imputation Server网站链接:
其他的基因型填充软件:
3.7群体分层校正
GWAS中通过分析case/control组之间的差异来寻找与疾病关联的SNP位点,然而case和control两组之间,可能本身就存在一定差异,会影响关联分析的检测。
群体分层(Population stratification),是最常见的差异来源,指的是case/control组的样本来自于不同的祖先群体,其分型结果自然是有差异的。
也可以说是:不同群体SNP频率不一样,导致后面做关联分析的时候可能出现假阳性位点(不一定是显著信号位点与该表型有关,可能是与群体SNP频率差异有关),因此我们需要在关联分析前对群体分层校正。
GWAS分析的目的是寻找由于疾病导致的差异,其他的差异都属于系统误差,在进行分析时,需要进行校正。
对于群体分层的校正,通常采主成分分析的方法,即PCA,对应的文章发表在nature genetics上,链接如下:https://www.nature.com/articles/ng1847
常用软件:plink、GCTA,在这里不做实操演示。
4、GWAS——关联分析
下面是GWAS中常用的分析和图表,最重要的两个是曼哈顿图和QQ plot。
画曼哈顿图和QQ plot 首推R包“qqman”,简约方便。
5、GWAS——meta分析
群体分层是GWAS研究中一个比较常见的假阳性来源。也就是说,如果数据存在群体分层,却不加以控制,那么很容易得到一堆假阳性位点。当群体出现分层时,常规手段就是将分层的群体独立分析,最后再做meta分析。前面的群体分层校正是meta分析的前提。
两个常用的软件:
METAL (fixed-effect model) (https://genome.sph.umich.edu/wiki/METAL_Documentation)
METASOFT (random-effect model) (http://genetics.cs.ucla.edu/meta/)
6、GWAS——条件分析
在得到的曼哈顿图中往往发现是一推显著的信号集中在一起。
假设rs121是我们扫出来与某表型最显著相关的位点(P=1.351e-36),rs124尾随其后(6.673e-22),也是与该表型显著相关,那么这个rs124位点是真的与该表型显著相关,还是因为rs124与rs121高度连锁不平衡(linkage disequilibrium),导致我们看到的结果是:rs124永远跟随者rs121水涨船高。为了解决这个问题,我们就需要做条件分析。
一般有两种结果。
(1)条件分析以后,rs124不显著了;这种情况说明rs124是因为rs121才导致信号显著。
(2)条件分析以后,rs124依旧显著;这种情况说明rs124确实与表型相关,跟rs121没有关系。
软件:plink
7、GWAS——gene-based关联分析
gene-based关联分析是SNP-based关联分析的一个补充。
传统意义上的GWAS针对单个SNP位点进行分析,来寻找与疾病或者性状相关联的SNP位点。
然而SNP水平的GWAS分析还存在着一些问题,通常情况下我们根据经验阈值,比如1X10^-6,5X10^-8来筛选统计学显著的SNP位点,这样的做法会过滤到很多p值不够小,即关联效应较弱的基因。对于复杂疾病而言,其易感基因往往是很多关联效用较弱的微效基因构成,这样的筛选方式会漏掉很多重要的信息。
因此,需要尝试在更高水平整合SNP GWAS分析的结果,以提高GWAS检验的效能,一般有gene-based和gene-set-based两种水平。
- gene-based:综合考虑某个基因上多个SNP位点的关联分析结果,来计算该基因与疾病的关联性。一般采用多元线性回归模型,首先对某个基因内所有SNP位点的基因型矩阵进行PCA分析,挑选其中的几个主成分作为回归分析的自变量,通过线性回归来分析与疾病的关联性;
- geneset-based:基因集水平,也可以称之为pathway水平,是基因水平的进阶,考虑了基因生物学功能的关联性,站在生物学功能的角度来研究突变与疾病的关联性。采用self-contained的方法,首先通过一个宽松的阈值,比如0.05来筛选某个基因上的候选SNP位点,在候选SNP位点的基础上,进一步通过严格的阈值来划分类别,比如5X10-8, 划分为显著和非显著两类。然后根据Alleles或者genotypes, 选择对应的模型来计算关联性。
这两种分析是建立在SNP GWAS水平的基础上的,这样方便我们对已有的GWAS分析结果进行二次分析,深入挖掘新的信息。
软件:MAGMA(https://ctg.cncr.nl/software/magma)
8、GWAS——孟德尔随机化分析
Katan1986 提出:不同基因型决定不同的中间表型,若该表型代表个体的某暴露特征,用基因型和疾病的关联效应能够代表暴露因素对疾病的作用,由于等位基因遵循随机分配原则,该作用不受传统流行病学研究中的混杂因素和反向因果关联所影响 (反向因果关联,指的是暴露和结局的时间顺序颠倒)。
基础研究证实,疾病发生均可追溯到基因水平,即基因型决定中间表型差异,该中间表型代表某暴露因素作用于该疾病。
9、GWAS——LocusZoom图
LocusZoom图几乎是GWAS文章的必备图形之一,其主要作用是可以快速可视化GWAS找出来的信号在基因组的具体信息:比如周围有没有高度连锁的位点,高度连锁的位点是否也显著。
下面是locuszoom的示例图:
本篇blog暂时总结至此,期待下一篇能够更深入一点解释和实操GWAS
-
分布式之CAP原则详解
2019-07-11 23:37:53CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。 1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。 一致性(C):在分布式系统中的所有数据备份,...一、概述
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。
CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。
It states, that though its desirable to have Consistency, High-Availability and Partition-tolerance in every system, unfortunately no system can achieve all three at the same time.
在分布式系统的设计中,没有一种设计可以同时满足一致性,可用性,分区容错性 3个特性1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。
- 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值,即写操作之后的读操作,必须返回该值。(分为弱一致性、强一致性和最终一致性)
- 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
- 分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
二、取舍策略
CAP三个特性只能满足其中两个,那么取舍的策略就共有三种:
2.1、CA without P:如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但放弃P的同时也就意味着放弃了系统的扩展性,也就是分布式节点受限,没办法部署子节点,这是违背分布式系统设计的初衷的。传统的关系型数据库RDBMS:Oracle、MySQL就是CA。
2.2、CP without A:如果不要求A(可用),相当于每个请求都需要在服务器之间保持强一致,而P(分区)会导致同步时间无限延长(也就是等待数据同步完才能正常访问服务),一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问系统。设计成CP的系统其实不少,最典型的就是分布式数据库,如Redis、HBase等。对于这些分布式数据库来说,数据的一致性是最基本的要求,因为如果连这个标准都达不到,那么直接采用关系型数据库就好,没必要再浪费资源来部署分布式数据库。
2.3、 AP wihtout C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。典型的应用就如某米的抢购手机场景,可能前几秒你浏览商品的时候页面提示是有库存的,当你选择完商品准备下单的时候,系统提示你下单失败,商品已售完。这其实就是先在 A(可用性)方面保证系统可以正常的服务,然后在数据的一致性方面做了些牺牲,虽然多少会影响一些用户体验,但也不至于造成用户购物流程的严重阻塞。三、主要矛盾-Consistency和Availability
CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地
- 数据库事务一致性需求 —— 很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求并不高。允许实现最终一致性。
- 数据库的写实时性和读实时性需求 —— 对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说发一条消息之 后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。
- 对复杂的SQL查询,特别是多表关联查询的需求 —— 任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是SNS类型的网站,从需求以及产品设计角 度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。
与数据库的关系
传统的关系型数据库(CA)在功能支持上通常很宽泛,从简单的键值查询,到复杂的多表联合查询再到事务机制的支持。而与之不同的是,NoSQL系统通常注重性能和扩展性,而非事务机制(事务就是强一致性的体现)。
传统的SQL数据库的事务通常都是支持ACID的强事务机制。A代表原子性,即在事务中执行多个操作是原子性的,要么事务中的操作全部执行,要么一个都不执行;C代表一致性,即保证进行事务的过程中整个数据库的状态是一致的,不会出现数据花掉的情况;I代表隔离性,即两个事务不会相互影响,覆盖彼此数据等;D表示持久化,即事务一旦完成,那么数据应该是被写到安全的,持久化存储的设备上(比如磁盘)。
NoSQL系统仅提供对行级别的原子性保证,也就是说同时对同一个Key下的数据进行的两个操作,在实际执行的时候是会串行的执行,保证了每一个Key-Value对不会被破坏。四、解决方案——BASE
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写,BASE是对CAP中一致性和可用性权衡的结果。
核心思想:即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。
基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性——但请注意,这绝不等价于系统不可用,以下两个就是“基本可用”的典型例子。
- 响应时间上的损失:正常情况下,一个在线搜索引擎需要0.5秒内返回给用户相应的查询结果,但由于出现异常(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了1~2秒。
- 功能上的损失:正常情况下,在一个电子商务网站上进行购物,消费者几乎能够顺利地完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。
4.2、软状态Soft state
软状态也称弱状态,和硬状态相对,是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
4.3、最终一致性Eventually consistent
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。
亚马逊首席技术官Werner Vogels在于2008年发表的一篇文章中对最终一致性进行了非常详细的介绍。他认为最终一致性时一种特殊的弱一致性:系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有客户端对系统的数据访问都能够胡渠道最新的值。同时,在没有发生故障的前提下,数据达到一致状态的时间延迟,取决于网络延迟,系统负载和数据复制方案设计等因素。
在实际工程实践中,最终一致性存在以下五类主要变种。
因果一致性:
因果一致性是指,如果进程A在更新完某个数据项后通知了进程B,那么进程B之后对该数据项的访问都应该能够获取到进程A更新后的最新值,并且如果进程B要对该数据项进行更新操作的话,务必基于进程A更新后的最新值,即不能发生丢失更新情况。与此同时,与进程A无因果关系的进程C的数据访问则没有这样的限制。
读己之所写:
读己之所写是指,进程A更新一个数据项之后,它自己总是能够访问到更新过的最新值,而不会看到旧值。也就是说,对于单个数据获取者而言,其读取到的数据一定不会比自己上次写入的值旧。因此,读己之所写也可以看作是一种特殊的因果一致性。
会话一致性:
会话一致性将对系统数据的访问过程框定在了一个会话当中:系统能保证在同一个有效的会话中实现“读己之所写”的一致性,也就是说,执行更新操作之后,客户端能够在同一个会话中始终读取到该数据项的最新值。
单调读一致性:
单调读一致性是指如果一个进程从系统中读取出一个数据项的某个值后,那么系统对于该进程后续的任何数据访问都不应该返回更旧的值。
单调写一致性:
单调写一致性是指,一个系统需要能够保证来自同一个进程的写操作被顺序地执行。
以上就是最终一致性的五类常见的变种,在时间系统实践中,可以将其中的若干个变种互相结合起来,以构建一个具有最终一致性的分布式系统。事实上,可以将其中的若干个变种相互结合起来,以构建一个具有最终一致性特性的分布式系统。事实上,最终一致性并不是只有那些大型分布式系统才设计的特性,许多现代的关系型数据库都采用了最终一致性模型。
在现代关系型数据库中,大多都会采用同步和异步方式来实现主备数据复制技术。在同步方式中,数据的复制通常是更新事务的一部分,因此在事务完成后,主备数据库的数据就会达到一致。而在异步方式中,备库的更新往往存在延时,这取决于事务日志在主备数据库之间传输的时间长短,如果传输时间过长或者甚至在日志传输过程中出现异常导致无法及时将事务应用到备库上,那么很显然,从备库中读取的的数据将是旧的,因此就出现了不一致的情况。当然,无论是采用多次重试还是认为数据订正,关系型数据库还是能搞保证最终数据达到一致——这就是系统提供最终一致性保证的经典案例。
总的来说,BASE理论面向的是大型高可用可扩展的分布式系统,和传统事务的ACID特性使相反的,它完全不同于ACID的强一致性模型,而是提出通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。但同时,在实际的分布式场景中,不同业务单元和组件对数据一致性的要求是不同的,因此在具体的分布式系统架构设计过程中,ACID特性与BASE理论往往又会结合在一起使用。
小结:计算机系统从集中式向分布式的变革随着包括分布式网络、分布式事务和分布式数据一致性等在内的一系列问题与挑战,同时也催生了一大批诸如ACID、CAP和BASE等经典理论的快速发展。
-
奇妙的定律、理论、原则、效应、...(Amazing Laws,Theories,Principles,Effects,...)
2020-02-19 17:30:48相互独立的两个变量,在给定第三个变量的条件下,可能不是条件独立的 比如: 1.在大学中开展社会调查,实际上是condition on受访者上过大学 2.使用某个在线网站上的数据做分析,实际上是condition on用户会访问该... -
尿布和啤酒—关联规则详解
2020-09-02 01:32:40在一家超市里,有一个有趣的现象:尿布和啤酒赫然摆在一起出售。但是这个奇怪的举措却使尿布和啤酒的销量双双...这是数据挖掘算法关联规则在实际中的成功应用案例,那么关联规则算法的理论根基又是什么呢? 这就... -
Java程序员应该了解的10个面向对象设计原则
2017-03-06 16:03:18本人一直崇尚一个原则,“我思,故我在!”。一直以来忙于编码,但是不甚如人意(写了较多重复性、耦合性太强的代码)。行有行规,面向对象编程的Java语言也不例外,遵循其相关原则,才能高效快速的编写高性能的代码... -
Mysql学习总结(77)——温故Mysql数据库开发核心原则与规范
2019-09-12 14:07:14一、核心原则 1、尽量不在数据库做运算 俗话说:别让脚趾头想事情,那是脑瓜子的职责。作为数据库开发人员,我们应该让数据库多做她所擅长的事情。尽量不在数据库做运算,复杂运算移到程序端CPU,尽可能简单应用... -
行为者网络理论(ANT,Actor Network Theory):一切皆是映射
2020-01-01 15:42:02该理论有三个核心概念:行动者(actor)、转义者(mediator)、 网络(network)。 行动者 Actor 既可以指人类(humans),也包括观念、技术、生物、组织、思想等非人的物体(non-humans,拉图尔称之为actant)。... -
篇章分析的理论和应用
2018-10-25 17:07:55篇章的衔接性可以分成两类,前者是借助一系列的语法手段,⽽而后者是词汇手段: 语用学 主要研究人们如何运用语言: -如何使用语言达成某种目的?——言外行为 -会话含义如何根据话语推导?—合作原则 言... -
数据库设计原则
2019-06-09 09:52:33一,数据库设计原则 1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。 在特殊情况下,它们可能是一对多或多对一的... -
分布式数据库CAP理论
2017-10-27 17:10:46传统数据库与NoSQL数据库 传统的关系型数据库在功能支持上通常很宽泛,从简单的键值查询,...A代表原子性,即在事务中执行多个操作是原子性的,要么事务中的操作全部执行,要么一个都不执行;C代表一致性,即保证进... -
分布式理论-CAP理论
2017-09-27 17:44:40一 CAP理论简述 海量数据管理中的一致性理论,包括CAP理论,BASE理论,数据一致性理论模型,以及现有的经典数据一致性技术。... CAP定律说的是在一个分布式计算机系统中,一致性,可用性和 -
超硬核十万字!全网最全 数据结构 代码,随便秒杀老师/面试官,我说的
2021-04-11 01:11:23本文代码实现基本按照《数据结构》课本目录顺序,外加大量的复杂算法实现,一篇文章足够。能换你一个收藏了吧? -
六大设计原则浅析
2016-04-17 13:42:03一、设计在软件开发中的重要性重要性在上大学的时候我们总是不理解为什么要讲这么理论性的东西,当时就一个感觉就是没什么用,我们更想去学习一些可以看到结果的东西,当你毕业之后就会发现基础的知识是多么重要,而... -
【心理咨询师考试笔记】基础理论(二)——人格心理学
2021-11-01 21:52:54前一章学习的心理学概论(普通心理学、基础心理学)是研究整个心理学学科的基础,但是与大家学习心理学的目的还有相当的一段距离,与大家学习心理学所关系的问题最密切的有两个学科,一个是 “社会心理学”,还有一... -
数据仓库基本理论
2019-08-01 10:58:361.1 范式理论概述 关系型数据库设计时,遵照一定的规范要求,目的在于降低数据的冗余性和数据的一致性,目前业界范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五... -
管理学概念区分(行为科学、科学管理、古典管理理论)
2019-10-01 16:35:09**行为科学的研究,基本上可以分为两个时期。 前期以人际关系学说(或人群关系学说)为主要内容 ,从20世纪30年代梅奥的霍桑试验开始,到1949年在美国芝加哥讨论会上第一次提出行为科学的概念止。在1953年美国福特... -
超硬核!数据结构学霸笔记,考试面试吹牛就靠它
2021-03-26 11:11:21如何衡量一个算法好坏 很显然,最重要的两个指标:需要多久可以解决问题、解决问题耗费了多少资源 那我们首先说第一个问题,要多长时间来解决某个问题。那我们可以在电脑上真实的测试一下嘛,多种方法比一比,用时... -
TP5 关联模型使用(嵌套关联、动态排序以及隐藏字段)
2019-03-25 23:20:00在数据库设计中,常常会有如下这种关联模型,分类表中一条分类对应多个商品表中的商品 如果要获得分类表中每条分类 以及 对应的商品的信息,则需要先查询分类表中的数据,然后根据结果遍历查询商品表,最后把数据... -
GRASP----(职责分配原则)
2016-06-28 23:34:35就像我在前面的低耦合模式里说的一样,“两个不同模块的内部类之间不能直接连接”,但是我们可以通过中间类来间接连接两个不同的模块,这样对于这两个模块来说,他们之间仍然是没有耦合/依赖关系的。 9、... -
分布式系统中的CAP理论
2020-09-18 17:57:05拿一个最简单的例子,就比如说我们的图书管理系统。之前的系统包含了所有的功能,比如用户注册登录、管理员功能、图书借阅管理等。这叫做集中式系统。也就是一个人干了好几件事。 后来随着功能的增多,用户量也... -
优秀的API接口设计原则及方法
2019-05-28 15:30:37它与设计模式里的职责单一原则类似但却不同,因为一个业务功能里可能会包含多个操作,比如查询会员,可能除了查询会员表外还要获取该会员的其他必要信息,但不要在查询会员的同时还有修改权限等类似的其他业务功能,... -
网络安全理论
2022-01-23 19:55:30IKE如何建立安全关联过程:涉及两个阶段。 IPsec的应用】:vpn 传输层安全协议:SSL/TLS协议 传输层安全协议的作用】是实现两个进程之间TCP报文的安全传输。与应用层协议独立无关;高层应用层协议(如HTTP、FTP、... -
设计数据库各表之间的关联
2018-11-04 16:12:20按照规范设计,将数据库的设计过程分为六个阶段: A、系统需求分析阶段 B、概念结构设计阶段 C、逻辑结构设计阶段 D、物理结构设计阶段 E、数据库实施阶段 F、数据库运行与维护阶段 需求分析和概念结构设计... -
数据库设计原则和优化
2018-12-12 20:37:57数据库设计原则: 1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。 在特殊情况下,它们可能是一对多或多对... -
数据库表结构设计方法及原则
2020-12-01 22:30:43在目前的企业信息系统中,数据库还是最佳的数据存储方式,虽然已经有很多的书籍在指导我们进行数据库设计,但应该那种方式是设计数据库的表结构的最好方法、设计时应遵从什么样的原则、四个范式如何能够用一种方式... -
超硬核!十万字c++题,让你秒杀老师和面试官(上)
2021-04-21 10:46:15我发现呀,这大家对面试题的需求还是很大的,这里总结了上千道知识点,能换您一个收藏吗 -
牛逼!Java 从入门到精通,超全汇总版
2021-05-06 19:40:33上面这两本书非常适合初学者学习设计模式 设计模式 这本书结合设计实作例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。书中分类描述了一组设计...