背景
根据 IDC(International Data Corporation,国际数据公司)的预测,全球数据量 Global DataSphere 到 2028 年将增长至 393.8 ZB,其中,非结构化数据占比 82.3%,是最主要的数据形式。
那么,非结构化数据究竟是什么呢?顾名思义,非结构化数据是指无法以预定义格式存储或融入现有数据模型的数据,例如我们熟知的文本、图像、音频、视频,同时,也包括各种不那么常见的非结构化数据,例如蛋白质结构、代码。与「非结构化数据」相对应的是「结构化数据」和「半结构化数据」,今天,我们来具体看看这三类数据的区别。
结构化数据
- 有预定义的格式、明确的schema
- 通过关系模型来存储
例如,图片库中每张图片的基本信息:图片id、类型、大小、创建时间。在表格中,每一行数据代表一张图片的信息。
结构化数据通常存储于关系型数据库,例如 MySQL 和 PostgreSQL。
半结构化数据
半结构化数据不拘泥于传统的基于表的模型,半结构化数据通常带有 key 或 标记,可用于描述和索引数据,例如 JSON、XML格式。回到上面关于图片的例子,我们可以将其扩展为半结构化 JSON 格式,每张图片可以保存不同的信息。
{
图片id: 0001
类型: JPEG
大小: 10MB
创建时间: 2025-06-01 10:00:00
拍摄地区: 内蒙古
描述:草原风景
},
{
图片id: 0002
类型: JPEG
创建时间: 2025-06-01 10:00:00
},
{
图片id: 0003
类型: JPEG
大小: 5MB
拍摄地区: 海南
},
...
半结构化数据通常存储于 NoSQL 数据库,例如 MongoDB 和 Redis。
非结构化数据
不同于结构化数据和半结构化数据,非结构化数据没有固定的格式。
再次回到上面关于图片的例子,图片本身,即非结构化数据。当然,除了图片,还有很多不同类型的非结构化数据,例如视频和音频等。
图1: 非结构化数据-图片
这时候,问题来了,我们应该如何存储和分析这些图片呢?也许我们可以将图片转换成二进制字符串,然后将它作为结构化数据或半结构化数据保存起来,但是这样,新的问题又出现了:
- 对于相似的图片,可能对应的二进制字符串差异很大,如何保证在搜索时,能够返回正确的结果呢?
- 当图片库有大量图片时,如何能够高效地进行搜索呢?
幸运的是,通过机器学习(深度学习),结合大数据和深度神经网络,目前已经有多种模型,可以将非结构化数据转化成 embedding,即非结构化数据的向量化表示。
[0.1322, 0.7632, 0.6518, ..., 0.8128, 0.2621, 0.9557]
所以,为了提高非结构化数据的搜索准确度和效率,通常会将其转化成向量,保存在向量数据库(例如 Milvus)中,对于非结构化数据的搜索,也转变为向量的搜索,即通过计算向量距离,来评估非结构化数据之间的相似度。