此论文描述了在无共享架构的多处理器机器上的数据库系统的数据冗余分布方法。该方法提高了系统的可用性,同时在单节点故障的情况下,可以很好的实现负载均衡。以下是论文的一些摘要,详细可以参见论文原文
 

Tandem’s Mirrored Disks Architecture

 
每个disk 分区都有一份copy
每个disk对应两个IO controller
每个controller对应两个Processors
单个disk fail只会影响读,不影响写
单个processor fail 对 cup bound应用影响 
 
Teradata’s Data Clustering Scheme
   每个分片通过key hash分布到各个磁盘。
   每个分片有主分片和备分片
   每个磁盘的备分片平均分配到其它磁盘,当某个磁盘故障时,其它磁盘可以均摊故障磁盘的压力。但是这种分布下,任意两个磁盘同时故障都会导致数据不可用。
   只支持hash分区不支持range和round-robin.
 RAID’s Data Storage Scheme
 
 
  raid5,奇偶校验信息平均分布到各个磁盘,没次写入都要读取每个磁盘,算出校验信息。
  读取只需要读相应的盘,但当出现一个坏盘是,读取需要读每个盘来恢复构造数据。因此raid坏盘是读取会有明显影响。 
 
Chained Declustering Strategy
 
 数据分片算法如下:
    Assume that there are a total of M disks numbered from 1 to M. For every relation R, the i-th fragment of the primary copy is stored on the {[i-1+C(R)] mod M + 1}-th disk drive, and the i-th ragment of the backup copy will be stored on the {[i+C(R)] mod M + 1}-th disk drive;insuring that the primary and backup fragments are placed on different disk drives.
 
    relation-cluster:如果节点数过多可以分组为多个relation-cluster;
    chain-clusters:如果 relation-cluster中的节点数过多还可以将其分组为多个chain-cluster,单个节点故障后,在故障节点所在的chain-cluster内负载均衡。
 
   下图8个节点组成一个relation-cluster,包含两个chain-cluster,每个chain-cluster包含4个节点
 Availability and Load Balancing
    集群中磁盘节点数越多,任意两个磁盘同时故障的概率越大。Chained Decluster分组后,只需计算组内的两个磁盘同时故障的概率,故障大大降低。
 
Responsible Range and Extent Map
 
    active fragment table:每个节点都有主备数据,active fragment table用来就记录主备数据分别那部分数据用于当前访问。正常情况只访问主数据,此时active fragment table记录的只是主数据;只有当节点故障才访问备数据,此时active fragment table记录了主备数据的访问分配情况。 
 
    Responsible Range:对于range分区指定边界范围
                       对于hash分区指定fold范围
 
    Extent Map:对于heap组织的数据指定extent的物理地址范围
 
Load Balancing Algorithm
   Changing the Selection Predicate:
   Adding a Selection Predicate
   Using the Extent Map
   文中举了三个例子,其中对于hash分区例子,通过分区值得到主数据所在节点,然后通过active fragment table确定访问主数据节点还是备数据节点。
 
Availability and Performance
 
 
 
 一些思考: 
    两个节点fail(不是逻辑相邻的节点)后如何分布:负载将不一定均衡,4节点是均衡的,5节点不军衡(1-5节点,2,4同时故障,3节点作为2和4的相邻节点,其主备数据都要完整访问,占整个数据的2/5,而实际上每个节点占1/3才平均)2/N=1/N-2=>N=4 故障节点只相邻一个节点情况下只有4节点是平衡的。其它情况6个节点2个故障也可以达到平衡。
   active fragment table的维护代价:每个表可能有多个active fragment table 
   负载均衡算法只考虑读的情况,写本身是均衡的。均衡算法跟原始数据分布是否均匀有关,而且4.4的表格中还列了些均衡不可用的情况。 
   如何增加节点 ?
 
参考:  

H.-I. Hsiao and D. J. DeWitt, “Chained declustering: A new availability strategy for multiprocessor database machines,”in roceedings of Sixth International Conference on Data Engineering (ICDE), pp. 456–465,Los Angeles, CA, November 1990.

Chained Declustering的更多相关文章

  1. 利用jquery.chained.remote实现多级级联

    多级级联一直是前端比较烦人的一个功能,本次用jquery的插件,chained.remote实现多级级联. 应用场景:至少有二个下拉框,下拉框的个数不定. 应用步骤: 1.引入js文件,当然这个插件需 ...

  2. Chained Exceptions in Java

    1. Overview In this article, we’ll have a very brief look at what Exception is and go in depth about ...

  3. [每天解决一问题系列 - 0005] WiX Burn 如何校验chained package的合法性

    问题描述: 项目中使用Wix burn打包,内部包含了多个MSI.有时候会遇到如下错误 Error 0x80091007: Failed to verify hash of payload: Setu ...

  4. PyCharm黄色波浪线提示: Simplify chained comparison

    译过来就是,可简化连锁比较: case 1 if a >= 0 and a <= 9: 1 可简化为: if 0 <= a <= 9: 1 就像我们的数学表达式一样.显然这种情 ...

  5. This inspection highlights chained comparisons that can be simplified.

    https://stackoverflow.com/questions/26502775/pycharm-simplify-chained-comparison In Python you can & ...

  6. chained get value from nested json

    static getValueByKey(o, p, defaultValue = false) { return p.split('.').reduce((r, k) => { if (typ ...

  7. MVVM大比拼之knockout.js源码精析

    简介 本文主要对源码和内部机制做较深如的分析,基础部分请参阅官网文档. knockout.js (以下简称 ko )是最早将 MVVM 引入到前端的重要功臣之一.目前版本已更新到 3 .相比同类主要有 ...

  8. JavaScript资源大全中文版(Awesome最新版)

    Awesome系列的JavaScript资源整理.awesome-javascript是sorrycc发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架.运行器.QA.MVC框架和库.模 ...

  9. PHP的学习--新特性

    最近做的项目使用了 php7,但感觉有很多新特性没有用起来.就想总结一下,一些可能会用到的新特性.之前使用的环境是 php5.4,所有也会有 php5.5 和 php5.6 的特性总结进来,这里只列出 ...

随机推荐

  1. Error:Could not determine the class-path for interface com.android.builder.model.AndroidProject.

    Android Studio导入Eclipse项目报错Error:Could not determine the class-path for interface com.android.builde ...

  2. 全网最详细的Hadoop HA集群启动后,两个namenode都是active的解决办法(图文详解)

    不多说,直接上干货! 这个问题,跟 全网最详细的Hadoop HA集群启动后,两个namenode都是standby的解决办法(图文详解) 是大同小异. 欢迎大家,加入我的微信公众号:大数据躺过的坑  ...

  3. 复刻smartbits的国产网络测试工具minismb-如何测试协议限速

    复刻smartbits的网络性能测试工具MiniSMB,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具测试任何ip网络设备的端口吞吐率,带宽,并发连接数和最 ...

  4. offsetTop、offsetLeft、offsetWidth、offsetHeight的用法

    假设 obj 为某个 HTML 控件. obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上侧位置,整型,单位像素. obj.offsetLeft ...

  5. es6学习笔记11--Proxy和Reflect

    Proxy概述 Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程. Proxy可以理解成,在目标对象之前 ...

  6. jQuery显示SQL存储过程自定义异常信息

    学习MVC应用开发,改变了Insus.NET以前ASP.NET的开发习惯,以前开发均是服务器端,而现在使用jQuery的Ajax在实现.想到与考虑了很多问题,也遇上很多问题,一些解决了,一些还留下,望 ...

  7. Infopath 2010 接收SQL Server数据

    Infopath2010为我们提供了多种接收数据的方式,今天我来讲讲里面其中的一种直接读取SQL Server数据库表数据方法(高阶者的下面可以略省,只针对入门者). 1.选择数据库(SQL) 2.选 ...

  8. git 使用 VisualStudio 比较分支更改

    有时候需要比较两个分支的不同,这时如果提交到 github ,那么默认就可以看到.但是这时因为没有ide的高亮或者其他的功能,看起来觉得不好 默认的 VisualStudio 比较文件比 github ...

  9. 无责任Windows Azure SDK .NET开发入门篇(一):开发前准备工作

    Windows Azure开发前准备工作 什么是 Azure SDK for .NET?微软官方告诉我们:Azure SDK for .NET 是一套应用程序,其中包括 Visual Studio 工 ...

  10. [日常] Go语言圣经-错误,函数值习题

    Go语言圣经-错误 1.panic异常.panic是来自被调函数的信号,表示发生了某个已知的bug 2.任何进行I/O操作的函数都会面临出现错误的可能 3.错误是软件包API和应用程序用户界面的一个重 ...