本文主要介绍分布式数据库sql(分布式数据库sqlserver),下面一起看看分布式数据库sql(分布式数据库sqlserver)相关资讯。
尽管nosql运动没有给分布式数据处理带来根本性的技术变革,但它也导致了对各种协议和算法的铺天盖地的研究和实践。在本文中,我将对nosql数据库的分布式特征进行系统的描述。系统的可扩展性是推动nosql运动发展的主要原因,包括分布式系统的协调、故障转移、资源管理等诸多特性。这让nosql听起来像一个大篮子,一切都可以留在nosql运动。虽然分布式数据处理并没有带来根本性的技术变革,但它仍然会导致对各种协议和算法的绝大多数研究和实践。正是通过这些努力,逐渐总结出了一些行之有效的数据库建设方法。在本文中,我将对nosql数据库的分布式特征进行系统的描述。接下来,我们将研究一些分布式策略,如故障检测中的复制。这些策略用粗体字标出,分为三段:1。数据一致性. nosql需要分布式系统的一致性、容错性和性能、低延迟和高可用性的平衡。一般来说,数据一致性是一个必要的选项,所以这一节主要是关于数据复制和数据恢复。2。数据放置。数据库产品应该能够应对不同的数据分布、集群拓扑和硬件配置。在本节中,我们将讨论如何分配和调整数据的分布,为及时解决问题提供持续的保证,有效的查询和保证集群中资源的均衡使用,如内存和硬盘空间。3.对等系统。很多数据库产品都采用了leader election等技术来实现强容错和数据一致性。然而,即使分布式数据库(没有中心)应该遵循它们的全局状态,并检测故障和拓扑变化,本节也将介绍几种技术来保持系统的一致性。数据一致性众所周知,分布式系统经常会遇到网络隔离或延迟。在这种情况下,隔离部分不可用。因此,在不牺牲一致性的情况下保持高可用性是不可能的。这一事实通常被称为上限理论。但是,一致性在分布式系统中是一件非常昂贵的事情,所以我们经常需要做出一些让步,不仅是为了可用性,也是为了各种权衡,为了研究这些权衡,我们注意到分布式系统的一致性问题是由数据隔离和复制引起的,所以我们将从复制的特性入手。可用性u3002in在网络隔离的情况下,其余的仍然可以响应读写请求。读写延迟,读写请求可以短时间处理。阅读和写作的可塑性。读写压力可以通过多个节点来平衡。容错。读写请求的处理不依赖于任何特定的节点。数据持久性:特定条件下的节点故障不会导致数据丢失。统一u3002c协调的作用比以前复杂得多,所以我们需要详细讨论一些不同的观点。但是我们赢了。;不涵盖许多一致性和并发模型,因为这超出了本文的范围。我只能用一些简单的功能组成一个精简的系统。从读写的角度来看,数据库的基本目标是使副本的收敛时间尽可能短,即向所有副本交付更新以保证最终一致性的时间。除了这种弱保证,还有一个更强的一致性特性:写后写一致性。在数据项x上写的效果,在后续对x的读操作中总能看到,读后读一致性。在读取数据项x之后,x的后续读取操作应该返回与第一个返回值相同或更新的值。写一致性。分区数据库中经常发生写。数据库应该能够处理这种,并确保不同的分区不会处理多个写请求:原子被写入。如果数据库提供api,写操作只能是单个原子赋值。避免的方法是找出每个数据的最新版本,这使得所有节点在更新结束时获得相同的版本,但与更新后的顺序无关。由网络故障和延迟引起的节点的不同顺序更新。数据的版本可以由用户指定的代表通过时间戳或值来表示。这是卡桑德拉使用它的。原子化读写应用的变化。有时需要读-修改-写顺序操作,而不是单个原子写操作。如果两个客户端读取相同版本的数据,并且修改后的数据被修改并写回其中,则根据原子写入模式,更新时间将覆盖前一时间。在某些情况下,这种行为是不正确的(例如,两个客户端使用相同的新值添加一个列表值)。该数据库至少提供了两种解决办法:预防。读-修改-写可以认为是一个特例,所以分布式锁,或者与paxos一致的协议可以解决这个问题。这项技术支持原子读取重写语义和任意隔离级别的事务。另一种方法是避免分布式并发写操作,写一个特定数据项的节点(可以是全局主节点,也可以是分区主节点)。为了避免,数据库必须牺牲网络隔离的可用性。这种方法常用于许多系统中,以提供强一致性保证(例如,大多数关系数据库、hbase、mondb)。检测、数据库跟踪、并发更新和回滚的一个或两个版本由客户保留。并发更新通常与向量时钟跟踪(这是一种乐观锁定)或完整版本的版本历史保持相关联。采用这种方法的危险,伏地魔couchdb。现在让我们 让我们仔细看看常用的复制技术和分类,并根据它们的特点来描述它们。第一张图描述了不同的技术以及不同技术之间的权衡。协调系统的一致性、可扩展性、可用性和延迟之间的逻辑关系。附图详细描述了每项技术。复合因子为4,读/写协调。服务器可以是外部客户端或内部代理节点。根据各方共识,我们将采用由弱到强的技术:在策略上,(a,反熵)一致性最弱,写的时候会选择任意一个节点更新。读取时,如果新数据没有传输到节点并通过后台反熵协议读取,那么仍然读取旧数据(反熵协议将在下一节详细介绍):过大的传播延迟使得使用的数据很难同步,所以典型的用法是检测和维护的计划辅助功能。cassandra使用一种反熵算法来调用数据库的拓扑结构和各个节点之间的一些其他元数据信息。一致性保证弱:即使没有失败,也会出现写和读写差异。网络隔离下的高可用性和健壮性,异步批处理逐一替代,性能优异。持久性很弱,因为新数据起初只是一个副本。(b)上述模式的一个改进是异步向所有可用节点发送更新,同时任意节点接收到一个更新数据请求,也视为方向反熵。与简单的反熵相比,该方法大大提高了一致性,只牺牲了一点点性能,但形式一致性和持久性保持不变。如果由于网络故障或节点故障而无法获得某些节点,更新将最终通过反熵传播过程传递到该节点。(c)在以前的模式中,使用快速转移技术可以更好地处理一个节点的操作失败,无效节点的更新被记录在一个附加的代理节点中,表明一旦更新被传递到该节点,该特征节点是可用的。这提高了一致性并减少了复制时间。(d),读写一次,因为在更新之前,提示切换的节点也可能失效。在这种情况下,必须通过所谓的读取修复来确保一致性,每个读取操作都将启动一个异步过程,并向存储数据的所有节点请求数据摘要(如签名或哈希)。如果发现各个节点返回的摘要不一致,那么各个节点的数据版本就会统一。我们称之为一次性读写结合a、b、c、d的技术。它们不提供严格的一致性保证,但作为一种自带的方法,已经应用到实践中。上述策略(例如,读取和写入)是一种启发式增强,用于减少复制的收敛时间。为了保证更大的一致性,需要牺牲可用性来保证阅读和写作有一定的重叠。通常的做法是同时写w份而不是一份,读r份。首先,您可以配置写入副本的数量w 1。其次,由于r w是绑定节点之间的重叠读写,在数据的多个副本中至少会有一个新数据被读取(w = 2,r = 3,n = 4)。这样,在执行读写请求时,它们可以保证一致性(读写用户的一致性),但不能保证全局一致性。根据下图的例子,r = 2,w = 2,n。= 3,因为两个写赋值的更新是非事务。当更新未完成时,您可以读取两个旧值或一个新值。对于某些读取延迟,设置不同的r和w值可以调整写入延迟和写入持续时间,反之亦然。如果wn/2可以确保原子读重写在检测到时处于反转模式。严格来说,这种模型可以容忍单个节点失效,但是网络隔离的容错性不好。在实践中,这种近似的方法经常被用来牺牲一些一致性来提高某些场景的可用性。读取数据时,读取所有副本(读取数据或检查汇总)可以缓解读取一致性问题。这确保了只要至少一个节点上的数据被更新,读者就可以看到新数据。但在网络隔离的情况下,这种保障就不起作用了。(g,主从)这种技术通常用于提供读写的连续重写作为原子写或检测级别,以达到预防的级别,需要使用集中管理模式或锁。最简单的策略是将一个主从式的特定数据项的路径复制到一个中心节点,然后顺序执行。在这种情况下,主节点将成为瓶颈,所以我们必须将数据划分到独立的部门(不同的块,不同的主),以提供可扩展性。(h)更新多个副本的方法可以使用事务控制技术来避免写。著名的方法是使用两阶段提交协议。但是,两阶段提交并不完全可靠,因为人为故障可能会导致资源阻塞paxos的提交。协议是更可靠的选择,但会损失一些性能。在此基础上,下一个小步骤是在一个事务中读取所有副本并更新副本。它提供了很强的容错能力,但是会损失一些性能和可用性。以上分析中的一些取舍需要再次强调。一致性和可用性,cap理论给出了严格的权衡,在网络隔离的情况下,数据库既可以设置数据,又可以接受数据丢失的风险。一致性和可伸缩性,可以看出即使是一致的读写保证也会降低副本集的可伸缩性。只有在原子写模式下,才能以相对可扩展的处理写。原子读重写模型避免了,增加了临时全局锁的数据量。这表明,数据或操作之间的依赖,即使在小范围或短时间内,也会损害的可扩展性。因此,设计良好的数据模型和单独存储的数据的可伸缩性非常重要。一致性和延迟,如上所述,当数据库需要提供强一致性或持久性时,应该偏向于读写所有的复制技术,但明显与请求延迟一致,与副本数量成反比,所以使用这种技术会是一种更客观的衡量标准。故障转移和一致性/可扩展性/延迟。有趣的是,容错和一致,和拖延都不是暴力。通过合理地放弃一些性能和一致性性,集群可以容忍尽可能多的节点故障。这种折衷和paxos协议的区别是显而易见的。在另一个例子中,这种折衷是添加特定的一致性保证,例如使用严格的会话进程读写,但这增加了故障转移的复杂性。反熵协议和谣言传播算法let s从以下几点入手:有多个节点,每个节点有一个副本,每个节点可以单独处理更新请求,每个节点定期与其他节点同步。在此期间,所有副本将保持一致。如何完成同步过程,何时开始同步,如何选择同步对象,如何交换数据。我们假设两个节点总是用新版本的数据覆盖旧数据,或者保留两个版本用于应用层处理。这个问题常见于数据一致性维护和集群状态同步,比如集群成员信息分发。虽然该负责人介绍,监控数据库和同步方案可以解决这个问题,但分散数据库可以提供更好的容错能力。集中的主要方法是使用设计良好的传染协议,该协议相对简单,但它提供了良好的收敛时间,并且可以容忍任何节点故障和网络隔离。虽然有许多感染类型的算法,但我们只关注反熵协议,因为nosql数据库使用它。反熵协议假设同步将根据固定的时间表来执行。每个节点定期选择另一个节点交换数据以消除差异。根据一定的规则,有三种反熵协议:推、拉和组合。推送协议的原理是简单地选择一个随机的节点来发送数据。这显然是愚蠢的,把所有的数据放在实际应用中,所以节点一般以如下所示的工作。作为同步发起者的节点准备数据的摘要,该摘要被包括在a的数据指纹中。在接收到摘要之后,节点b将数据与本地数据和作为摘要返回的数据进行比较,返回最终的摘要,向b发送一个,向b更新一个,然后更新数据。拉模式和混合方法之间的协议是相似的,如上图所示。反熵协议提供了良好的收敛时间和可扩展性。下图显示了在100个节点的集群中传播更新的结果。在每次迭代中,每个节点只与一个随机选择的节点相关联。可见拉模式收敛比的推方法理论上是可以证明的,还有一个问题,收敛到底。经过多次迭代,虽然几乎所有的节点都过去了,但仍有一些不受影响的混合方法。它比简单的推挽方法更有效,所以在实际应用中,反熵是可扩展的,平均转换时间的增加是簇大小的对数函数形式。虽然这些技术看起来很简单,但仍然有许多研究专注于不同约束下的反熵协议的性能,其中使用了更有效的网络拓扑而不是随机选择。使用有限的传输速率调整网络带宽,或者使用高级规则选择数据同步。汇总计算也面临挑战,数据库将保持更新。用于汇总计算的新日志。在上一节中,我们假设两个节点总是合并它们的数据版本,但是解决更新并不容易,所有副本最终都能达到语义正确的值也就不足为奇了。让 假设一个例子来说明这个问题:数据库维护一个逻辑全局计数器,每个节点可以增加或减少这个数字。虽然每个节点都可以保持它的局部值,但是这些地方不能通过简单的加减运算来合并。假设有三个节点a、b和c,每个节点执行额外的操作。如果你取b的值加到本地副本,那么c得到b的值,然后c得到值,然后c的最终值是4,这是不对的。解决这个问题的方法是使用类似于向量时钟的数据结构来保持每个节点对计数器。class inverse { int plus } int minus international node _ id increment{ node _ id plus { } } minus{ node _ id minus { } } get{ return and(sum)-and(负号)} merge(counter other){我在1。max_id {plus {i max = max (plus {},其他。加{})减去最大值(减{,},再减} } } cassandra也是类似的设计。一个更复杂和最终一致的数据结构也可以用一个状态或基于复制理论来设计。比如提到了一系列这样的数据结构,包括:counter(加减)set(加减运算)graph(加一条边)。这一部分重点介绍分布式数据库中控制数据放置的算法,这些算法负责将数据项映射到适当的物理节点,在节点之间迁移数据以及全局分配资源(如内存)。平衡数据我们通过简单的协议提供集群节点之间的无缝数据迁移。当集群扩展时(例如添加新节点(节点故障转移)和一些停机时间)或平衡数据时(节点间不均匀的数据分布),通常会出现这种情况。场景描述图1如下——三个节点和三个节点的数据是随机分布的(假设数据是核心值)。如果数据库不支持数据的内部平衡,则数据库实例会在每个节点中发布,如图b所示。这需要对停止迁移的数据库实例进行手动集群扩展,这会移动到新节点并在新节点开始,如图所示。虽然数据库监控每一条记录,但是包括mondb、oracle coherence、redis clust——,将键(通常是哈希)映射到物理节点,键的哈希值空间是一个有序的定长二进制字符串。很明显,这个范围内的每个键都会映射到图a的一个三节点副本,值空间会封闭成一个环,沿着环顺时针方向,直到所有副本都映射到对应的节点,如图b所示,换句话说,你会位于节点b,因为在b的范围内,第一个副本要放在c,第二个副本放在一,以此类推。这种结构的优点是增加或删除一个节点,因为它只保持相邻区域的数据平衡。如图c所示,添加节点d只会影响数据项x和y是否受影响。同样的,节点b的移除(或者b只失效)会影响y和x的副本,不会影响x本身。但这种有利有弊,即经济负担由邻居节点承担,会移动大量数据。每个节点映射到一个范围而不是一个范围,这不是问题。可以在一定程度上降低影响,如图d所示,这是一种权衡。重新平衡数据时避免过载。但是,与基于模块的映射相比,它适当地减少了总体平衡的数量。维护一个完全一致的大型哈希环集群并不容易。这对于相对较小的数据库集群来说没有问题,研究如何在对等网络中将数据放置与路由网络结合起来是很有趣的。比较好的例子是chord算法,它使得环的完整性认可单个节点的搜索效率。chord算法也采用了环映射关键节点的思想,在这方面类似于一致性哈希。不同的是,一个特定的节点维护一个链表,链表中节点和环的逻辑位置是相乘的(如下图所示),这就使得用两点搜索定位键w只需要很少的网络跳数。这张图片是一个由16个节点组成的集群,描述了节点a如何寻找放置在节点d上的密钥..(a)描述了路由,(b)描述了节点a、b和c的环的部分图像。在参考文献中,有关于分布式系统中的数据复制的更多信息。根据多个属性进行数据分片当使用哈希访问数据时,一致的数据放置策略是有效的,但会更加复杂。当查询多个属性时,一个简单的方法(使用mondb)是使用主键分配的数据,而不考虑其他属性。结果是基于主键的查询可以路由到合适的节点,但是查询效率的不平衡会导致以下问题:有一个数据集,其中每个数据都有很多属性和对应的值。是否存在一种数据分布策略,允许尽可能少地执行具有任意数量属性的查询,这提供了一种解决方案。其基本思想是将每个属性视为多维空间中的一个轴和映射区域在空间中的一个物理节点,查询将匹配到几个相邻区域空间中的一个超平面,因此只有这些区域中的查询是相关的。让 让我们看一下参考示例。每个数据是一个用户 的信息,它有三个属性,名、姓和号码。这些属性被视为三维空间中可行数据分布策略图的每个象限中的一个物理节点,查询name = john对应一个贯穿四个象限的平面。是的,只有四个节点参与查询处理。对应于具有两个属性约束的查询的直线穿过两个象限。如最后一幅图所示,只有两个节点将参与处理。这种方法的问题是空间象限增加了属性数量的指数函数。所以只有几个属性的查询会被投影到很多空间区域,也就是很多服务器上,更多的属性数据项会被分成几个属性相对较少的子项,每个子项会被映射到多维空间中的一个独立空间,而不是整个数据,可以在一定程度上缓解这个问题。这种映射可以为节点提供更好的查询,但是增加了集群的协调性。因为这种情况下的数据会分散在几个独立的子空间中,每个子空间对应几个物理节点,所以数据更新必须考虑问题。钝化副本有些应用对随机读取有很强的需求,要求所有数据都存储在内存中。在这种情况下,通常是从节点从每个段复制数据两次以上,因为每个数据都在主节点和从节点的一部分来代替主节点,从节点的内存大小应该和主节点的一样。如果系统可以容忍短期中断或性能下降,那么当节点出现故障时,它也可以是不可分的。下图描述了4个节点上的16个数据段,每个节点在内存中都有一个部分,在硬盘上也有一个副本。灰色箭头突出显示了节点2上的分段副本。其他节点上的切片也会被复制。红色箭头描述了将副本加载到内存中时节点2的故障。集群中的副本是均匀分布的,这可以将活动副本的故障存储在几个保留内存的节点中。在上图中,集群只保留1/3的内存,可以承受单节点故障。特别指出的是,复制激活(从硬盘加载到内存)需要一定的时间,这会导致性能下降或短时间内部分数据服务中断和恢复。系统协调在本节中,我们将讨论这两种技术都与系统协调有关。分布式协调是一个比较大的领域,很多人研究了几十年。在本文中,只涉及两种实用技术。分布式锁、内容一致性协议和其他基本技术可以在许多书籍或网络资源中找到。故障检测和容错分布式系统的基本功能。其实所有基于心跳故障检测协议的通信机制原理都很简单。组件定期发送心跳监视信息,如果在一段时间内没有接收到心跳信息,则监视过程(或由监视组件监视的轮询过程)被视为失败。此外,真正的分布式系统还有其他一些功能需求。自适应故障检测应该能够处理临时网络故障和延迟,以及改变负载和带宽的集群拓扑。但是,这是非常困难的,因为没有办法知道长期无响应的过程是否是真正的失败。因此,在故障检测和故障识别中需要权衡的时间(确定一个真正的故障需要多长时间,也就是经过一个无响应过程后多长时间才会被认为是故障)和误报率的权重是权衡因素。乍一看,故障检测只需要输出一个指示监控进程是否工作的布尔值,但在实际应用中不受e的影响。让 让我们看看mapreduce的参考示例。有一个分布式应用程序,它有一个主节点和多个工作节点。主节点维护一个工作列表并分配工作列表中的工作节点,主节点可以区分不同程度的故障。如果主节点怀疑工作节点被挂起,他不会再把工作分配给该节点。其次,随着时间的推移,如果没有收到节点的心跳信息,主节点会将工作重新分配给其他节点。最后,主节点确认该节点出现故障,并且所有相关资源都被释放。可扩展性和健壮性。故障检测作为一个系统的功能,应该能够随着系统而扩展。它应该是强大的、一致的,即即使通信失败,系统中的所有节点也应该有一致的看法(即所有节点都应该知道哪些节点不可用,哪些节点可用,不,认知节点不能出现在节点a不可用的一部分节点,而节点的其他部分不知道情况)。所谓累积故障检测器可以解决第一个问题。cassandra做了一些修改,并应用到产品的基本工作过程中,具体如下:对于每个监测资源,计算探测器记录的心跳信息的到达时间,统计预测范围内到达时间的均值和方差。假设到达时间的分布已知(下图包含一个正态分布的公式),我们可以计算心跳延迟的概率(当前时间t_now的最后到达时间tc之差),用这个概率来判断是否存在故障。对数函数可以调整以提高可用性。在这种情况下,输出1意味着误判(节点故障)的概率是10%,2是1%,以此类推。根据重要程度的不同,要按级别组织监控区域。这个区域是谣言通信协议或中央容错库的同步,可以满足可扩展性的要求,防止心跳信息在网络中泛滥。如下图所示,6个故障检测器组成了两个区域,这两个区域通过谣言传播协议或者像城市动物园这样强大的库连接在一起。协调运动协调活动是强一致性数据库的一项重要技术。一种是利用主从结构组织系统中主要节点的故障恢复,另一种是在网络隔离的情况下断开少数节点,避免。欺负算法是一种相对简单的协调移动算法,mondb使用这种算法来确定一个主副本集。欺负算法的主要思想是,集群中的每个成员都可以声明自己被协调并通知其他节点,其他节点可以选择接受这个声明或者拒绝进入协调者的竞争。节点的其他节点都可以协调,节点判断谁该赢。根据某些属性,这个属性可以是一个静态id,也可以是一个像上次事务id一样的可测更新(最新的节点会赢)。下面的例子演示了欺负算法的执行。使用静态id作为度量,id较大的节点将胜出:在初始集群中,有5个节点,节点5是公认的协调器。假设节点5和节点2挂机,三个节点同时被发现。两个节点开始发送的消息的id。选择节点4、节点2、节点3,并排除节点2和节点3。此时,节点1的节点5发送选举失败。具有较大id的所有节点的感知信息。节点2、3和4,节点1和节点4都被消除。发送选举信息的节点5没有响应,因此节点4宣布它当选为宣布此消息的另一个节点。协调活动中涉及的节点数量,确保集群中至少有一半的节点参与选举。这样就保证了网络协调器选择的网络中只有一部分节点可以被隔离(假设网络被划分为不同的区域,这些区域互不相连,选举结果的协调器会导致节点数,课程协调器会有一个比较大的区域,前提是可用节点的面积是集群中原来节点数的一半。如果集群被分成几个块,则不能选择具有更大节点总数的节点协调器。当然,预计在这种情况下,集群可以继续提供服务。
了解更多分布式数据库sql(分布式数据库sqlserver)相关内容请关注本站点。
苹果手机屏幕不耐摔(平板电脑耐摔吗)
ice的服务器(ice服务器现状)
什么型号是国行的(本机是国行吗)
windows10家庭中文版评估副本(win11 insider preview评估副本)
关闭系统睡眠命令(win8 关闭睡眠)
分布式数据库 sql(分布式数据库sqlserver)
c盘windows文件夹能删吗(c盘中的windows文件夹可以删除吗)
怎么进去安全模式电脑(怎样进去安全模式电脑)
word文件变成了只读怎么回事(word怎么变成只读了)
苹果发布m1处理器(苹果m1处理器发布时间)
装完系统之后怎么装驱动(系统装好后怎样装驱动程序)
硬盘最稳定的牌子,机械硬盘哪个牌子稳定
惠普笔记本的型号在哪里标注的呀,HP笔记本的型号是不是在屏幕右上角写着
i512600kf(i512600)
固态硬盘如何选择大小,笔记本如何选择固态硬盘
电脑主板a55属于什么版型(主板a55和a58的区别)
笔记本闪屏怎么修(笔记本闪屏是怎么样子的)
6000预算电脑配置,6000预算笔记本配置
玩机技巧是什么软件(玩机技巧是干什么用的)
win10系统如何更新无线网卡的驱动版本(win10系统如何更新无线网卡的驱动器)