MySQL也要删“blacklist”,万万没想到技术术语能有沦为技术债的一天

2020 年 7 月 08 日

MySQL也要删“blacklist”,万万没想到技术术语能有沦为技术债的一天

7 月 1 日,MySQL 官方博客发文称,计划在数据库源代码和文档中停止使用 master、 slave、 blacklist(黑名单) 和 whitelist(白名单) 等术语,并使用 source、replica、blocklist 和 allowlist 等新术语替换现有术语。


MySQL 是广受欢迎的开源数据库,在 DB-Engine 数据库排行榜中一直稳居第二。2000 年,MySQL 3.23.15 正式引入了 MySQL 副本功能,随后,副本功能得到了广泛应用,几乎所有的 MySQL 数据库都在使用副本功能来实现高可用性、灾难恢复、读取扩展等等。


而在副本功能包含有这样一些名词,“主(master)”、“从(slave)”等等,MySQL 团队表示将调整这些术语表达:



据了解,MySQL 最新版本已经使用 Primary/Secondary 定义服务器在数据库架构中扮演的不同角色:


  • MySQL Group Replication

  • MySQL InnoDB Cluster

  • MySQL InnoDB ReplicaSet


为什么要改为“source”呢?MySQL 解释称:“MySQL 异步副本代表一条变更流,其中每一项副本配置都对应一个来源,且并不表示服务器在整体数据库架构中应扮演哪种角色。这样,之前的主从关系并不能适用,尤其是利用副本构建数据库架构拓扑中的双向副本、多层副本甚至是循环副本时,其角色定义更不应如此简单粗暴。”


目前,MySQL 8.0 说明文档中已经发布了术语变更的第一阶段内容,培训与认证以及后续即将推出的 MySQL 产品版本,也会逐步对相关术语做出修改。


多家公司和开源项目都在修改技术名词


虽然 MySQL 团队在博客中没有表明修改术语的原因,但是此前已经有多家公司和开源项目也从代码库和文档中删除了相似的术语,理由是这些术语可能会导致种族偏见。


弗洛伊德事件发生之后,消除种族偏见的呼声迎来新高,并蔓延到了软件领域,微软程序员兼教育家 Scott Hanselman 发文呼吁消除编程中常见的“主 - 从(master-slave)”表述:“互联网工程任务组(IEFT)认为主 - 从(master-slave)是一种压迫性的比喻,这种表述背后是深刻的历史烙印。因此无论是从技术层面还是立足历史角度,都不应该使用这样一种冒犯性的比喻。”


因此,我们看到不仅是 MySQL,多家公司和开源项目都在删除相似的术语:


  • 谷歌从最终用户可见的所有位置删除了“blacklist”和“whitelist”, 分别用“blocklist”和“allowlist”代替,Chromium 将 components/blacklist 目录中的类名称重命名为 components/blocklist;

  • Pivotal 的 LicenseFinder 将“whitelist(白名单)”替换为“permitted licenses(授权许可)”;

  • GitHub Desktop 软件在 2019 年就完成了相似术语的替换,GitHub CLI 也在不久前将“master(主)”替换为“trunk(主干)”;

  • Twitter 也表示将替换删除 9 个术语,其中包括 whitelist、blacklist、 master/slave。


除此之外,还有一些公司和开源项目是公开表示有调整技术术语的计划,例如 Microsoft、LinkedIn、Ansible、Splunk、Android、Go、PHPUnit、Curl、OpenZFS、OpenSSL、JP Morgan 等。


技术术语变技术债?


修改技术术语,说起来简单做起来难,相信很多人都没有想到,有一天技术术语也会沦为技术债:一是需要替换的技术术语的数量可能会非常多;二是想要完全把代码中的术语都替换掉,过程可能非常复杂,尤其是当某些项目发展很多年,代码积累很多的时候;三是某些术语在替换之后可能会导致系统奔溃。


根据相关报道,Google 有超过 2000 个与“blacklist”相关的术语将被替换掉。虽然替换“blacklist”这个单词的过程不会很复杂,把“blacklist”中的第三个字母“a”替换成“Blocklist 的“o”即可,但是如果数量很多的话,也会成为一个问题。



谷歌 Chrome 浏览器的程序人员给出的移除“blacklist”以及“whitelist”等用语的建议和步骤


另外,技术术语的替换也是需要一定的时间。以 MySQL 团队的实践为例,虽然 MySQL 部分语法的调整可以通过为现有命令添加别名的方式实现,例如将 SHOW SLAVE STATUS 变更为 SHOW REPLICA STATUS。但这还远远不够,仍有很多命令会在返回的结果列名称中包含文本“主”与“从”表达。


要完全消除这些技术术语,是一项非常艰巨的工作。为了保持向下兼容,MySQL 团队需要首先弃用其中某些术语,而后再行删除。相较于单纯“替换”原有语法,最重要的无疑是尽快开发出新的推荐语法,例如 SHOW REPLICA STATUS 。


而且,MySQL 无法单靠一个发行版就删除所有引用。为了继续支持数百万套 MySQL 部署方案,需要通过多次迭代逐步从语法、协议、错误消息以及源代码中弃用及 / 或删除这些术语表达。


GitHub 开发人员 Brian Golson 也表示:“修改技术术语这项工作强度非常大,不可能凭一己之力完成。”同时他还指出了修改术语可能导致系统奔溃:“如果我们对 buildin/init-db.c 直接进行逐行修改,那么大概会引发 304 项测试失败,约占总体测试失败数量的三分之一。”


对于 MySQL 及其它项目修改“blacklist”等技术术语,你们是怎么看的呢?欢迎在评论里留言哦!


2020 年 7 月 08 日 08:241882
用户头像
田晓旭 InfoQ 编辑

发布了 412 篇内容, 共 192.2 次阅读, 收获喜欢 1224 次。

关注

评论 12 条评论

发布
用户头像
黑祸
2020 年 07 月 08 日 13:42
回复
用户头像
应该改,存在的事情不代表合理,技术应该中立而有良心
2020 年 07 月 08 日 10:19
回复
有道理,谁再敢在设计图里用黑色,那就是不中立,没良心,喷死他。
2020 年 07 月 08 日 13:40
回复
没毛病,文字怎么能用黑色,大家怎么能长黑头发,全部改掉。
2020 年 07 月 29 日 14:55
回复
用户头像
如果把blocklist 命名为 yellowlist,你会怎么想?
2020 年 07 月 08 日 08:59
回复
有什么想法,自卑的人才敏感
2020 年 07 月 08 日 13:41
回复
以后我所有的blocklist改成Forcelist

2020 年 07 月 09 日 09:33
回复
用户头像
如果这个世界上没有黑人,那么黑名单白名单是正常的。但是这个世界就是有黑人,所以支持一下吧。
2020 年 07 月 08 日 08:59
回复
身为黄种人,咱们也没觉得 “扫黄打非” 有什么不妥啊
2020 年 07 月 08 日 11:19
回复
我姓黄从来不敢吭一声
2020 年 07 月 08 日 14:56
回复
黑人在不在乎和黄人在不在乎没多大关系。
2020 年 07 月 09 日 09:34
回复
用户头像
毛病。
2020 年 07 月 08 日 08:32
回复
没有更多评论了
发现更多内容

字节跳动开源云原生机器学习平台 Klever

字节跳动技术团队

学习 字节跳动

爱奇艺用户分析平台实践:TB级数据查询秒级返回

dbaplus社群

大数据

explicit_defaults_for_timestamp 参数详解

Simon

MySQL 七日更

设计模式【1.1】-- 你想如何破坏单例模式?

秦怀杂货店

设计模式 单例 23种设计模式

Mybatis【7】-- Mybatis如何知道增删改是否成功执行?

秦怀杂货店

Java mybatis

星环科技助力商业银行机器学习平台建设

星环科技

FinTech

设计模式【1】-- 单例模式到底几种写法?

秦怀杂货店

设计模式

LeetCode题解:42. 接雨水,双指针,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

开一个世界末日的脑洞

熊斌

我的世界 生活记录 七日更

Android开发全套学习!不同层级的Android开发者的不同行为,学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

第四周 技术选型(一) 作业 「架构师训练营 3 期」

feiyun123

极客大学架构师训练营

字节跳动自研「BVC2.0」视频编码器在 MSU 2020 中获得四项第一

字节跳动技术团队

字节跳动 视频编码

反垄断之下 区块链迎来新生?

CECBC区块链专委会

区块链

Github标星5.3K,网易云的朋友给我这份339页的Android面经,附赠课程+题库

欢喜学安卓

android 程序员 面试 移动开发

Lambda【1】-- List相关Lambda表达式使用(上篇)

秦怀杂货店

Java Lambda

Mybatis【9】-- Mybatis占位符#{}和拼接符${}有什么区别?

秦怀杂货店

mybatis 预编译

一直在云上的星空联盟,“真”上云了

亚马逊AWS官方博客

云计算 AWS

ClickHouse|ClickHouse与Elasticsearch聚合性能对比测试

一粒

nosql elasticsearch 性能测试 Clickhouse

WLAN网络规划和优化的必备知识点

网络技术平台

领域驱动设计DDD

积极&丧

恐怖:这份Github神仙面试笔记,简直把所有Java知识面试题写出来了

Crud的程序员

Java 架构师 java程序员 java基础

《爱奇艺安全应急响应中心漏洞评分标准2021》来了

爱奇艺技术产品团队

安全 安全漏洞

Mybatis【8】-- Mybatis返回List或者Map以及模糊查询怎么搞?

秦怀杂货店

Java mybatis

毕业三年,如何达到月薪30K?我想跟你聊聊!!

冰河

程序员 程序人生 架构师 升职加薪 提升自我

花火交易所软件开发|花火交易所系统APP开发

开發I852946OIIO

系统开发

JustSwap交易所系统APP开发|JustSwap交易所软件开发

开發I852946OIIO

系统开发

记一次由Arthas引起的Metaspace OOM问题

闲鱼技术

Java 阿里巴巴

附PPT丨如何构建数据库容器化PaaS

dbaplus社群

数据库 容器化

架构师入门感悟之十

莫问

安卓开发快速学习!一个小例子彻底搞懂Android的MVP模式到底是什么?面试必问

欢喜学安卓

android 程序员 面试 移动开发

架构师训练营第五周课后作业

万有引力

MySQL也要删“blacklist”,万万没想到技术术语能有沦为技术债的一天-InfoQ