Microsoft SQL Azure

本笔记出自论文《Extreme Scale with Full SQL Language Support in Microsoft SQL Azure》和一些网络资料。论文在开头就提到了,很多互联网行业做出的存储产品如Google BigtableYahoo PNUTSAmazon Dynamo等,其提供的ACID事务、一致性保证是和传统的关系型数据库有很大区别的。互联网行业通过其上层业务的抽象,将一致性及事务限制在特定的consistency domain中,从而支持大规模的存储需求。如Bigtable的EG,以及本文将要讲到的partition key。

Azure SQL的设计初衷,就是为了在享受大规模分布式存储的有点的同时,仍能保有传统关系型数据库的大部分特性。

基本架构

  1. global shard map manager:也叫global partition manager用来存储所有数据的shard信息,这个shard我们后面会讲到
  2. Database Engine:一个个单独鱼腥SQL Server的物理进程,他们之间相互隔离
  3. Protocal Gateway:协议网关负责将用户的请求转发到对应的replica上
  4. 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是面向多租户的云数据库,因此要限制客户使用的系统资源:

  1. 系统资源的监控与分配,包括CPU、内存、存储QOS等等
  2. SQL数据库的容量限制,如果超过容量则不能写入。
  3. 后端存储节点Database Engine的资源分配,不能写满后端存储节点。

参考链接

  1. Azure SQL Data partitioning strategies
  2. SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
  3. Distributed Storage: How SQL Azure Replicas Work

Microsoft SQL Azure论文笔记相关推荐

  1. Microsoft SQL Server笔记整理

    谨启: 程序员 / 媛同学你好,我是CSDN博主WanAkiko,很幸运我的这篇博文能够被你发现,也很高兴你能静下心来阅读我的这段话. 学习编程不一定非要上名企拿高薪方为功成名就.我们更该注重的是学习 ...

  2. SQL Azure(十) SQL Azure Data Sync数据同步功能(上)

    首先举个简单的例子:如果某个大型生产企业包含有2个子系统: - 有一个<产品生产系统>放在企业内部部署,在企业内部办公的员工(生产员工)都可以通过内网来访问该系统.后台的数据库是局域网内的 ...

  3. SQL Azure十月份更新

    SQL Server Services 已经改名为 Microsoft SQL Azure (阿祖),SQL 数据服务改名为 Microsoft SQL Azure Database,增加了一个熟悉的 ...

  4. 使用 ADO.NET连接SQL Azure

    使用ADO.NET连接Microsoft SQL Azure Database 现在已经变得非常容易,这篇文章提供一个示例控制台程序来描述如何连接到Azure 的数据库,中间还夹杂着几个我认为连接Mi ...

  5. Windows Azure真实案例:NeoGeo New Media --SQL Azure提高数字媒体资产解决方案的拓展性...

    公告    :本博客为微软云计算中文博客  的镜像博客.   部分文章因为博客兼容性问题  ,会影响阅读体验  .如遇此情况,请访问  原博客    . NeoGeo New Media 在一个持续制 ...

  6. Windows Azure真实案例:NeoGeo New Media --SQL Azure提高数字媒体资产解决方案的拓展性

    公告    :本博客为微软云计算中文博客  的镜像博客.   部分文章因为博客兼容性问题  ,会影响阅读体验  .如遇此情况,请访问  原博客    . NeoGeo New Media 在一个持续制 ...

  7. 《Microsoft Sql server 2008 Internals》读书笔记--第九章Plan Caching and Recompilation(10)

    <Microsoft Sql server 2008 Internals>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397 ...

  8. 《Microsoft Sql server 2008 Internals》读书笔记--第八章The Query Optimizer(5)

    <Microsoft Sql server 2008 Internals>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397 ...

  9. 《Microsoft Sql server 2008 Internal》读书笔记--第八章The Query Optimizer(1)

    <Microsoft Sql server 2008 Interna>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397.h ...

最新文章

  1. [DevOps] 认识一下
  2. rmd文件怎么转换html文件,提取.Rmd文件的html依赖项(包含htmlwidgets)
  3. 我用YOLOX露了一手,记录一下模型部署、优化及训练的实现全过程
  4. centos安装Flash插件
  5. 创建linux目录,Linux目录的创建方法
  6. Effective Java之在细节消息中包含能捕获失败的消息(六十三)
  7. 一:包装好和吹出去 二:三国心得
  8. 基于Redis、Storm的实时数据查询实践
  9. vscode 日志文件_vscode 日志文件_Visual Studio Code(VS code)介绍
  10. 微信小程序支付---详解(python)
  11. PDF虚拟打印机使用教程(附PDF虚拟打印机下载)
  12. 吸烟 打电话 行为 图片 数据集
  13. 邮箱的正确格式是什么,如何发送一封规范的邮件
  14. 大小写转换(大小写转换键是哪个键)
  15. 清除Zabbix的历史记录
  16. 微信视频号如何流量变现赚钱呢?
  17. 社群团购到底有哪些优势?为什么社群团购很容易打造爆品?
  18. 数组去重——将数组中重复的元素去掉
  19. 使用JS实现前端缓存
  20. [Vue-Treeselect Warning] Unloaded branch node detected. “loadOptions“ prop is required to load its c

热门文章

  1. 静态网站任何优化怎么设置_网站关键词怎么设置对网站推广优化有利?
  2. sscanf()函数的用法
  3. POJ3197(连分数表示)
  4. 3_5 ResponsibilityChainMode 责任链模式
  5. 抖音直播间弹幕protocbuf分析
  6. 精致全景图 | 程序是如何运行起来的
  7. 混沌系列 | 其实制造“假死”很容易
  8. 硬核图解!断网了,还能ping通 127.0.0.1 吗?为什么?
  9. Python中的匿名函数和函数式编程
  10. 没有他,就没有我们现在的WebRTC