欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPTX文档下载  

    MariaDB新特性剖析-张金鹏.pptx

    • 资源ID:3675711       资源大小:1.28MB        全文页数:28页
    • 资源格式: PPTX        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    MariaDB新特性剖析-张金鹏.pptx

    MariaDB新特性剖析 京东云张金鹏 内容提要 1.MariaDB发展历程 2.MariaDB新特性概要 3.线程池技术剖析 4.binlog group commit技术剖析 5.多源复制剖析 6.MariaDB面临的挑战 1、MariaDB发展历程 1.2008年1月, Sun以10亿美元收购MySQL AB。 2.2009年4月,Oracle以74亿美元收购Sun。 3.2009年,MySQL创始人Monty出于以下几个原因创立了MySQL的分支 MariaDB: l MySQL核心开发团队是封闭的,完全没有Oracle之外的成员参加。 l MySQL新版本的发布速度,在Oracle收购Sun之后大为减缓,有很多bugfix 和新的feature,都没有及时加入到发布版本之中。 4.维基百科、Google、Red Hat、SUSE等从MySQL迁移到MariaDB。 2、MariaDB扩展和新特性概要 1. 更多的存储引擎。除标准存储引擎外还包含Aria、XtraDB、SphinxSE、 FederatedX、TokuDB、Cassandra、CONNECT、Sequence、Spider等存储引擎。 2. 线程池技术。 3. binlog group commit技术。 4. 支持微秒级别的时间精度。 5. 虚拟列、动态列。 6. 用户统计功能。 7. Kill某个用户的所有Query。 8. Query的执行进度提示。 9. 多源复制。 10.子查询优化。 11. 虚拟列 1.CREATE TABLE example_virtual_columns( a INT(11) PRIMARY KEY, b VARCHAR(32), c INT(11) AS (a mod 10) VIRTUAL, d VARCHAR(5) as (left(b, 5) PERSISTENT); 虚拟列c的值将会在查询时计算,而虚拟列d的值被存储在表中,查询的时候直接从表里取出。 2.在执行插入操作时,虚拟列使用default关键字代替就可以。如果为虚拟列指定值,将会导 致错误的发生: mariadbdbtest INSERT INTO example_virtual_columns VALUES (16, “abcdefghijkl“, default, default); Query OK, 1 row affected (0.01 sec) mariadbdbtest SELECT * FROM example_virtual_columns; +-+-+-+-+ | a | b | c | d | +-+-+-+-+ | 16 | abcdefghijkl | 6 | abcde | +-+-+-+-+ 1 row in set (0.00 sec) mariadbdbtest INSERT INTO example_virtual_columns VALUES (17, “abcdefghijkl“, default, “there“); ERROR 1906 (HY000): The value specified for computed column 'd' in table 'example_virtual_columns' ignored 动态列(1) 1.动态列适合于某些不确定的场景,例如某个商品的属性个数不确定并且将来可能还会添加。 2.想要使用动态列,首先表中必须包含blob类型的列: create table assets ( item_name varchar(32) primary key, dynamic_cols blob ); 3.接下来,就可以使用MariaDB定义的动态列操作函数对动态列进行存取操作: INSERT INTO assets VALUES (“MariaDB T-shirt“, COLUMN_CREATE(“color“, “blue“, “size“, “XL“); INSERT INTO assets VALUES (“Thinkpad Laptop“, COLUMN_CREATE (“color“, “black“, “price“, 500); 以上两条语句往assets表中插入了两行记录,接下来查询商品的颜色情况: mariadbdbtest SELECT item_name, COLUMN_GET(dynamic_cols, “color“ as char) AS color FROM assets; +-+-+ | item_name | color | +-+-+ | MariaDB T-shirt | blue | | Thinkpad Laptop | black | +-+-+ 动态列(2) 1.此外,还可以动态删除或者增加某行的动态列: mariadbdbtest UPDATE assets SET dynamic_cols = COLUMN_DELETE(dynamic_cols, “price“) WHERE COLUMN_GET(dynamic_cols,“color“ as char)= “black“; mariadbdbtest UPDATE assets SET dynamic_cols = COLUMN_ADD(dynamic_cols, “warranty“, “3 years“) WHERE item_name=“Thinkpad Laptop“; 2.你可以通过调用COLUMN_LIST函数来查看动态列的情况,或者使用COLUMN_JSON函数以JSON 的格式来查看动态列以及它们对应的值: mariadbdbtest SELECT item_name, COLUMN_LIST (dynamic_cols) FROM assets; +-+-+ | item_name | column_list(dynamic_cols) | +-+-+ | MariaDB T-shirt | “size“,“color“ | | Thinkpad Laptop | “color“,“warranty“ | +-+-+ mariadbdbtest SELECT item_name, COLUMN_JSON(dynamic_cols) FROM assets; +-+-+ | item_name | COLUMN_JSON(dynamic_cols) | +-+-+ | MariaDB T-shirt | “size“:“XL“,“color“:“blue“ | | Thinkpad Laptop | “color“:“black“,“warranty“:“3 years“ | +-+-+ 3、MariaDB线程池技术 MySQL每连接每线程模式的局限性: A. 最大连接数限制。参数max_connections。 B. 随着连接数的上升,线程数上升。每个线程会占用一定系统资源的,线程数多了 占用的系统资源也就多了。 C. 线程的创建和销毁是有一定开销的。 D. 当线程数过多时,如果其中大部分线程都处于活跃状态,将会导致频繁的上下文 切换,从而造成巨大的系统开销。 1. 由多个分组组成。参数thread_pool_size指定了线程池分组的个数,默认值为当前机器 CPU的核心数。 2. 新来的连接会根据id的不同分配到不同的分组。 3. 每个分组有一个任务队列,存储待处理的连接。 4. 每个分组有一个listener线程,监听对应分组所有连接的网络事件,将有事件的连接添 加到任务队列中。 5.worker线程负责处理任务队列中待处理的连接。 6.timer线程定期清理超时的客户端连接,并且检查各个分组是否处于“停滞”状态。 7.worker线程的数量会动态伸缩。各个分组的worker线程的总数最大不超过 thread_pool_max_threads设置的值。 8.listener线程和worker线程之间可以进行相互转换。正常情况下当listener线程监听到分 组中的某个连接需要处理的时候,会将其加入任务队列,并且唤醒worker线程进行处 理。而在任务队列没有任务积压并且最近一段时间网络事件较少的情况下,listener线 程不会唤醒worker线程去处理监听到的连接,而是自己作为worker线程处理该链接。 worker线程在执行完任务队列的所有任务之后,在进入睡眠之前会判断当前分组是否存 在listener线程,如果不存在listener线程那么自己就转化为listener线程。 9.200,000+ connections 4、MariaDB binlog group commit技术 在开启binlog的情况下,MySQL/MariaDB事务的提交包括在binlog中的提交以 及在存储引擎内部的提交。MySQL/MariaDB采用2PC保证事务的完整性。 2PC MySQL/MariaDB事务两阶段提交 1. 事务在存储引擎内部prepare(binlog也有prepare方法,只不过该方法 什么也不做)。 2. 事务提交到binlog中。 3. 事务在存储引擎内部进行提交。 当系统在1和2期间崩溃了,事务仅仅在存储引擎内部prepare了,当 MySQL重新开启的时候,会将其进行回滚。 当系统在2和3期间崩溃了,事务在存储引擎内部prepare了,在binlog 中提交了,当MySQL重新启动的时候,会把该事务在引擎内部进行 commit。因为该事务很可能已经通过binlog传播到了从库上。 多个并发提交的事务之间共享一次fsync操作对binlog进行持久化 多个并发需要提交的事务之间共享一次fsync操作对binlog文件进行持 久化。 多个并发提交的事务在写binlog之前会被加入到一个队列中,位于队 列头部的事务所在的线程称为leader线程,其他事务所在的线程称为 follower线程。leader线程负责为队列中所有的事务进行写binlog操作 ,此时所有的follower线程处于等待状态,然后leader线程调用一次 fsync操作,将binlog持久化,最后通知所有的follower线程可以继续往 下执行。 传统写binlog流程与binlog group commit流程对比 1.事务1 p 获取binlog锁。 p 将事务写入到binlog。 p 调用fsync将对binlog的修改进行持久化。 2.事务2 p获取binlog锁。 p将事务写入到binlog。 p调用fsync将对binlog的修改进行持久 化。 3.事务3 p获取binlog锁。 p将事务写入到binlog。 p调用fsync将对binlog的修改进行持久 化。 1. 事务1进入队列,事务2进入队列,事 务3进入队列。 2. 事务1作为leader获取binlog锁,同时 事务2和事务3作为follower进入等待 状态。 3.leader(事务1)将队列中所有事务( 事务1、2、3)写入到binlog。 4.leader(事务1)调用一次fsync将对 binlog的修改进行持久化。 5.leader(事务1)唤醒所有等待的 follower(事务2、3)。 binlog group commit技术只有在有足够多并发的需要提交的事务时, fsync操作成为事务的提交瓶颈的情况下才能带来性能的提升。 5、MariaDB多源复制 MySQL传统复制方式 MariaDB多源复制 多源复制的作用: 1.由于某些原因,数据被分片到多个数据库实例上,你想把这些数据聚集到一块进行数据 分析等工作。 2.你有多个数据库实例,想把这些实例的数据使用一台机器进行备份。 MariaDB多源复制相关的命令: 1. CHANGE MASTER “connection-name“ TO 2. START SLAVE “connection-name“ 3. START ALL SLAVE 4. STOP SLAVE “connection-name“ 5. STOP ALL SLAVE 6. RESET SLAVE “connection-name“ 7. SHOW RELAYLOG “connection-name“ EVENTS 8. SHOW SLAVE “connection-name“ STATUS 9. SHOW ALL SLAVE STATUS 普通复制: 1. 在主库上会开启一个dump线程,在从库上开启了一个IO线程,一个SQL线程,。 2. 从库上有一个master.info文件,存储了连接到主库所需的信息以及slave IO线程获取 主库binlog的进度。 3. 从库上有一组relay-log,有一个relay_log.info文件,记录了slave SQL线程重放的进 度。 MariaDB多源复制 1. 每增加一个主库,从库上会创建一个IO线程和一个SQL线程。 2. 从库上有多个master-connection.info文件,存储了连接到对应主库所需的信息以 及slave IO线程获取主库binlog的进度。一个multi-master.info文件,存储了所有连接 名。 3. 从库上有N组relay-log,有多个relay_log-connection.info文件,记录了对应slave SQL线程重放的进度。 6、MariaDB面临的挑战 1. 虽然MariaDB拥有众多的特性,但很多特性的使用场景比较有限,例如多源复 制。 2. 同时,MySQL也在不断发展中,不断吸收一些好的特性。例如MySQL从5.6开 始也引入了binlog group commit技术,支持并发复制等等。 3. 虽然MariaDB有自己的Aria存储引擎,相比MyISAM性能更好,且具有崩溃恢复 功能能。但目前InnoDB存储引擎才是默认的标配,MariaDB想要占据重要位置 ,必须推出自己重量级的存储引擎。 4. MariaDB与MySQL形成了相互竞争的状态,这对双方都有一定的促进作用。最 终受益的还是数据库使用者。 More? MariaDB原理与实现简介 1. 剖析MariaDB的binlog group commit技术、线程池技术的 实现。 2. 教你阅读MySQL和MariaDB的源代码。 3.binlog和复制相关内容:讲解复制、半同步的原理和实现 ,GTID实现等等。 4. 剖析ORDER BY和JOIN的实现。 5. 讲解京东分布式数据库架构。 6. 容器核心技术Cgroup机制的剖析。 新浪微博 弓长金鹏 京东云招聘 SDN/网络工程师 Golang工程师 容器工程师 存储工程师 云数据库工程师 zhangjinpeng1jd.com

    注意事项

    本文(MariaDB新特性剖析-张金鹏.pptx)为本站会员(yyf)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开