欢迎投稿

今日深度:

SQL Server 2019 深度解读:微软数据平台的野望,

SQL Server 2019 深度解读:微软数据平台的野望,


本文为笔者在InfoQ首发的原创文章,主要利用周末时间陆续写成,也算近期用心之作。现转载回自己的公众号,请大家多多指教。

11 月 4 日,微软正式发布了其新一代数据库产品 SQL Server 2019,带来了大数据集群、数据虚拟化等重磅特性。本次发布距离上一个大版本 SQL Server 2017 不过短短两年时间,这样的迭代速度对于高度复杂的数据库系统而言颇为惊人。两年前 InfoQ 曾刊登长文《SQL Server 2017 正式发布,微软老牌数据库如何继往开来?》,此次我们再度与该文作者合作,为大家深度解读 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) 支持,用户终于可以表达节点间任意次数的跳跃连通关系了。我们来看一个针对人物关系图的官方查询样例:

SELECT PersonName, Friends
FROM (	
	SELECT
		Person1.name AS PersonName, 
		STRING_AGG(Person2.name, '->') WITHIN GROUP (GRAPH PATH) AS Friends,
		LAST_VALUE(Person2.name) WITHIN GROUP (GRAPH PATH) AS LastNode
	FROM
		Person AS Person1,
		friendOf FOR PATH AS fo,
		Person FOR PATH AS Person2
	WHERE MATCH(SHORTEST_PATH(Person1(-(fo)->Person2)+))
	AND Person1.name = 'Jacob'
) AS JacobReach
WHERE JacobReach.LastNode = 'Alice'

容易理解的是,该查询将能够帮助判断 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,进行页访问时也能够绕过操作系统的存储协议栈开销,从而取得巨大的性能提升。

CREATE DATABASE SCOPED CREDENTIAL MongoCredential WITH IDENTITY = 'username', SECRET = 'password'; CREATE EXTERNAL DATA SOURCE MongoDBSource WITH ( LOCATION = 'mongodb://<server>[:<port>]', PUSHDOWN = ON, CREDENTIAL = MongoCredential ); CREATE EXTERNAL TABLE MyMongoCollection( [_id] NVARCHAR(24) NOT NULL, [column1] NVARCHAR(MAX) NOT NULL, [column2] INT NOT NULL -- ..., other columns to be mapped ) WITH ( LOCATION='dbname.collectionname', DATA_SOURCE= MongoDBSource );

可以看到,通过 T-SQL 对凭证 (credential)、数据源 (data source)、外部表 (external table) 这三个核心配置进行定义,就可以轻松地将 MongoDB 中的集合与字段映射到 SQL Server 中来,后续即可对虚拟的外部表进行查询。PolyBase 甚至还支持 MongoDB 中的对象、数组等嵌套结构,允许在外部表定义时将复杂字段打平。另外,虽然此处所举的例子是针对 MongoDB,若需连接其他类型数据源,配置的步骤也大致类似,只是相关参数的含义和形式有所不同。

值得注意的是,PolyBase 加持下的外部表使用起来与一般数据表无异,能够与其他表进行 join 等操作,这大大方便了异构数据源之间的集成,许多情况下能够免除数据搬运的麻烦。当然,对于一些出于性能原因不便直接查询的场景,也可用简单的 SQL 语句将外部表数据方便地同步到 SQL Server 内部。

在技术实现层面,PolyBase 由于脱胎于 MPP 架构场景,所以其实具备很好的并行扩展能力——当远端数据体量巨大时这一特性殊为重要,能够极大地加速查询的执行。用户可以设立多个 SQL Server 实例(分为头节点和计算节点)并编组为 PolyBase Scale-out Group 来协同工作,对外部大数据进行并行读取和处理。从这个层面来看,PolyBase 模块已使 SQL Server 具备了分布式分析型数据库的一些典型特征。

“云间拾遗”专注于从用户视角介绍云计算产品与技术,坚持以实操体验为核心输出内容,同时结合产品逻辑对应用场景进行深度解读。欢迎扫描下方二维码关注“云间拾遗”微信公众号。

www.htsjk.Com true http://www.htsjk.com/Sql_Server/40080.html NewsArticle SQL Server 2019 深度解读:微软数据平台的野望, 本文为笔者在InfoQ首发的原创文章,主要利用周末时间陆续写成,也算近期用心之作。现转载回自己的公众号,请大家多多指教。 11 月...
相关文章
    暂无相关文章
评论暂时关闭