拒绝out!这是过去几个月最重要的数据库新闻。
作者 | Markus Winand
译者 | 虎说
责编 | 屠敏
出品 | CSDN(ID:CSDNNews)
伟大的 SQL 思想的复兴
如今,将 SQL 功能引入 NoSQL 系统是一种反复出现的模式。例如,Apache Flink 刚刚引入了 match_recognize 子句。Couchbase 同样选择了这条道路,它计划将 SQL 窗口功能引入其产品的下一个版本。但是,SQL 不仅仅是具有强大功能的查询语言。其中,约束、事务和事务隔离也是 SQL 的组成部分。本文,我将重点介绍 NoSQL 系统如何尝试实现 SQL 数据库提供的一致性保证。
大规模的云计算服务(谷歌,Facebook,雅虎,微软等)都建立了自己的定制系统来处理规模需求。
在这句话中,有一条非常重要的信息很容易被忽略:这些公司为自身非常具体的需求建立了量身定制的系统。如果你有资源根据你的特定需求重新打造新的数据库,那么你能构建一个比现成通用的产品更能满足这些需求的数据库...当然,你也可以省略所有不需要的功能。接着,这些公司的产品经理开始谈论他们的产品方案。
最终,相同的想法出现:打造开源系统,于是 NoSQL 运动诞生了。
你可能知道故事的其余部分:NoSQL 软件系统提供商把他们的解决方案比做数据库的未来。而且技术人员都比较喜欢所有新的东西,特别是当身边的人都在谈论它的时候。
不幸的是,许多 NoSQL 用户都忽略了一点:每个系统都是为了解决一个非常具体的问题,而且只是解决了这个问题。NoSQL 系统不是通用数据库,它碰巧在一个用例中胜过竞争对手。虽然他们可以很好地完成这一招,但对其他事情并不是很有帮助。
回顾 2018 年,我们可以看到 NoSQL 供应商正在给他们的“小马”教授更多技巧,其中大多数是 SQL 数据库已经做了很多年的技巧。例如因为 NoSQL 系统在一致性方面遇到了困难,所以它们将多文档事务引入 MongoDB 4.0,尽管它相当有限,但也算得上过去几个月中最好的引入。目前的趋势是,即使是分布式数据库在面对严格的一致性时也会手足无措。
Google Spanner 就面临这样的问题,它非常重视可用性的一致性。Daniel Abadi 在他的文章“Spanner NewSQL数据库系统无法保证一致性”中探讨了为什么强一致性是可取的,为什么 NoSQL 系统首先放弃它,以及一些系统如何在分布式环境中争取强一致性。最重要的是,尝试实现 Google Spanner 的系统无法提供相同的保证,因为 Spanner 使用高精度的时间源(如原子钟)来实现一致性。如果你在没有这样的时间源的情况下使用 Spanner,是无法达到 Spanner 所具有的相同级别的一致性和可用性。根据 Abadi 的说法,一些系统已经开始犯这样的错误。
那问题来了:使用哪个数据库,尤其是当你存在强烈一致性的协议时?我想亚马逊的方法应该时最好的方法-使用老式的 SQL 数据库。是的,亚马逊仍然使用 Oracle 数据,同时他们也引入了其他几个数据库服务,如 Redshift、Aurora、Neptune、Timestream和Quantum Ledger。
亚马逊也是在不得已的情况下才使用 Oracle 数据库来运营他们的业务。去年8 月份,他们宣布计划在 2020 年之前完全摆脱 Oracle 数据库。这是“很难”完成的任务。首先,迁移会导致其最大的仓库中断,尽管如此,它们的迁移任务还是取得了不错的进展。
我们可以从上面这个故事中学到一点:从通用数据库开始。回想起来,这是大多数成功公司所做的。SQL 数据库是一个很好的选择,因为它们可以做很多技巧。你会非常需要这些技巧,特别是当你的需求不是很确定的时候。当数据库不能支撑你的业务时,首先你需要进行优化,然后找出核心痛点,因为很有可能有随时可用的单一技巧,可以比通用数据库更好地处理这个痛点。
技术与科学
Just in Time(JIT)编译目前是 SQL 数据库的热门话题,引入该技术的第一个主要数据库是 Microsoft SQL Server 2014(又名 Hekaton),最新的 PostgreSQL 版本也将 JIT 编译引入了一个免费的开源数据库。虽然 JIT 编译可以大大提高性能,但是供应商必须为维护提供额外的维护工作。这就是为什么荷兰的两位科学家试图将这一过程的某些部分自动化的原因。他们使用 SQLite 源代码中的一部分虚拟数据库引擎进行自动 JIT 编译。
SQL 历史
对于那些对 SQL 早期历史感兴趣的人,这里有一个不错的读物:1995 年的SQL Reunion:People、Projects和Politics。这是 20 世纪 70 年代和 80 年代参与 SQL 及其产品开发的人员会议的笔记。它涵盖了各种各样的话题,例如,为了决定使用哪个关键字作为空值,开一天的会议。
主要的新版本
最近几个月发布了一些主要版本:
Oracle 18c
最初于 2 月发布,但仅适用于 Oracle 云和工程系统的用户,Oracle 数据库18c 最终可在 7 月份下载,最终的 18c 版本于 10 月以免费 Express Edition(XE)的形式发布。与此同时,明年发布的封闭测试版(19c)已经开始开发。
Oracle Database 18c 引入了许多新的 JSON 特性、多态表函数和图形处理语言(PGQL)。我在“modern-sql.com”上的文章“Oracle 数据库 18c 中有什么新东西”仔细研究了18c版,并揭示了文档中未涉及的一些有趣的惊喜。
MariaDB 10.3
在MariaDB 10.2引入窗口函数和递归查询一年之后,版本10.3上线发布。我在modern-sql.com上发表了对MariaDB 10.3的评论:“MariaDB 10.3中的新功能”。
SQLite 3.25.05
SQLite 3.25.0引入了窗口函数,该引入与其他数据库的实现几乎相同。
PostgreSQL 11
PostgreSQL 11于10月发布。在其他功能(如JIT)中,它引入了具有帧排除功能的扩展窗口功能和组单元。这使得PostgreSQL成为第一个支持这些功能的主要SQL数据库!
原文:https://winand.at/newsletter/2018-12/consistency-cloud-jit
本文为 CSDN 翻译,如需转载,请注明来源出处。
【完】
责任编辑: