加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

MySQL存储引擎之Spider内核深度解析

发布时间:2021-01-13 21:15:56 所属栏目:电商 来源:网络整理
导读:《MySQL存储引擎之Spider内核深度解析》要点: 本文介绍了MySQL存储引擎之Spider内核深度解析,希望对您有用。如果有疑问,可以联系我们。 作者介绍 朱阅岸 ,中国人民大学博士,现供职于腾讯云数据库团队.研究方向主要为数据库系统理论与实现、新硬件平台下的

Spider想要支持DELETE操作必须实现MySQL handler类提供的ha_delete_row方法.与INSERT操作不同,DELETE操作需要生成一条SELECT语句将查询涉及的分区键拉到Spider节点.这是因为MySQL Server层的“once-a-tuple”的查询执行模型(实际上基本所有的关系数据库系统都采用该模型)会驱动Spider逐个拼接DELETE语句,然后发往后端节点.这时候,Spider需要知道对应的DELETE语句该往哪个后端节点发送.为了减少网络开销,Spider提供了批量发送DELETE语句的功能.

图10. DELETE实现

图10给出了Spiderpider中delete的实现.MySQL Server层首先确定表的访问方法:采用索引扫描或者全部扫描(第5行)?DELETE方法需要执行一次查找操作,调用get_next方法(info.read_record)获取一条元组(第10行).Spider需要判断是否第一次调用get_next方法.如果是的话,则需要生成SELECT语句,将数据节点的数据拉到本地.否则,Spider直接从本地返回数据给上层调用者.接下来,Server层调用ha_delete_row方法将数据删除.这是存储引擎需要具体实现的方法.由于Spider本身并不存储数据的缘故,其实现delete操作主要思想是利用从后端节点拉取过来的数据(分区键,过滤条件等),拼接成一条DELETE语句.然后,发送该请求到数据节点.Spider为了优化网络开销,提供了批量发送DELETE语句的选项.

UPDATE操作的实现类似DELETE,都需要Spider生成SELECT语句从后端节点拉取数据.只不过,UPDATE在更新区分键的时候,可能需要多一次DELETE操作(删除原来分区的数据,将新的数据插入到不同的分区).

总结

Spider的最大亮点是为MySQL的使用者提供分库分表的中间件解决方案,同时在SQL语法上兼容MySQL.这得益于Spider作为MySQL的插拔式引擎而存在.Spider是一个proxy,其本身并没有存储数据,因此上层的读写表请求需要转换成SQL语句,重新路由到后端的数据节点.相比其它的中间件解决方案,Spider的查询解析次数都是两次,并没有过多开销.此外,Spider还针对聚集、排序等操作提供了MAP REDUCE的解决方案.

总之,从兼容性、性能上衡量,Spider是MySQL分库分表一个不错的选项.

文章来自微信公众号:DBAplus社群

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读