DAL – RDBMS 的分区
编辑人员注释:本文章由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 的分区的更多相关文章
- 从NoSQL到NewSQL,谈交易型分布式数据库建设要点
在上一篇文章<从架构特点到功能缺陷,重新认识分析型分布式数据库>中,我们完成了对不同"分布式数据库"的横向分析,本文Ivan将讲述拆解的第二部分,会结合NoSQL与Ne ...
- 常用数据库高可用和分区解决方案(1) — MySQL篇
在本文中我们将会讨论MySQL.Oracle.MongoDB.Redis以及Oceanbase数据库,大家可能会奇怪为什么看不到有名关系型数据库MSSQL.DB2或者有名NoSQL数据库Hbase.L ...
- CAP定理与RDBMS的ACID
一.分布式领域CAP理论 CAP定理指在设计分布式系统时,一致性(Consistent).可用性(Availability).可靠性(分区容忍性Partition Tolerance)三个属性不可能同 ...
- CAP理论中, P(partition tolerance, 分区容错性)的合理解释
在CAP理论中, 对partition tolerance分区容错性的解释一般指的是分布式网络中部分网络不可用时, 系统依然正常对外提供服务, 而传统的系统设计中往往将这个放在最后一位. 这篇文章对这 ...
- 如何选择RDBMS关系型数据库和Nosql非关系型数据库?
RDBMS关系型数据库和Nosql非关系型数据库区别: 一.RDBMS是关系型数据库模式: 1.二维模式,由行列组成. 2.非常强调事务原子性,例如用户提出一个请求,DB完整的去执行,如果报错就全部回 ...
- Nosql和RDBMS的比较及解释
概述 传统的关系型数据库以及数据仓库在面对大数据的处理时显得越来越力不从心.因为关系数据库管理系统 (RDBMS)的设计从未考虑过能够处理日益增长且格式多变的数据,以及访问数据并进行分析的用户需求呈爆 ...
- Hbase的基本原理(与HIVE的区别、数据结构模型、拓扑结构、水平分区原理、场景)
重点:HBase的基本数据模型.拓扑结构.部署配置方法,并介绍通过命令行和编程方式使用HBase的基本方法. HBase:一种列存储模式与键值对相结合的NoSQL软件,但更多的是使用列存储模式,底层的 ...
- SQL Server表分区
什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在 ...
- win7安装时,避免产生100m系统保留分区的办法
在通过光盘或者U盘安装Win7操作系统时,在对新硬盘进行分区时,会自动产生100m的系统保留分区.对于有洁癖的人来说,这个不可见又删不掉的分区是个苦恼.下面介绍通过diskpart消灭保留分区的办法: ...
随机推荐
- WGS84、GCJ-02(火星坐标)、百度坐标,Web墨卡托坐标
GCJ-02坐标系统(火星坐标)简介:http://blog.csdn.net/giswens/article/details/8775121(存档:http://mapbd.com/cms/2012 ...
- php不同形式的实现a-z的26个字母的输出
直接上代码: for($i=ord('a'), $n=ord('z'); $i<=$n; $i++){ echo chr($i),PHP_EOL; } echo PHP_EOL; $char = ...
- centos之tomcat安装
1.环境说明 系统:centos, 2.6.32-573.el6.x86_64; tomcat: apache-tomcat-7.0.68 2.下载文件并上传 下载apache-tom ...
- Cocos2d-x 安装教程for mac(Xcode)
cocos2d v3.x 版本出来后,从配置安装到创建项目都是命令行,下面简单说一下. 1. 下载地址 http://cn.cocos2d-x.org/download/ (虽然没有标明 for ...
- SQL Server 表压缩
表压缩有三个选项 1.page 2.row 3.none ----------------------------------------------------------------------- ...
- Ring3下干净的强行删除文件
在某公司实习完,再次回到寝室.还是在学校好. 实习期间的给我的任务就是为项目添加一个强行删除的模块. 背景是硬盘上存储空间不够时,需要删掉老的文件,如果这时后,老的文件被打开了,没有关掉,就无法删除. ...
- HDU 5727 Necklace(二分图匹配)
[题目链接]http://acm.hdu.edu.cn/showproblem.php?pid=5727 [题目大意] 现在有n颗阴珠子和n颗阳珠子,将它们阴阳相间圆排列构成一个环,已知有些阴珠子和阳 ...
- 10.30 NFLS-NOIP模拟赛 解题报告
总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...
- Linux编程---套接字
网络相关的东西差点儿都是建立在套接字之上.所以这个内容对于程序猿来说还是蛮重要的啊. 事实上套接字也就是一个特殊的设备文件而已,我始终不能明确为什么要叫套接字.这么个奇怪的名字.只是还是就这样算了吧. ...
- RDIFramework.NET(.NET快速信息化系统开发框架) Web版介绍
RDIFramework.NET(.NET快速信息化系统开发框架) Web版介绍 B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户 ...