Microsoft SQL Azure论文笔记
Microsoft SQL Azure
本笔记出自论文《Extreme Scale with Full SQL Language Support in Microsoft SQL Azure
》和一些网络资料。论文在开头就提到了,很多互联网行业做出的存储产品如Google Bigtable、Yahoo PNUTS、Amazon Dynamo等,其提供的ACID事务、一致性保证是和传统的关系型数据库有很大区别的。互联网行业通过其上层业务的抽象,将一致性及事务限制在特定的consistency domain
中,从而支持大规模的存储需求。如Bigtable的EG,以及本文将要讲到的partition key。
Azure SQL的设计初衷,就是为了在享受大规模分布式存储的有点的同时,仍能保有传统关系型数据库的大部分特性。
基本架构
global shard map manager
:也叫global partition manager
用来存储所有数据的shard信息,这个shard我们后面会讲到Database Engine
:一个个单独鱼腥SQL Server的物理进程,他们之间相互隔离Protocal Gateway
:协议网关负责将用户的请求转发到对应的replica上Distributed Fabric
:分布式基础组件,用以维护节点状态,选主等等。
数据模型
Azure SQL将数据划分为多个分区,通过限制事务只能在一个分区执行来规避分布式事务。集群数据多副本采用Quorum,每份数据都会有primary replica。
Azure SQL通过表(这里只广义上的表,既可以值关系型数据库中的表table,也可以指存储Blob,Queues等)的某key作为索引,我们称之为Partition key
。将表中的数据打散到后端不同存储节点上。只要partition key
相同,则数据会分布在同一台服务器上。
通过这种方式,同一partition key
的数据shard总是分布在一台服务器上,Azure SQL可以天生很好的支持READ COMMITTED
隔离级别,但是如果想使用更高的隔离级别,比如REPEATABLE READ
,就必须要持有垮shard的锁,这会使性能下降很多。
另外Azure SQL还支持快照隔离
复制
Azure SQL采用Quorum协议,所有的sql语句经过主副本下发,三副本的数据至少成功两副本才能返回,主副本在发送事务的时候会带上事务提交顺序号(Commit Sequence Number CSN),从而作为回复和回滚的依据。
如果节点发生了故障,之前讲到的global partition manager
会执行故障分区的Reconfigration
,首先它会选择一台负载较轻的机器增加到当前副本集中,拷贝数据,然后重新配置Quorum。由于使用了Quorum,所以数据在集群中的复制优先级也不一样(有的副本复制了三份,有的只复制了2份),优先级也是由global partition manager
来控制的。
显而易见的是,集群负载较大时,primary replica会成为热点,这时global partition manager
会从三副本中重新选择一个副本,提升为主primary replica。由于不涉及副本数据的迁移,这种负载均衡较为迅速。
多租户
Azure SQL是面向多租户的云数据库,因此要限制客户使用的系统资源:
- 系统资源的监控与分配,包括CPU、内存、存储QOS等等
- SQL数据库的容量限制,如果超过容量则不能写入。
- 后端存储节点
Database Engine
的资源分配,不能写满后端存储节点。
参考链接
- Azure SQL Data partitioning strategies
- SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
- Distributed Storage: How SQL Azure Replicas Work
Microsoft SQL Azure论文笔记相关推荐
- Microsoft SQL Server笔记整理
谨启: 程序员 / 媛同学你好,我是CSDN博主WanAkiko,很幸运我的这篇博文能够被你发现,也很高兴你能静下心来阅读我的这段话. 学习编程不一定非要上名企拿高薪方为功成名就.我们更该注重的是学习 ...
- SQL Azure(十) SQL Azure Data Sync数据同步功能(上)
首先举个简单的例子:如果某个大型生产企业包含有2个子系统: - 有一个<产品生产系统>放在企业内部部署,在企业内部办公的员工(生产员工)都可以通过内网来访问该系统.后台的数据库是局域网内的 ...
- SQL Azure十月份更新
SQL Server Services 已经改名为 Microsoft SQL Azure (阿祖),SQL 数据服务改名为 Microsoft SQL Azure Database,增加了一个熟悉的 ...
- 使用 ADO.NET连接SQL Azure
使用ADO.NET连接Microsoft SQL Azure Database 现在已经变得非常容易,这篇文章提供一个示例控制台程序来描述如何连接到Azure 的数据库,中间还夹杂着几个我认为连接Mi ...
- Windows Azure真实案例:NeoGeo New Media --SQL Azure提高数字媒体资产解决方案的拓展性...
公告 :本博客为微软云计算中文博客 的镜像博客. 部分文章因为博客兼容性问题 ,会影响阅读体验 .如遇此情况,请访问 原博客 . NeoGeo New Media 在一个持续制 ...
- Windows Azure真实案例:NeoGeo New Media --SQL Azure提高数字媒体资产解决方案的拓展性
公告 :本博客为微软云计算中文博客 的镜像博客. 部分文章因为博客兼容性问题 ,会影响阅读体验 .如遇此情况,请访问 原博客 . NeoGeo New Media 在一个持续制 ...
- 《Microsoft Sql server 2008 Internals》读书笔记--第九章Plan Caching and Recompilation(10)
<Microsoft Sql server 2008 Internals>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397 ...
- 《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(5)
<Microsoft Sql server 2008 Internals>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397 ...
- 《Microsoft Sql server 2008 Internal》读书笔记--第八章The Query Optimizer(1)
<Microsoft Sql server 2008 Interna>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397.h ...
最新文章
- [DevOps] 认识一下
- rmd文件怎么转换html文件,提取.Rmd文件的html依赖项(包含htmlwidgets)
- 我用YOLOX露了一手,记录一下模型部署、优化及训练的实现全过程
- centos安装Flash插件
- 创建linux目录,Linux目录的创建方法
- Effective Java之在细节消息中包含能捕获失败的消息(六十三)
- 一:包装好和吹出去 二:三国心得
- 基于Redis、Storm的实时数据查询实践
- vscode 日志文件_vscode 日志文件_Visual Studio Code(VS code)介绍
- 微信小程序支付---详解(python)
- PDF虚拟打印机使用教程(附PDF虚拟打印机下载)
- 吸烟 打电话 行为 图片 数据集
- 邮箱的正确格式是什么,如何发送一封规范的邮件
- 大小写转换(大小写转换键是哪个键)
- 清除Zabbix的历史记录
- 微信视频号如何流量变现赚钱呢?
- 社群团购到底有哪些优势?为什么社群团购很容易打造爆品?
- 数组去重——将数组中重复的元素去掉
- 使用JS实现前端缓存
- [Vue-Treeselect Warning] Unloaded branch node detected. “loadOptions“ prop is required to load its c
热门文章
- 静态网站任何优化怎么设置_网站关键词怎么设置对网站推广优化有利?
- sscanf()函数的用法
- POJ3197(连分数表示)
- 3_5 ResponsibilityChainMode 责任链模式
- 抖音直播间弹幕protocbuf分析
- 精致全景图 | 程序是如何运行起来的
- 混沌系列 | 其实制造“假死”很容易
- 硬核图解!断网了,还能ping通 127.0.0.1 吗?为什么?
- Python中的匿名函数和函数式编程
- 没有他,就没有我们现在的WebRTC