编辑人员注释:本文章由AzureCAT 云与企业工程组的高级项目经理Shaun Tinline-Jones
Chris Clayton 共同撰写。

云服务基础”应用程序也称作“CSFundamentals”,展示如何构建数据库支持的
Azure 服务。这包括描述日志记录、配置和数据访问的使用场景、实施体系结构及可复用组件。代码库旨在用于根据 Windows Azure 客户咨询团队进行的生产部署,深入挖掘在 Azure 上交付可伸缩的可用服务的最佳实践。

目前大多数公司都在努力推进其云计划,但特定解决方案的业务驱动因素各不相同,例如降低成本以及大幅提高敏捷性和扩大规模。当解决方案试图实现“云规模”时,“纵向可伸缩性”战略已被“横向可伸缩性”取代。前者通过升级硬件来提高容量,后者可增加共同完成某个特定任务的计算机数量。此权衡的一个绝佳示例是,选择创建具有许多提供相同网站内容的服务器的 Web 场,还是让单台机体试图处理负载。

大多数人从计算节点着手开始实施此横向可伸缩性计划,但忽略了更复杂且可能更重要的状态层级,例如关系数据库管理系统 (RDBMS) 和缓存。这些服务通常为 IO 密集型,且只有单个实例。在状态层级中实施横向可伸缩性的一个方法称作分区,它是指从逻辑上将 RDBMS 数据分成多个数据库,每个数据库通常采用相同的表结构。例如,一张员工信息表可以拆分到三个不同的数据库,每个数据库存储不同部门员工的信息。

分区的优势远不止体现在与容量相关的场景中。本文章将着重阐述在 Azure SQL 数据库平台中实施的且主要用于 OLTP 场景的 RDBMS 分区。分区数据库结构可带来优势的示例场景包括:

·   限制阀值或吞吐量限制的命中频率过高。

·   数据量太大(索引重新构建、备份等)。

·   一个数据库不可用影响所有用户(而单个分区则不会)。

·   数据库难以按需求向上和向下伸缩。

·   某些业务模型,例如多租户或软件即服务方案。

使用多租户数据库(如 Windows Azure SQL 数据库)作为服务解决方案时,通常会在各种条件下对客户端进行限制的服务质量 (QOS) 控制。限制通常会在资源压力攀升时发生。分区是一种帮助降低资源压力的关键战略,它可以将通常影响单台服务器的负载分散到多台服务器上,每台服务器均包含一个分区。例如,假定负载均匀分配,那么创建五个分区,就可以将每个数据库上的负载降低为大约百分之二十。

但任何东西随着功能变得更强大,也难免要做出一些牺牲。分区可能会增加多个关键领域的复杂性,因此需要更完善的计划。这些关键领域包括:

·   所有分区的标识列应保持全局唯一性,以防将来的业务需求要求减少分区数。如果所有分区的标识不唯一,两个分区合并时会发生冲突。

·   引用完整性无法引用其他分区中的行或者强制与这些行建立关系,因为它们属于独立的数据库。

·   应尽量避免跨分区查询,因为这要求对每个分区进行查询并合并结果。跨分区“扇出”查询不仅从性能角度来说成本极高,而且会增加为其提供支持的分区框架的复杂性。如果必须进行跨分区查询,则通常的策略是对每个分区进行异步查询。但是,有时同步查询方法可以对结果集大小进行更好的控制。

大多数情况下,分区是一个数据访问层 (DAL) 概念,为更高级别的复杂应用程序逻辑抽象化复杂的数据结构。

如何定义“租户”是您构建分区化体系结构时作出的最重要的决策之一。租户是必定位于相同分区上的最大唯一数据分类。限制在单个租户中执行的查询通常速度更快,因为这种查询无需在正常操作状态下执行扇出操作。影响对应租户定义决策的部分因素如下:

·   对标识符的更高级别应用程序代码的了解程度。

·   在此级别上执行大多数核心业务事务的能力。

·   在租户级别避免限制常规日常操作的能力。

为了更形象地说明这些概念和想法,Windows Azure 客户咨询团队在云服务基础 (CSF) 数据包 (http://code.msdn.microsoft.com/Cloud-Service-Fundamentals-4ca72649)
中构建了一个基本分区数据访问层 (DAL)。

CSF 中将租户定义为单个用户。促使选择此租户的因素包括:

·   大多数核心业务需求都不要求跨多用户查询。

·   一个分区不可用只会影响某组用户组,而其他用户可继续正常使用系统。单个分区上的用户数可以控制为企业可承受的数量。

对租户的定义和实施可确保不需要执行跨数据库事务。在图 1 中,我们将此数据集称为 shardlet,即数据模型事务边界。

图 1 - 数据模型事务边界

用户首次在会话中连接到数据库时,可以执行一系列简单查询,以了解是否有任何功能由于脱机分区而不可用。

为了简化 CSF 中演示的分区方法,我们决定创建一个分区集,这些分区拥有足以满足可预见将来的容量需求的存储空间。通过选择固定大小,就不再需要演示分区数量的增加和减少,也就无需执行租户迁移之类的操作。通过对租户名称执行哈希算法,可以生成一个整数,此 ID 可用来在“分区图”中查询匹配范围。CSF 使用基于范围的机制,其中一个特定分区(在“分区图”中捕获)将被分配一个这些数字的范围。

如果需要向分区集添加分区或从分区集中删除分区,租户需要在迁移到新分区之前变为不可用。由于此严重限制,因此要求在首次创建分区集时对分区集进行大幅超额配置,以缓解或消除执行复杂分区管理的需要。

此解决方案要求数据访问层 (DAL) 能检测到租户 ID,以确定租户在分区集中的位置。如果执行的查询包括不可用的分区,整个查询将失败。如果 DAL 不包括租户 ID,则必须查询所有分区,这会导致失败概率提高并使性能降低。

目前正在进行一些预备工作,以提供可演示更高级分区方法的更多示例代码。这些示例可改进以下领域:

·   被动式和主动式分区管理。

·   全局唯一性和标识管理。

·   分区集内分区之间的租户迁移。

·   分区集的扩展和收缩。

·   对无法检测租户的查询的改进。

总而言之,云服务基础示例代码是开始探讨基本分区概念的一个绝佳途径,而分区则是创建“云规模”应用程序的一个重要方法。

本文翻译自:

http://blogs.msdn.com/b/windowsazure/archive/2013/09/05/dal-sharding-of-rdbms.aspx

DAL – RDBMS 的分区的更多相关文章

  1. 从NoSQL到NewSQL,谈交易型分布式数据库建设要点

    在上一篇文章<从架构特点到功能缺陷,重新认识分析型分布式数据库>中,我们完成了对不同"分布式数据库"的横向分析,本文Ivan将讲述拆解的第二部分,会结合NoSQL与Ne ...

  2. 常用数据库高可用和分区解决方案(1) — MySQL篇

    在本文中我们将会讨论MySQL.Oracle.MongoDB.Redis以及Oceanbase数据库,大家可能会奇怪为什么看不到有名关系型数据库MSSQL.DB2或者有名NoSQL数据库Hbase.L ...

  3. CAP定理与RDBMS的ACID

    一.分布式领域CAP理论 CAP定理指在设计分布式系统时,一致性(Consistent).可用性(Availability).可靠性(分区容忍性Partition Tolerance)三个属性不可能同 ...

  4. CAP理论中, P(partition tolerance, 分区容错性)的合理解释

    在CAP理论中, 对partition tolerance分区容错性的解释一般指的是分布式网络中部分网络不可用时, 系统依然正常对外提供服务, 而传统的系统设计中往往将这个放在最后一位. 这篇文章对这 ...

  5. 如何选择RDBMS关系型数据库和Nosql非关系型数据库?

    RDBMS关系型数据库和Nosql非关系型数据库区别: 一.RDBMS是关系型数据库模式: 1.二维模式,由行列组成. 2.非常强调事务原子性,例如用户提出一个请求,DB完整的去执行,如果报错就全部回 ...

  6. Nosql和RDBMS的比较及解释

    概述 传统的关系型数据库以及数据仓库在面对大数据的处理时显得越来越力不从心.因为关系数据库管理系统 (RDBMS)的设计从未考虑过能够处理日益增长且格式多变的数据,以及访问数据并进行分析的用户需求呈爆 ...

  7. Hbase的基本原理(与HIVE的区别、数据结构模型、拓扑结构、水平分区原理、场景)

    重点:HBase的基本数据模型.拓扑结构.部署配置方法,并介绍通过命令行和编程方式使用HBase的基本方法. HBase:一种列存储模式与键值对相结合的NoSQL软件,但更多的是使用列存储模式,底层的 ...

  8. SQL Server表分区

    什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在 ...

  9. win7安装时,避免产生100m系统保留分区的办法

    在通过光盘或者U盘安装Win7操作系统时,在对新硬盘进行分区时,会自动产生100m的系统保留分区.对于有洁癖的人来说,这个不可见又删不掉的分区是个苦恼.下面介绍通过diskpart消灭保留分区的办法: ...

随机推荐

  1. Ubuntu安装Mysql及使用

    (1)在线安装:sudo apt-get install mysql-server(2)管理mysql: sudo /etc/init.d/mysql start===========>开启my ...

  2. Python进阶之map()、reduce()、filter()

    map()函数 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",&q ...

  3. GO语言搭建

    最近对GO语言产生了浓厚的兴趣.因为GO语言不仅仅可以开发桌面.web程序,最吸引我的是安卓大有往GO语言全方位靠拢的趋势,自家的系统还是用自家的语言开发比较靠谱. 用一句话来说:Go语言是谷歌200 ...

  4. LINUX常用命令--重定向、管道篇(四)

    一.Linux重定向 重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令.这部分涉及到的比较多的命令主要有: 涉及到的比较多的命令主要有: cat:连 ...

  5. 异构数据源海量数据交换工具-Taobao DataX 下载和使用

    DataX介绍 DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据处理系统(RDBMS/Hdfs/Local filesystem)之间的数据交换. 目前成熟的数据导入 ...

  6. Tempo 2.0

    Tempo 2.0 Tempo is an easy, intuitive JavaScript rendering engine that enables you to craft data tem ...

  7. Delphi中TWebBrowser中注入Js

    最近帮朋友做一个软件,其中要自动化某网页中的操作,最简的操作是调用自己写的代码. 代码如下: procedure TForm1.Button2Click(Sender: TObject);var  i ...

  8. poj2070简单题

    #include <stdio.h> #include <stdlib.h> int main() { float sped; int wei,sth; while(scanf ...

  9. How To Set Dark Theme in Visual Studio 2010

    Want to use the visual studio color theme editor to set the dark theme or other themes? Below shows ...

  10. 网页平面设计 CSS

    1.在html中引入css的方法 1.行内式 行内式即在标记的style属性中设定CSS样式,这种方式本质上没有体现出CSS的优势,因此不推荐使用. 例如:<h1 style="属性名 ...