share-nothing、share-memory、share-disk的原理

本文深入探讨并行数据库中的Share-Nothing架构,对比Shared-Memory和Shared-Disk,阐述其如何减少资源竞争,提升数据库性能及扩展性。适用于高并发场景下的数据库优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先介绍share nothing概念。最早接触它是在 DataBaseManagentSystem一书的并行数据库章节中。

  并行数据库要求尽可能的去并行执行数据库操作,从而提高性能。在并行计算体系结构实现中有很多可选的体系结构。包括:

  share-memory:多个cpu共享同一片内存,cpu之间通过内部通讯机制(interconnection network)进行通讯;

  share-disk  : 每一个cpu使用自己的私有内存区域,通过内部通讯机制直接访问所有磁盘系统。

  Share-nothing: 每一个cpu都有私有内存区域和私有磁盘空间,而且2个cpu不能访问相同磁盘空间,cpu之间的通讯通过网络连接。

 

3种体系结构如下图:

                Share disk                                     share nothing                                  share memory 

  shared memory 体系结构的cpu之间通过主内存进行通讯,具有很高的效率;但当更多的cpu被添加到主机上时,内存竞争contetion就成为瓶颈,cpu越多,瓶颈越 厉害。Shared disk也存在同样问题,因为磁盘系统由 Interconnection Network 连接在一起。

注:对于shared memory来说,在较少的processor情况下,shared-memery还是最好的选择

  Shared memory和shared disk的基本问题是interference:当添加更多的cpu,系统反而减慢,因为增加了对内存访问(memroy access)和网络带宽(network bandwidth)的竞争。这样shared nothing体系得到了广泛的推广。

  Shared nothing体系是数据库稳定增长,当随着事务数量不断增加,增加额外的cpu和主存就可以保证每个事务处理时间不变。

  总的来说,shared nothing降低了竞争资源的等待时间,从而提高了性能。反过来,如果一个数据库应用系统要获得良好的可扩展的性能,它从设计和优化上就要考虑 shared nothing体系结构。Share nothing means few contention.它在oracle数据库设计和优化上有很多相同之处。

  Share nothing 对数据库应用主要体现在多用户并行访问系统时候,优化数据库操作的response time上。如果数据库操作能够顺利获得所需要的资源,不发生等待事件,自然可以减少response time. 同时也体现在操作尽量少占用资源上,避免浪费时间在无用功上。

  如Sequence的实现方式。如果使用Oracle Sequence ,oracle可以缓存sequence,这样最小的降低多个Session获得唯一序列的竞争。如果设计为实体化表存储sequence value方式,每次获得sequence value都需要锁住纪录,这样产生了严重资源竞争,导致hot block.同时增加了Response time.

  如存储过 程的使用,也体现着share nothing原理。将多个sql 封装在存储过程中,避免了不必要的SQL*Net message from/to client, SQL*Net data from/to client 等等待事件。这体现了设计良好的应用使用最少的资源完成工作。

  如在优化sql/表结构设计上,share nothing意味着降低查询的执行成本—— I/O和cpu usage.这主要体现在降低consistent gets上。

  在物理设计上,share nothing体现在避免磁盘热点块,协调进程对磁盘的竞争,平衡磁盘利用率上。

  Oracle自身设计上很多都体现了Share Nothing特性;在设计可扩展的数据库应用的时候也要注意到这点。

### Share-Nothing 架构概念 Share-Nothing架构是一种分布式计算模型,在这种模型中,各个节点拥有独立的内存和磁盘资源,彼此之间不共享任何物理硬件资源[^2]。这意味着每个处理单元都是完全自治的,具有自己的CPU、内存以及存储设备。 #### 关键特点: - **无资源共享**:各服务器间不存在任何形式的数据或缓存共享机制; - **松耦合结构**:组件之间的依赖关系最小化,便于横向扩展; - **高可用性和容错能力**:单个节点故障不会影响其他部分正常运作; ### 原理说明 在这种体系下,数据被分割成多个片段并分布到不同的机器上去保存和管理。当接收到查询请求时,会将任务分发给相应的节点去执行局部运算,最后汇总结果返回给客户端。由于没有中心化的控制点来协调全局活动,因此需要采用特定的技术手段如一致性哈希算法等确保系统的稳定运行和服务质量。 ### 应用场景 对于那些对性能有极高要求的应用程序来说,Share-Nothing架构提供了良好的解决方案。特别是在面对海量并发访问的情况下,能够有效缓解传统集中式数据库面临的瓶颈问题。具体实例包括但不限于以下几个方面: - 大规模在线交易处理系统(OLTP) - 数据仓库分析平台 - 社交媒体网站后台支撑环境 - 实时广告投放引擎 通过这种方式可以实现水平方向上的线性增长,即随着业务量增加而简单地添加更多廉价的商品级计算机即可满足需求,从而降低了总体成本开销的同时提高了整体效率。 ```sql -- 示例SQL语句展示如何在一个基于Share-Nothing架构下的多租户环境中创建表 CREATE TABLE tenant_data ( id INT NOT NULL, tenant_id VARCHAR(36), data_value TEXT, PRIMARY KEY (id, tenant_id) ); PARTITION BY LIST COLUMNS(tenant_id)( PARTITION p0 VALUES IN ('tenant_001', 'tenant_002'), PARTITION p1 VALUES IN ('tenant_003', 'tenant_004') ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值