这篇文章主要为大家分析了 online DDL的原理以及Vitess如何帮助处理模式迁移的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“ online DDL的原理以及Vitess如何帮助处理模式迁移”的知识吧。
Vitess 引入了一种运行模式迁移的新方法:非阻塞的、异步的、预定的online DDL。通过 online DDL,Vitess 简化了模式迁移过程,它获得了操作开销的所有权,并为用户提供了一个简单、熟悉的界面:标准的 ALTER TABLE 语句。
让我们首先介绍一些背景知识并解释为什么模式迁移在数据库世界中是一个如此重要的问题,然后深入研究实现细节。
关系模型是软件世界中存在时间最长的模型之一,它是几十年前引入的,直到今天仍被广泛使用。SQL 同样古老而可靠,甚至在非关系数据库中也可以找到 SQL 或类似 SQL 的语言。
关系模型对许多常见的用例都有意义,具有属性的实体(分别为表和列)可以很好地映射到流行的结构,如用户、产品、成员关系、消息等,而且 SQL 的表达能力足够强,能够构造简单和复杂的问题。
但从历史上看,关系模型是有代价的。虽然许多数据库系统对读和写进行了优化,但它们对元数据更改(特别是模式更改)的优化程度并不高。此类更改的最大挑战之一是,它们需要一个操作程序,而且大多不在开发人员的领域之内。
在早期,数据库管理员(DBA)充当数据库的保镖是很常见的。他们会拖延来自开发者的“疯狂请求”。变更的要求需要经过漫长的程序和文书工作。
幸运的是,这些日子已经过去了,我们在持续部署和快速开发方面更加协作。然而,新的变化加剧了这个问题。在过去,你需要每月更改一次模式;也许几个月就有一次。你应该为此做好准备,推出一个新的版本。如今,世界上最繁忙的数据库部署每天都要运行多个模式迁移,这并不少见。
这重新引入并强化了模式迁移问题:该过程大部分不在开发人员的领域之内。它要求他们是数据库专家。在每天进行多次迁移的情况下,他们需要以与自己的开发流程不兼容的方式与其他开发人员协作和同步(例如,这与比较和合并 git 分支完全不同)。在小公司中,你会看到开发人员只是在他们认为合适的时候拥有和运行他们的迁移,但这并不能扩展,而且产品和组织越大,就越需要一个更正式的流程。
在 MySQL 世界中,直接的模式迁移是阻塞的,如果不是在主服务器上,那就是在副本上。他们对资源咄咄逼人,无法被打断或压制。在线模式更改工具已经存在了十多年,但是它们引入了自己的复杂性:你需要将它们与数据库一起安装、允许访问、安排执行、登录、执行、通知这些工具如何进行限制、处理错误、为它们的操作提供可见性等等。在规模较大的公司中,有专门的 DBA 或 Ops 团队手动执行模式更改是很常见的。这些团队可以每周甚至每天花费数小时来处理模式迁移的操作开销。
对于开发人员来说,这是一种所有权的丧失。虽然他们有向某个表添加列的想法,但他们需要从外部团队请求帮助,并且常常等待,而对进展状态没有太多的可见性。这就打破了他们的流程。也许 NoSQL 数据库最大的吸引力之一是它们不会对开发人员的流程施加这种级别的约束。
对于 DBA 来说,模式迁移是一种负担。一些开发人员对他们自己的工作流程的意外中断。
操作开销始于模式迁移跨越多个域这一事实。让我们来看看模式迁移流的不完整分解:
对于生产环境中的多个集群(其中一些是分片的),用于识别正确的集群的发现机制是什么?用于应用模式更改的集群的主机是?
Vitess 的架构使其处于一个独特的位置,可以处理大多数模式迁移流程。例如:
Vitess 知道模式部署在何处、存在哪些碎片、在任何给定时间谁是主节点,并且可以在正确的数据库服务器上应用 DDL,而无需用户干预。
开发 Vitess online DDL 的目标是尽可能地向用户隐藏所有的复杂性。因此,所有用户需要运行的是:
SET @@ddl_strategy=’gh-ost’;
ALTER TABLE my_table ADD COLUMN some_column INT NOT NULL;
ALTER TABLE 语句本身是完全正常的,但是响应不同。它立即返回,并带有一个作业 ID,用户可以使用该 ID 跟踪迁移的进度。用户可以选择 gh-ost 策略、pt-osc 策略或普通 direct 策略(不是 online DDL)。
关于“ online DDL的原理以及Vitess如何帮助处理模式迁移”就介绍到这了,更多相关内容可以搜索亿速云以前的文章,希望能够帮助大家答疑解惑,请多多支持亿速云网站!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。