如果你查看论文的图3,你可以发现,Aurora不仅有主数据库实例,同时多个数据库的副本。对于Aurora的许多客户来说,相比读写查询,他们会有多得多的只读请求。你可以设想一个Web服务器,如果你只是查看Web页面,那么后台的Web服务器需要读取大量的数据才能生成页面所需的内容,或许需要从数据库读取数百个条目。但是在浏览Web网页时,写请求就要少的多,或许一些统计数据要更新,或许需要更新历史记录,所以读写请求的比例可能是100:1。所以对于Aurora来说,通常会有非常大量的只读数据库查询。

对于写请求,可以只发送给一个数据库,因为对于后端的存储服务器来说,只能支持一个写入者。背后的原因是,Log需要按照数字编号,如果只在一个数据库处理写请求,非常容易对Log进行编号,但是如果有多个数据库以非协同的方式处理写请求,那么为Log编号将会非常非常难。

但是对于读请求,可以发送给多个数据库。Aurora的确有多个只读数据库,这些数据库可以从后端存储服务器读取数据。所以,图3中描述了,除了主数据库用来处理写请求,同时也有一组只读数据库。论文中宣称可以支持最多15个只读数据库。如果有大量的读请求,读请求可以分担到这些只读数据库上。

当客户端向只读数据库发送读请求,只读数据库需要弄清楚它需要哪些data page来处理这个读请求,之后直接从存储服务器读取这些data page,并不需要主数据库的介入。所以只读数据库向存储服务器直接发送读取page的请求,之后它会缓存读取到的page,这样对于将来的一些读请求,可以直接根据缓存中的数据返回。

当然,只读数据库也需要更新自身的缓存,所以,Aurora的主数据库也会将它的Log的拷贝发送给每一个只读数据库。这就是你从论文中图3看到的蓝色矩形中间的那些横线。主数据库会向这些只读数据库发送所有的Log条目,只读数据库用这些Log来更新它们缓存的page数据,进而获得数据库中最新的事务处理结果。

这的确意味着只读数据库会落后主数据库一点,但是对于大部分的只读请求来说,这没问题。因为如果你查看一个网页,如果数据落后了20毫秒,通常来说不会是一个大问题。

这里其实有一些问题,其中一个问题是,我们不想要这个只读数据库看到未commit的事务。所以,在主数据库发给只读数据库的Log流中,主数据库需要指出,哪些事务commit了,而只读数据库需要小心的不要应用未commit的事务到自己的缓存中,它们需要等到事务commit了再应用对应的Log。

另一个问题是,数据库背后的B-Tree结构非常复杂,可能会定期触发rebalance。而rebalance是一个非常复杂的操作,对应了大量修改树中的节点的操作,这些操作需要有原子性。因为当B-Tree在rebalance的过程中,中间状态的数据是不正确的,只有在rebalance结束了才可以从B-Tree读取数据。但是只读数据库直接从存储服务器读取数据库的page,它可能会看到在rebalance过程中的B-Tree。这时看到的数据是非法的,会导致只读数据库崩溃或者行为异常。

论文中讨论了微事务(Mini-Transaction)和VDL/VCL。这部分实际讨论的就是,数据库服务器可以通知存储服务器说,这部分复杂的Log序列只能以原子性向只读数据库展示,也就是要么全展示,要么不展示。这就是微事务(Mini-Transaction)和VDL。所以当一个只读数据库需要向存储服务器查看一个data page时,存储服务器会小心的,要么展示微事务之前的状态,要么展示微事务之后的状态,但是绝不会展示中间状态。

以上就是所有技术相关的内容,我们来总结一下论文中有意思的地方,以及我们可以从论文中学到的一些东西。

  • 一件可以学到的事情其实比较通用,并不局限于这篇论文。大家都应该知道事务型数据库是如何工作的,并且知道事务型数据库与后端存储之间交互带来的影响。这里涉及了性能,故障修复,以及运行一个数据库的复杂度,这些问题在系统设计中会反复出现。
  • 另一个件可以学到的事情是,Quorum思想。通过读写Quorum的重合,可以确保总是能看见最新的数据,但是又具备容错性。这种思想在Raft中也有体现,Raft可以认为是一种强Quorum的实现(读写操作都要过半服务器认可)。
  • 这个论文中另一个有趣的想法是,数据库和存储系统基本是一起开发出来的,数据库和存储系统以一种有趣的方式集成在了一起。通常我们设计系统时,需要有好的隔离解耦来区分上层服务和底层的基础架构。所以通常来说,存储系统是非常通用的,并不会为某个特定的应用程序定制。因为一个通用的设计可以被大量服务使用。但是在Aurora面临的问题中,性能问题是非常严重的,它不得不通过模糊服务和底层基础架构的边界来获得35倍的性能提升,这是个巨大的成功。
  • 最后一件有意思的事情是,论文中的一些有关云基础架构中什么更重要的隐含信息。例如:
    • 需要担心整个AZ会出现故障;
    • 需要担心短暂的慢副本,这是经常会出现的问题;
    • 网络是主要的瓶颈,毕竟Aurora通过网络发送的是极短的数据,但是相应的,存储服务器需要做更多的工作(应用Log),因为有6个副本,所以有6个CPU在复制执行这些redo Log条目,明显,从Amazon看来,网络容量相比CPU要重要的多。

小广告:

MIT6.824的中文翻译,我也会连载在微信公众号: honghui_writing,微信的内容更加整齐一些。

python读取只读word只读_10.9 只读数据库(Read-only Database)相关推荐

  1. python读取文件并存入mysql_1.python读取txt文件并插入到mysql数据库以及将py脚本文件打包成独立的exe程序...

    读取txt文件并插入到mysql数据库 该小脚本适用于每天生成日志等信息到txt文本,然后通过windows的计划任务定时去执行python脚本打包成的exe文件,并将txt中内容读取以及格式化后插入 ...

  2. Python读取\修改word文档中的文本框内容

    本文所指的 word文档,都是docx结尾的,如果是doc结尾的,请参考上篇:点我 我们绝大多数的需求都是 利用python-docx 来读取word文档中的内容,进而再对内容进行其他处理,如下代码, ...

  3. python读取只读word只读_Python用于NLP :处理文本和PDF文件

    提示:代码图片可以点击全屏查看,双指操作还可以放大缩小. 这是我的Python用于自然语言处理(NLP)系列文章的第一篇文章.在本文中,我们将从Python for NLP的基础知识开始.我们将看到如 ...

  4. 两种方法设置Word文档的“只读模式”

    防止Word文档被意外更改,我们可以将Word设置成"只读模式"来保护文档.根据需要,还可以将Word可以设置成无密码和有密码的"只读模式",下面来说说具体方法 ...

  5. 打开Word文档显示只读解决

    环境:Microsoft Word 2010 问题:打开Word文档显示"只读",不能对其进行修改. 解决: 单击设置为只读的Word文档------->右键单击------ ...

  6. word文件打开就是只读模式的解决方法

    word打开之后就是只读模式,这种情况会有很多种原因,所以取消只读方式的方法也有很多种. 今天和大家分享取消只读方式的方法: 方法一: 有种情况是,我们打开word文件后,发现有黄色悬浮提示框,提示文 ...

  7. Apache POI 密码保护只读word文档在WPS中无效

    Apache POI 密码保护只读word文档在WPS中无效 最近项目有个要求就是从系统下载的WORD文档需要进行密码保护,防止篡改.于是很自然地想到了用POI去加入只读模式然后用密码保护: XWPF ...

  8. word文件打开就是只读模式,怎么办

    word打开之后就是只读模式,这种情况会有很多种原因,所以取消只读方式的方法也有很多种.今天和大家分享取消只读方式的方法: 希望能够有符合你的情况的解决方法 方法一:有种情况是,我们打开word文件后 ...

  9. python处理表格数据-python读取word 中指定位置的表格及表格数据

    1.Word文档如下: 2.代码 # -*- coding: UTF-8 -*- from docx import Document def readSpecTable(filename, specT ...

  10. python 读取 word 表格_python读取word表格

    python调用com,如何完成word表格操作 word中doc这个格式的文件是微软特有格式,微软没有向外公开任何的api接口文档,只能通过微软提供的OLE组件来提其COM接口,只要你的机器上安装了 ...

最新文章

  1. OpenCV区域提取之利用Rect提取在源代码中预先定义好的区域
  2. java web基本流程
  3. java jsp filename filepath 图片上传_SpringMVC实现文件上传与下载
  4. git 简易指南+常用命令
  5. 数据结构 | 链表:1097 删除重复元素
  6. 怎么查询服务器绑定的网站吗,服务器绑定网站吗
  7. 3大AI事件入围百度2017科技热搜,柯洁对战AlphaGo排名第一
  8. 【计算电磁学】真空中电磁波传播的MATLAB一维FDTD仿真程序
  9. 【机器学习】支持向量机原理及例题详解
  10. tar压缩文件时忽略指定文件夹、文件
  11. Win系统 - 微星 GS65 笔记本电脑开机黑屏
  12. Java 盾神与砝码称重
  13. HDU-6438丨优先队列
  14. 点量云流化在智慧党建中的应用
  15. SpringBoot如何防止重复提交--use
  16. delphi 高仿微信气泡聊天窗口
  17. 解决Ubuntu更新后无线网卡不能使用的问题
  18. 烟气脱硫技术及工艺流程超全剖析
  19. SQL语句 -非空约束 - 唯一约束 - 主键约束 - 默认约束 -外键约束
  20. 创建数据库是列名无效咋办_列创建后,sql server上的列名无效

热门文章

  1. 票据OCR扫描仪-助力财务智能化
  2. TeamViewer以科技创新连接世界
  3. 如何做一个简单的开放接口(1)-功能设计
  4. 超级搜索everything项目
  5. Hauppague 哈帕克 PCIe 视频采集卡 ImpactVCB-e花屏问题解决和SDK集成
  6. nmn几岁可以吃,nmn多少岁可以吃,归纳总结!
  7. coreldraw梯形校正_CorelDRAWX6图形图像设计章节复习试题(大学期末复习资料).docx
  8. Elasticsearch搜索操作
  9. NameValuePair和BasicNameValuePair的关系
  10. 【ARMv8 异常模型入门及渐进 9 - FIQ 和 IRQ 区别】