在这个数据驱动的时代,我们每天都在与海量信息打交道。从结构化的数字表格到复杂的JSON 对象,再到自由形式的文本内容,数据的多样性前所未有地丰富。
然而,这种多样性同样带来了挑战:如何有效地存储、管理和分析这些不同格式和结构的数据?传统的数据库系统往往只擅长处理某一类型的数据,但在现实世界中,我们需要一种更加灵活、全能的解决方案来应对这一挑战。
在这一背景下,多模型数据库管理系统 (Multi-model DBMSs) 应运而生。在这篇技术博客中,我们将深入探讨 Jiaheng Lu 和 Irena Holubová 在他们的研究论文《Multi-model Databases: A New Journey to Handle the Variety of Data》 中提出的多模型数据库概念。这篇论文不仅为我们揭示了多模型数据库的设计理念,还展示了它们如何帮助我们跨越数据多样性的障碍,开启数据处理的新篇章。让我们一起踏上这段旅程,探索这一创新技术如何为现代数据管理带来革命性的变革。
在数据管理领域,数据的多样性是研究和实践中最具挑战性的问题之一。数据以不同的格式和模型自然组织,包括结构化数据、半结构化数据和非结构化数据。该论文综述性的介绍了多模型数据库管理系统 (Multi-model DBMSs) ,这些系统构建了一个单一的数据库平台来管理多种模型的数据。尽管多模型数据库是一个新兴领域,但近年来,我们已经见证了许多数据库系统开始采用这一类别。该论文提供了对当前最流行的多模型数据库的一般分类和多维度比较,并从技术和应用的角度全面介绍了现有的方法和开放问题。
引言
在数据管理领域,数据多样性的问题日益凸显,成为研究和实践中的一大挑战。数据以多种形式存在,包括结构化数据、半结构化数据和非结构化数据。该论文指出,随着对多模型数据进行分析和操作的需求不断增长,传统的单一模型数据库系统已难以满足需求,因此,多模型数据库管理系统 (Multi-model DBMSs) 应运而生。这类系统能够整合多种数据模型,构建一个统一的数据库平台来管理不同类型的数据。
为了更好地展示多模型数据管理的复杂性,该论文提供了一个电子商务场景示例(详见图1)。该示例阐释了如何使用四种不同的数据模型来存储客户信息、社交网络关系、订单详情以及它们之间的键/值对关系。
具体来说,客户信息以关系型表格的形式存储,包括客户ID、姓名和信用额度;社交网络关系通过图数据模型表示,揭示了客户之间的相互联系;订单信息则以 JSON 文档的形式存在,记录了订单 ID 和一系列商品的详细信息,如产品编号、名称和价格;最后采用键/值对数据模型展示了客户与订单之间的关系。这些信息分别采用了关系型表、图数据、JSON 文档和键/值对四种不同的数据模型。
在上述多模数据场景中,人们可能会关注如下一个推荐查询:“查询当前客户信用额度超过3000的所有朋友订购的商品编号”。该查询根据选定的存储策略可以使用多种评估策略。例如,上述数据可以存储在对应四种数据模型的不同数据库管理系统(DBMS) 中,也可以将四种类型的数据转换为单一格式(如关系格式),并存储在关系数据库系统中。
然而,在前一种情况下,我们需要解决(1)安装和管理多个不同系统的问题,以及(2)如何对存储在不同系统的数据进行连接的问题。在后一种情况下,尽管将层次结构或图形数据存储在关系型 DBMS 中是可行的,但由于与关系模型固有的结构差异,查询评估的效率很可能会遭遇瓶颈。
针对上述任务,除了上述选择外,我们还可以采用一个单一的多模数据管理系统来同时保持前两个解决方案的优势:
- 数据以最适合特定模型的方式存储;
- 仅使用一个 DBMS 即可方便地跨所有模型进行查询。对于用户而言,单一的多模型数据平台不仅提供了一个统一的查询接口,还简化了查询操作,减少了集成问题,并消除了迁移问题,因此非常有益。
这个示例不仅说明了在日常实际场景中多模型数据的多样性,也突显了多模型数据库在整合和管理这些数据方面的优势。
在引出多模数据库系统后,作者总结认为当前存在两种管理和查询多模数据的方式:混合持久化 (polyglot persistence) 和多模型数据库。其中,混合持久化的主要策略是通过使用不同的数据库来存储不同模型的数据,然后开发一种中间件来集成这些数据库以支持上层查询。而多模型数据库则通过构建一个单一的、完全集成的后端数据库来管理不同的数据模型,以满足性能、可扩展性和容错性的需求。
接下来,该论文将对多模型 DBMSs 进行详细介绍,并对现有多模型 DBMSs 的多维度比较,以及对关键特性的详细概述。
常见数据模型介绍
在正式介绍之前,该论文首先简要回顾了大多数多模型数据库支持的四种数据模型,包括关系型模型、半结构化模型、键/值模型和图模型,具体如下:
关系型模型(Relational Model)
- 基于数学上的关系概念,数据以元组的形式逻辑上表示为关系。每个关系记录都通过一个键唯一标识。关系型数据可以通过声明性方法定义和查询,目前主要由结构化查询语言(SQL)来实现。关系型数据库系统确保数据的存储和检索。关系型数据库的例子包括金融和银行系统、计算机化的医疗记录和在线购物。
<br/>
- 基于数学上的关系概念,数据以元组的形式逻辑上表示为关系。每个关系记录都通过一个键唯一标识。关系型数据可以通过声明性方法定义和查询,目前主要由结构化查询语言(SQL)来实现。关系型数据库系统确保数据的存储和检索。关系型数据库的例子包括金融和银行系统、计算机化的医疗记录和在线购物。
半结构化模型(Semi-structured Model)
- 基于没有显式和独立模式定义的数据表示理念。数据以元素的形式表达,这些元素通过标签界定,可以包含简单文本、子元素或它们的组合。这种表示方式使得数据的加工和交换更加灵活。两种代表性的半结构化数据类型包括 XML 和 JSON。
<br/>
- 基于没有显式和独立模式定义的数据表示理念。数据以元素的形式表达,这些元素通过标签界定,可以包含简单文本、子元素或它们的组合。这种表示方式使得数据的加工和交换更加灵活。两种代表性的半结构化数据类型包括 XML 和 JSON。
键/值模型(Key/value Model)
- 键/值模型是 NoSQL 数据库中使用的最简单的数据模型。它对应于关联数组、字典或散列。键/值模型中的每条记录由一个任意值及其唯一键组成,可以高效地存储、检索或修改值,尽管这以缺乏强大的查询语言为代价。
<br/>
- 键/值模型是 NoSQL 数据库中使用的最简单的数据模型。它对应于关联数组、字典或散列。键/值模型中的每条记录由一个任意值及其唯一键组成,可以高效地存储、检索或修改值,尽管这以缺乏强大的查询语言为代价。
图模型(Graph Model)
- 图数据模型基于图的数学定义,即一组顶点(节点)V和边E,对应于 V 中的顶点对。在大数据领域,存在一种特殊类型的数据库,称为图数据库,专门用于高效存储和管理图数据。图数据库可以进一步区分为事务型数据库和非事务型数据库,分别对应于不同的图数据使用案例。
<br/>
- 图数据模型基于图的数学定义,即一组顶点(节点)V和边E,对应于 V 中的顶点对。在大数据领域,存在一种特殊类型的数据库,称为图数据库,专门用于高效存储和管理图数据。图数据库可以进一步区分为事务型数据库和非事务型数据库,分别对应于不同的图数据使用案例。
现有多模数据库比较分类
在本章节,作者主要对当前已有多模型数据库系统基于不同的分类标准进行了详细的分类和比较。
首先,在表1中提供了基于各个系统原始(或核心)数据模型的分类。如下所见,共涉及关系型、列存型、Key-value型、文档型、图型、对象型以及其他类型等,并详细列举了每种原始类型数据模型对应的代表性数据库系统。
为了让大家对多模数据库系统的发展有一个更加直观的认识,作者在论文中提供了截止论文发表前已有多模数据库的推出时间线,详见图3。这些多模数据库既包含由单模系统扩展至多模系统产品,也包含原生多模数据库产品。
其次,不同于表1的划分标准,作者在表2中根据基于原始模型扩展或基于原始模型的多模组合等不同策略进一步对现有多模数据库系统进行了分类,主要区分了四种不同的类型:
- 采用完全新的存储策略,适用于新的数据模型(或模型):典型的是使用原生 XML 方法有效存储和查询 XML 数据的 XML 型数据库。
<br/> - 扩展原始存储策略,以适应新的数据模型(或模型):典型的例子包括使用特殊边集合来存储图中边信息的文档数据库 ArangoDB 和 MongoDB。
<br/> 为原始存储策略创建新的接口:典型的例子包括:
- Sinew:其在传统的关系存储策略之上构建了一个新的层。
- MarkLogic:像存储XML文档一样存储 JSON 文档,支持使用 XQuery 处理 JSON 数据。
<br/>
- 原始存储策略没有变化:这种类型在表格中并未有所体现,主要包括那些原始存储模型和数据逻辑复杂于其他扩展数据模型的数据库系统。例如,所有的文档型数据库都可以被认为是 Key-Value 型和列存库,或者所有的列存库都可以被认为为 Key-value 型数据库。
接着,作者在上述分类基础上向大家提供了已有多模型数据库管理系统所支持数据模型的全面概览,详见表3。在这张表中,每个数据库系统根据其支持的数据模型类型进行了标记,反映了不同系统在处理多种数据模型方面的能力。例如,传统关系型数据库 PostgreSQL 和 SQL Server 除了对基础关系模型的支持外,还支持 JSON 和 XML 等半结构化数据模型。此外,该表还在最后一列给出了这些数据库系统的受欢迎程度指标,其统计数据来源于2018年11月 DB-Engines Ranking ,统计依据为不同数据库在技术社区中的讨论频率、网站提及数量等数据指标。
进一步的,在表3宏观分类的基础上,作者继续深入聚焦于特定多模数据库系统的关键特性,形成表4-8。
其中,表4和表5聚焦的关键特性包括:
- 支持的数据格式:列出了每种数据库管理系统支持的数据类型,如关系型、键/值对、JSON、XML等。
- 存储策略:描述了每种数据类型所使用的存储机制,例如关系型表、稀疏表、列存储等。
- 查询语言:展示了每种数据库支持的查询语言,包括扩展的 SQL、CQL、AQL等。
- 索引类型:介绍了为了优化查询评估而支持的索引类型,如 B-tree、哈希、全文索引等。
表4提供了一个全面的视角来比较不同多模型数据库的关键特性。它揭示了各种数据库如何在支持多种数据格式的同时,采用不同的存储策略和查询语言来满足用户的多样化需求。例如,关系型数据库如 PostgreSQL 和 SQL Server 通过扩展 SQL 来支持 JSON 和 XML 等格式,而 NoSQL 数据库如 Cassandra 和 DynamoDB 则采用了更适合其数据模型的查询语言,如 CQL 和简单的 API 调用。
表5继续了对多模型单一数据库管理系统 (Multi-model Single-database DBMSs)的比较,特别是针对那些在表4中未详尽讨论的系统。表5扩展了对多模型数据库的比较,涵盖了更广泛的数据库类型,特别是那些专注于特定数据模型如图形或对象的系统。这些数据库通常针对特定类型的数据和查询进行了优化,提供了专门的查询语言和索引机制来满足这些需求。
表6在论文中提供了对多模型单一数据库管理系统(Multi-model Single-database DBMSs)的进一步比较,主要关注以下几个方面的功能特性:
- 数据分片(Data distribution):指明数据库是否支持将数据分布到多个节点上,以提高可扩展性和可用性。
- 灵活的模式(Flexible schema):描述数据库是否允许存储没有预定义模式的数据,这通常与NoSQL数据库相关。
- 跨模型查询(Queries across models):指出数据库是否支持使用单一查询语言跨不同数据模型进行查询。
- 云版本(Version for cloud):表明是否有为云环境设计的数据库版本,这通常与数据库即服务(Database as a Service, DaaS)相关。
- 多模型事务(Multi-model transactions):如果数据库支持跨不同数据模型的事务处理,这在多模型数据库中是一个重要的特性。
表7专注于多模型数据库管理系统中使用的 SQL 扩展和 SQL 类语言的概览,揭示了多模型数据库如何扩展 SQL 以适应多样化的数据查询需求。无论是关系型数据库增强对 JSON 和 XML 的支持,文档型数据库对 JSON 的查询能力,键/值型数据库的 SQL 类语法,列存储型数据库对复杂数据结构的查询,还是图型数据库的点表示法以及对象型数据库的对象引用,都体现了对 SQL 语言的创新性适应,使得开发者能够跨数据模型高效地工作。
表8概述了不同多模型数据库管理系统(DBMS)在处理非原生支持数据模型时所采用的查询优化技术。最常见的查询优化是 B 树及 B+ 树索引,特别是在关系型数据库中。此外,支持 XML 数据的系统还利用了一种原生 XML 索引,最常见的是基于 ORDPATH 的方法,该方法能够实现高效的查询和数据更新。通过对比,可以看出,目前似乎没有公认的适用于多模型查询优化的最优或次优方法。不同的方法通常与系统向其他数据模型扩展的方式高度相关。
深入观察多模型数据库的代表
在完成多模数据库系统宏观层次的关键特性比较后,作者在该章节进一步深入分析了多模型数据库的不同代表系统,并根据它们的核心数据模型进行了分类。每种类型的数据库都有其独特的特点和优化方法,以适应不同种类的数据存储和查询需求。这一部分的目的是为读者提供一个全面的视角,以了解每种多模型数据库系统的关键特性和它们在实际应用中的优势。通过详细的比较和分析,读者可以更好地理解不同系统之间的差异,并为特定应用场景选择合适的数据库技术。这里我们仅对各种代表性数据库进行总结,其详细剖析过程不予赘述。
1. 关系型存储
关系型存储占多模数据库系统中最大比例,这部分主要讨论了 PostgreSQL、SQL Server、IBM DB2、Oracle 和 MySQL 等关系型数据库,它们通过扩展 SQL 标准来支持 XML、JSON 等非关系型数据格式,提供了对多模型数据的支持。
2. 列存储
除关系型存储外,另一个代表性多模数据库类型,主要介绍了 Cassandra、CrateDB、DynamoDB和 HPE Vertica 等列存储数据库,它们通过列式存储优化了分析型工作负载,并提供了对半结构化数据的支持。
3. 键/值存储
键/值存储是复杂度最低的 NoSQL 数据库,仅支持简单但快速的存取接口,通常在 value 部分提供更为复杂的操作,主要探讨了如 Riak 和 Oracle NoSQL Database 等键/值数据库,它们通过简单的数据模型提供高性能的数据访问,并逐步增加了对更复杂数据结构的支持。
4. 文档存储
文档存储可以被看做一种具有复杂 value 的高级 Key-value 存储,主要分析了如 ArangoDB、Couchbase 和 MongoDB 等文档数据库,它们以 JSON 或类似格式存储复杂的文档,并提供了灵活的查询能力。
5. 图存储
图存储主要讨论了如 OrientDB 等图数据库,它们专门用于存储和查询图结构数据,并提供了图遍历和查询的特定优化。
6. 对象存储和其他多用例存储
对象存储和其他多用例存储简要提及了对象数据库如 InterSystems Caché 和多用例数据库如 SAP HANA DB,它们虽然不是纯粹的多模型数据库,但提供了适用于多种数据模型的存储解决方案。
结论
多模型数据库通过提供单一平台来管理不同类型的数据,包括结构化、半结构化和非结构化数据,已经显示出其在数据管理领域的潜力和实际应用价值。尽管这一领域相对较新,但已经有许多数据库系统开始采用多模型方法,显示出其在解决数据多样性问题上的有效性。论文通过广泛的分类和多维度比较,为读者提供了对现有多模型数据库技术的深入理解,并指出了这一领域面临的挑战和未来的研究方向。
作者强调,尽管多模型数据库领域已经取得了一定的进展,但要实现一个成熟且健壮的多模型 DBMS,与现有的关系数据库解决方案相比,仍然有很长的路要走。论文旨在促进研究和工业界的努力,以抓住机遇并解决在开发全面多模型数据库系统中的挑战。最终,作者呼吁更多的研究和实践,以推动多模型数据库技术的发展,满足日益增长的数据处理需求。
展望
该论文发表于2019年,随着时间的推移,多模数据库系统及其相关技术也已经有了长足的进步。根据 CCF 数据库专委会2021年发布的《“十四五”数据库发展趋势与挑战》可以看出,多模态数据管理在统一建模、统一存储、查询优化、并发控制等方面还存在着众多挑战性问题。以多模查询处理为例,现有语言只是针对某几个特定模型设计,缺乏多模态数据查询的“世界语”,关联查询、溯源查询和预测查询能力有限,查询优化没有充分利用多模态数据的丰富语义关系。多模态数据管理未来发展趋势主要包括:
- 多模态数据建模:将由目前的以关系为中心逐步转为以对象为中心,更多地关注非结构化数据的语义建模,强调数据与操作的可封装性、多重分类和动态分类。
<br/> - 多模态数据管理:将由目前的各种模态数据存储引擎协同工作转换为单一功能强大的存储引擎集中高效管理。
<br/> - 多模态数据查询:将由目前的 SQL 语言表达的集合运算发展到自然语言处理的关联计算。
<br/>
时间来到2024年的当下,随着工业物联网、5G等技术的发展与成熟,数据生产者正快速由人类转变为智能传感器,数据规模也在急速扩张。与3-5年前相比,数据规模更大、数据产生速度更快、数据更加多样性。如何将智能传感器源源不断产生的数据和传统的企业管理和交易数据纳入一体化管理,降低系统建设成本,消除数据孤岛现象成为摆在各个企业单位面前的一道必答题。
为了答好这道必答题,突破被国外数据库占领市场的卡脖子困境,国产数据库厂商纷纷推出自研的多模数据库系统,KaiwuDB 作为一款面向 IoT 场景的分布式多模数据库产品,支持时序、关系和通用机器学习等多种计算操作和跨模查询,在 NewSQL 分布式架构下,构建有时序引擎、联机事务处理引擎、联机分析处理引擎和 AI 预测分析等计算引擎和基于 Key-value 的行列混合存储引擎,能够一站式高效满足 IoT 场景用户的多样化数据管理需求。
在业界多模数据库蓬勃发展的大背景下,中国信息通信研究院联合超过30家企业,依托学术界和产业界的深度融合,共同编制了《多模数据库技术要求》,形成标准体系。本标准覆盖基本能力、管理能力、安全性、兼容性、扩展性、高可用共6大能力域,共计33个测试项目,包括21个必选项和12个可选项,成为业内首个多模数据库产品标准。
根据大数据技术标准推进委员会最新发布的《数据库发展研究报告(2024年)》显示,人工智能技术的高速发展,使得对于视频、音频、图片和文本等多模态数据处理与分析以及跨模访问成为当前业界重点关注的多模数据研究方向。例如,康奈尔大学提出一项 ThalamusDB 研究成果,其支持通过自然语言的形式对多模态数据进行近似查询,实现将图片、文本以及音频等信息作为查询字段建立模型寻找满足用户需求的相关产品。然而上述研究依然处于学术探索阶段,融合人工智能,研发实现统一建模、统一存储和统一查询优化的高性能智能多模数据库系统产品依然任重道远。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。