shared-nothing:
数据以某种方式分区并分布在一组机器上,这意味着每台机器对其拥有的数据具有唯一的访问权限,也是有唯一的责任。因此数据时完全隔离的,每个节点对其特定子集具有完全权限。

shared-disk:
与shared-nothing相比,shared-disk的所有数据都可以冲所有集群节点访问。任何机器都可以读取或写入希望的任何数据部分。
如图:

理解writing的权衡

在shared-disk体系结构中保留数据时,可以对任何节点执行写入操作。如果节点1和节点2都尝试编写元组,那么为了确保与其他节点的一致性,管理系统必须使用基于磁盘的锁,或传达其意图将元组与集群中的其他节点锁定。这两种方法都提供可伸缩行问题。添加更多节点会增加锁定的争用,或者增加必须找到锁定协议的节点数。

进一步解释这一点,如下图:

shared-disk集群数据库包含PK=1和data=foo的记录。为了提高效率,两个节点都在内存中缓存了记录1的本地副本。然后客户端尝试更新记录1,以便foo变为bar。为了以一致的方式执行此操作,DBMS必须对可能具有高速缓存记录1的所有节点进行分布式锁定。当增加集群节点数量时,此类分布式锁定会变得越来越慢,因此会阻碍其可扩展性writing过程。

另一种确定锁定在磁盘上的机制很少在实践中完成,因为缓存对性能至关重要。

然而在shared-nothing不受到相同的分布式锁问题,,假设客户端被定向到正确的节点(也就是说客户端写入A,在图1中指示在节点1处写入),则shared-nothing都不会收到相同的分布式锁定问题的影响可以直接流到磁盘,并在内存中指定任何锁定中介。这是因为只有一台机器拥有任何单一数据的所有权,因此根据定义,只需要一个锁。

因此,在不增加锁定数据项的开销的情况下,无需共享就可以冲写入角度进行线性扩展,因为每个节点对其拥有的数据负全部责任。

但是,对于跨多节点上的数据事务性写入(即分布式两阶段提交),shared-nothing仍然必须执行分布式锁定。这些在可伸缩性上并不像上面的shared-disk缓存问题那么大,因为他们只跨越事务中涉及的节点(与跨越所有节点的缓存情况相对应),但他们同事增加了可伸缩性限制(与shared-disk相比,可能非常慢)。

因此,如果可以对数据进行分片并避免跨越不同分片的事务,那么对于需要高吞吐量写入的系统来说,无需共享即可,但是这样做的诀窍时找到正确的分区策略。例如,可以为在线银行系统分区数据,以便用户账户的所有信息都在同一台机器上,如果可以以避免分布式事务的方式对数据集进行分区,那么至少对于基于键的读写来说,线性可伸缩性就唾手可得了。

对于,shared-disk的计数器也可以使用分区。仅仅因为磁盘时共享的,并不意味着不能使用服务于不同分区的不同界定啊对数据进行逻辑分区。假设可以建立自己的体系结构,以便将写请求路由到正确的机器上,因为这总策略将减少正在发生的锁(或block)传递的数量(正式优化oracle rac等数据的方式)。

shared-disk可以实现子啊啊shared-nothing模式下配置。但区别仅在于数据的物理位置。shared-disk始终以某种方式链接到网络,而不是本地连接。因此虽然远程磁盘可以提供相对较高的吞吐量和良好的随机IO性能,通常成本较高。

shared-disk架构时写限制,其中多个写节点必须围绕集群协调他们的锁。
shared-nothing机构时写限制,其中写入跨越多个分区,需要分布式两阶段提交。

数据检索

shared-disk的缺陷:

1、资源匮乏,最明显的时SAN/NAS驱动上的磁盘争用。shared-disk意味着:所有计算机共享相同的磁盘阵列,并在某种程度上共享相同的互连。幸运的是,通过分区可以缓解大型shared-disk系统中的磁盘争用。共享磁盘子系统中的数据通常按其使用模式进行划分(通常将表移动到后备磁盘阵列的不同部分)。

2、缓存效率低的问题。shared-disk系统中的每台计算机都可能涉及整个数据集(因此需要缓存)。这降低了高速缓存的效率,因为高速缓存未命中的可能行更大。而shared-nothing每个机器只需要缓存它自己拥有的数据子集,因此缓存更加有效。

shared-nothing的缺陷:

如果查询是自给自足的,则SN工作得非常好 - 如果每个节点都可以完成处理的“部分”而不需要来自任何其他节点的数据。但是,不可避免地会出现这样的用例,即来自多个节点的数据必须以某种方式组合在一起或以某种方式连接。其含义通常是,可能不包括在最终结果中的数据从一台机器运送到另一台机器。这种在机器之间传输数据以“加入”的需求会对整体查询性能产生重大影响。

所以现实是需要数据传输的查询数量将取决于用例和分区策略。因此,许多无共享解决方案建议使用快速10GE网络。

并发性
许多键值存储使用分片和SN来提供非常高的并发。这是通过将用户请求通过分片键路由到具有所需数据的单台机器上来实现的。结果时存储在大型并发用户群中提供极高水兵的读写吞吐量。这种模式通过NOSQL在大型web应用程序中使用。

必须注意的是:此模式的可伸缩性仅适用于密钥访问。不适用于shared-nothing系统中的一般处理。任何未明确使用主键的请求都必须广播到所有计算机或分区。对不考虑主键的问题的可伸缩性提出了限制。

因此,重要重申:对于基于密钥的访问,shared-nothing只能时线性可扩展的。二级索引的使用总是导致每个节点都被查阅。这限制了可伸缩性,当然旧可以服务的并发请求数而言。这是许多分布式键值存储坚持非常简单的KV存储方式的原因之一。

shared-nothing减少了每台机器存储的数据量,因此总数据量可以更高,或者相反,随着每个查询的平均数据集减少,每个查询将更快。这就是SN为大数据系统(HBase、Map Reduce、cassandra等)所青睐

随着集群的扩展,shared-disk体系结构中的读取可能会遇到资源不足问题和效率较低的缓存。shared-nothing架构更大规模的潜力,但是这可能会收到必须击中所有机器的查询障碍,如果必须跨机器发送非结果数据集,会影响查询速度。

出自:http://www.benstopford.com/2009/11/24/understanding-the-shared-nothing-architecture/

shared-disk与shared-nothing区别相关推荐

  1. Shared Nothing、Shared Everthting、Shared Disk

    数据库构架设计中主要有Shared Everthting.Shared Nothing.和Shared Disk: 1.Shared Everything:一般是针对单个主机,完全透明共享CPU/ME ...

  2. Shared Everything和Shared-Nothing区别

    数据库构架设计中主要有Shared Everthting.Shared Nothing.和Shared Disk. Shared Everthting 一般是针对单个主机,完全透明共享CPU/MEMO ...

  3. MPP数据库简介及架构分析

    目录 什么是MPP? 特性 并行处理 超大规模 数据仓库真正适合什么 典型的分析工作量 数据集中化 线性可伸缩性 MPP架构技术特性 数据库架构分析 Shared Everything Shared ...

  4. 循序渐进:Oracle 12c新特性Sharding技术解读

    作者简介 邝志辉 4年 ORACLE SSC(方案解决中心)高级工程师工作经验,6年 ORACLE Exadata 一体机产品维护经验:8年大型数据库运维经验,曾负责华为.工商银行.广东移动.中国信托 ...

  5. 一文解析数据库基础设施的现状与挑战

    数据库基础设施现状 信息化系统目前已经是支撑现代化企业运营的重要组成部分,在企业内部存在几十甚至上百个不同的 IT 应用系统,支撑企业的服务渠道.客户营销.产品业务处理.经营管理和决策等各方面,大多数 ...

  6. 大数据----Hadoop与数据仓库

    Hadoop与数据仓库 传统数据仓库一般建立在Oracle.MySQL这样的关系数据库系统之上.关系数据库主要的问题是不好扩展,但Hadoop的数据和计算都是分布式的,可以处理海量数量. Hadoop ...

  7. 三种数据库架构的介绍

    从数据库架构设计的角度,主要有三种,Shared Everything.Shared Disk以及Shared Nothing. 1. Shared Everything 一般指的是单个主机的环境,完 ...

  8. Oracle RAC 集群技术概念综述

    1.集群技术 #集群:指的是一组相互独立的,通过高速网络互联的计算机,构成了一个组,并以单一系统的模式加以管理. #一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置用于提高可用性和可缩放性 ...

  9. Load-time relocation of shared libraries

    E原文地址:http://eli.thegreenplace.net/2011/08/25/load-time-relocation-of-shared-libraries/ This article ...

  10. ABAP Memory/SAP Memory/Shared Buffer/Database

    ABAP 提供了IMPORT/EXPORT 和 SET / GET PARAMETER 语句,可对用户内存/服务器内存/数据库进行存储和访问.不过可能很多人对此还不是很了解,下面我们通过实例来测试它们 ...

最新文章

  1. 机器学习PAL数据可视化
  2. 快手开源斗地主AI,入选ICML,能否干得过「冠军」柯洁?
  3. linux各版本使用率,Windows10系统各版本份额出炉:十月更新占有率不高。
  4. 清华计算机学院吴建平,吴建平
  5. java http的get,post请求
  6. Python (schedule库)简单使用
  7. ajax请求url python,ajax请求方式
  8. Mysql笔记——DQL
  9. CCCC-GPLT L1-039. 古风排版 团体程序设计天梯赛
  10. echarts x轴加箭头,ECharts X轴(xAxis)
  11. Entity Framework Core 7.0 未来规划
  12. 写软件的需求分析全方位攻略
  13. 广东2022年上半年系统集成项目管理工程师上午真题及答案解析
  14. 麻将游戏简介firefly游戏框架介绍
  15. 微信小程序实现收藏功能
  16. linux暂停命令 pause_Linux-pause(2)的使用(day10)
  17. Infopath2007表单转化成word2007
  18. 系统运维工程师30岁学python_一名Linux系统运维工程师的自述
  19. 微信小程序的wx:for和vue的v-for
  20. 数据科学和人工智能技术笔记 十四、K 最近邻

热门文章

  1. wps打开时服务器不能响应,我的WPS不能启动了,双击打不开
  2. Dockerfile创建镜像文件
  3. Android 中的dm-verity
  4. 西班牙语言,字母c的发音规则,西班牙语发音入门:塞音 P、B/V、W;;T、D;C/Q、G...
  5. Exchange2016 更换见证服务器
  6. react-router v6 路由统一管理及路由拦截方案
  7. Linux查看U盘的Vid,CheckUDisk(查看USB的VID/PID/厂商信息)v5.4
  8. web网页设计与制作-html+css+js实现企业官网展示
  9. UCHome安装中遇到的问题
  10. Unity 游戏框架搭建 2019 (四十七) 集成到 MonoBehaviourSimplify