SQL Server 2019微软数据平台的未来野心

21 世纪以来,数据平台的战场上烽火连天、精彩纷呈。所谓江山代有才人出,以 MongoDB、Redis、Neo4j 等为代表的 NoSQL 数据库和 Hive、Impala、Presto 等 Hadoop 体系大数据解决方案风头一时无两。在这些年轻后辈们的冲击之下,关系数据库作为数据架构的中坚力量,不但没有节节败退,近年反倒有王者归来、愈战愈勇之势。在如今各类关键系统的设计和架构中,关系型数据库仍然以稳定的表现和丰富的特性占据着核心地位。

SQL Server 是关系数据库中的杰出代表,是与 Oracle、DB2 齐名的企业级商用数据库“三巨头”之一。长达数十年的发展和磨砺,已让它非常成熟稳定;而跟随时代发展不断地融合技术新趋势,又使它非常全面。尤其上一个版本 SQL Server 2017 更是将此款传奇数据库带入了广阔的 Linux 世界,进一步拓展了它的潜在客户群体和使用场景。

我们大可先简单回顾 SQL Server 琳琅满目的丰富特性。在两年前的文章中我们提到,SQL Server 已经集传统行存储、可更新的列存储、内存表、图数据库、机器学习等十八般武艺于一身。这其中许多先进的特性,有些是开源数据库仍在苦苦追赶的领域,或是无法在同一个数据库中进行完美的集成。这正是商业数据库的价值所在:以高稳定性、高性能与高集成度赢得青睐,在帮助客户支撑解决关键业务问题的同时,亦能简化技术架构、减轻维护负担。

仅仅两年的时间,微软就在上一代的基础上发展构建出了全新的 SQL Server 2019,这样的迭代速度对于高度复杂的数据库系统而言颇为惊人。快节奏发布固然和如今业界普遍激进的版本策略有关,但大家也一定好奇,一个已经高度成熟的商业数据库系统,在这样短的时间里究竟能取得怎样的进步?又在哪些方面针对变幻莫测的市场作出了自己的回应呢?本文将与大家一同探索。

结合 SQL Server 2019 的新特性,我们接下来分别从核心引擎增强、数据虚拟化以及此版本最大亮点 SQL Server 大数据集群三个方面来进行分析和探讨。

核心引擎增强

我们首先从核心引擎部分说起。HTAP (Hybrid transaction/analytical processing) 混合负载能力是当今数据库世界的趋势,SQL Server 在这方面是行业引领者之一,之前版本已通过在单一引擎中完美集成行存储和列存储实现了对 OLTP 和 OLAP 工作负载的同时支撑。用户不但可以同时查询和连接行存和列存表,甚至可以为一个行存储表添加非聚集的列存储索引,使得单表能够同时较好地支持 OLTP 和 OLAP 两种工作模式和查询场景。

SQL Server 2019 中继续强化了对于混合负载能力的支持,通过润物细无声式的改进让相关引擎进一步成熟,也使得日常使用更为便捷。例如在列存储索引方面,现已允许在线地创建或重新构建 (REBUILD) 聚集列存储索引——这将大大方便生产环境中大型列存储表的维护和使用,既能节省存储空间,又能提高后续查询性能。在笔者接触的生产环境中就常有列存储表由于部分行的更新导致碎片问题,但为了保障线上业务的连续性,一直只能使用相对轻量的 REORGANIZE 命令进行简单的维护。该问题有望在数据库升级后彻底解决。

上一代 SQL Server 2017 中引入的图数据引擎在 SQL Server 2019 中也得到了相当幅度的增强。其改进既包括在存储层面支持图数据表和索引使用多 filegroup 进行分区,还新增了极为重要的任意长度模式 (Arbitrary Length Pattern) 支持,用户终于可以表达节点间任意次数的跳跃连通关系了。我们来看一个针对人物关系图的官方查询样例:
容易理解的是,该查询将能够帮助判断 Jacob 与 Alice 两人是否连通,并给出他们之间的最短关系路径,而这条路径的长度是不确定的。T-SQL 语法上的关键点在于 MATCH 子句:其中使用了一个 SHORTEST_PATH 方法来寻找计算图中两个给定节点间的最短距离。需注意该方法的输入参数支持类似正则表达式语法的不定长模式,通过一个 + 号巧妙地表达了通过 friendOf 关系多次连续寻路,被加号括起的 -(fo)->Person2 即为可多次重复的部分。

上述特性是图数据库应用最常见的高级查询场景之一,数学上被称为传递闭包 (transitive closure)。该特性的加入意味着 SQL Server 2019 在图查询能力方面终于登堂入室,开始逐渐具备与专用图数据库竞争的实力。

商用数据库一向对于硬件领域发展较为关注,不断通过最新的硬件最大化性能潜力。持久性内存 (Persistent Memory, 常缩写为 PMEM) 以其远优于 SSD 硬盘的 IO 能力,成为了当下服务器端硬件的热点之一,英特尔等厂商纷纷大力规划发展如 Optane DC 这样的企业级持久性内存硬件产品。为此,SQL Server 2019 不失时机地推出了混合缓冲池 (Hybrid Buffer Pool) 特性,可让持久性内存作为间于 DRAM 内存和 SSD 硬盘的存储层,在性能攸关的页面缓冲池上发挥显著的加速作用。用户选择开启此特性后,页面缓冲池可扩展到 PMEM 设备上的存储空间,SQL Server 则直接通过内存映射 IO 访问位于 PMEM 设备上的数据页。在许多情况下这样可避免数据页频繁地从传统磁盘拷贝到 DRAM,进行页访问时也能够绕过操作系统的存储协议栈开销,从而取得巨大的性能提升。

SQL Server 2019微软数据平台的未来野心

持久性内存与内存映射访问(来自微软官方文档)

值得一提的是,甲骨文将于明年发布的全新一代 Oracle 20c,同样会提供对于持久性内存的支持——在这一点上,可谓与 SQL Server 英雄所见略同。
我们再来看编程语言集成方面。以往扩展 SQL Server 功能是 C#/.NET 的专利,例如用户可以通过 SQL Server 的 CLR 集成调用.NET 编写的 UDF。随着微软近年来的开放策略持续推进,更多语言进入了 SQL Server 的体系。两年前我们曾介绍 SQL Server 2017 中集成了 Python/R 的环境以方便进行机器学习方面工作,而在 SQL Server 2019 中此次 Java 则成为了主要的集成和支持对象。通过全新的语言扩展体系 (SQL Server Language Extensions) 可使得 Java 类与方法直接在 SQL Server 服务器上本地执行。用户只需要实现微软 Java 扩展 SDK (Microsoft Extensibility SDK for Java) 中的抽象类 AbstractSqlServerExtensionExecutor 即可让自己封装的 Java 代码通过 sp_execute_external_script 存储过程在数据库 T-SQL 上下文中调用运行。

一个与 Java 支持相关的话题是,由于 Oracle 对于 Java 的版权控制和使用条款不断收紧,为避免 SQL Server 中内嵌 Oracle Java 环境带来不必要的限制和风险,微软近期与 Java 开源贡献者和发行商 Azul Systems 达成了一系列合作,使用 Azul Zulu JRE/JDK(基于 OpenJDK)作为 Azure 云和 SQL Server 上 Java 的默认选项。这样 Azure 和 SQL Server 的用户就可获得和使用一款免费且...

点击查看剩余70%

{{collectdata}}

网友评论0