探索文件存储
将数据存储在文件中的功能是任何计算系统的核心要素。 文件可以存储在个人电脑硬盘上的本地文件系统中,也可以存储在 U 盘等可移动媒体上;但在大多数组织中,重要的数据文件集中存储在某种共享文件存储系统中。 此中心存储位置越来越多地托管在云中,从而为大量数据提供具有成本效益、安全和可靠的存储。
用于存储数据的特定文件格式取决于许多因素,包括:
- 存储的数据类型(结构化、半结构化或非结构化)。
- 需要读取、写入和处理数据的应用程序和服务。
- 数据文件需要是人类可读的,或是针对有效存储和处理进行了优化的。
下面讨论一些常见的文件格式。
带分隔符的文本文件
数据通常以带有特定字段分隔符和行终止符的纯文本格式存储。 最常见的定界数据格式是逗号分隔值 (CSV) 格式,其中的字段由逗号分隔,行则以回车符/换行符结束。 (可选)第一行可以包括字段名称。 其他常见格式包括制表符分隔值 (TSV)、空格分隔(其中制表符或空格用于分隔字段)和固定宽度数据(其中为每个字段分配固定数量的字符)。 对于需要由各种应用程序和服务以人类可读格式访问的结构化数据,分隔文本是一个不错的选择。
以下示例以逗号分隔的格式显示客户数据:
FirstName,LastName,Email
Joe,Jones,joe@litware.com
Samir,Nadoy,samir@northwind.com
JavaScript 对象表示法 (JSON)
JSON 是一种广泛使用的格式,其中使用分层文档模式来定义具有多个属性的数据实体(对象)。 每个属性都可以是一个对象(或对象的集合);使 JSON 成为一种适用于结构化数据和半结构化数据的灵活格式。
以下示例显示包含客户集合的 JSON 文档。 每个客户都有三个属性(firstName、lastName 和 contact),而 contact 属性包含表示一种或多种联系方式(电子邮件或电话)的一组对象。 对象括在大括号({..})中,集合用方括号([..])括起来。 属性由 name:value 对表示,并以逗号 (,) 分隔。
{
"customers":
[
{
"firstName": "Joe",
"lastName": "Jones",
"contact":
[
{
"type": "home",
"number": "555 123-1234"
},
{
"type": "email",
"address": "joe@litware.com"
}
]
},
{
"firstName": "Samir",
"lastName": "Nadoy",
"contact":
[
{
"type": "email",
"address": "samir@northwind.com"
}
]
}
]
}
Extensible Markup Language (XML) — 可扩展标记语言 (XML)
XML 是一种人类可读的数据格式,曾在 20 世纪 90 年代和 21 世纪初非常流行。 此格式基本上已被不那么冗长的 JSON 格式所取代,但仍有一些系统使用 XML 来表示数据。 XML 使用用尖括号 (../) 括起来的标记来定义元素和属性,如以下示例所示<>:
<Customers>
<Customer name="Joe" lastName="Jones">
<ContactDetails>
<Contact type="home" number="555 123-1234"/>
<Contact type="email" address="joe@litware.com"/>
</ContactDetails>
</Customer>
<Customer name="Samir" lastName="Nadoy">
<ContactDetails>
<Contact type="email" address="samir@northwind.com"/>
</ContactDetails>
</Customer>
</Customers>
二进制大型对象 (BLOB)
最终,所有文件都存储为二进制数据(1 和 0),但在上面讨论的人类可读格式中,二进制数据的字节被映射到可打印字符(通常情况为字符编码方案,如 ASCII 或 Unicode)。 然而,一些文件格式(特别是对于非结构化数据)将数据存储为必须由应用程序解释和呈现的原始二进制文件。 以二进制形式存储的常见数据类型包括图像、视频、音频和特定于应用程序的文档。
在处理此类数据时,数据专业人员通常将数据文件称为 BLOB(二进制大型对象)。
已优化的文件格式
对于结构化数据和半结构化数据,虽然人类可读格式可能很有用,但它们通常没有针对存储空间或处理进行优化。 随着时间的推移,人们已经开发出了一些支持压缩、索引以及高效存储和处理的专用文件格式。
你可能会看到的一些常见的优化文件格式包括 Parquet 和 Avro:
- Parquet 是一种列式数据格式,也是现代数据湖仓的事实标准。 它是一个 Apache 项目。 Parquet 文件包含行组。 每列的数据一起存储在同一行组中。 每个行组都包含一个或多个数据块。 Parquet 文件包括描述在每个块中找到的行集的元数据。 应用程序可以使用此元数据快速找到给定行集的正确块,并为这些行检索指定列中的数据。 Parquet 专门负责高效存储和处理嵌套数据类型,并支持高效的压缩和编码方案。
- Avro 是一种基于行的格式。 它由 Apache 创建。 每个文件都包含一个标头,用于描述文件中数据的结构。 此标头以 JSON 格式存储。 数据以二进制信息的形式存储在一个或多个记录块中。 应用程序使用标头中的信息来分析二进制数据,并提取其中包含的字段。 Avro 是一种不错的格式,用于压缩数据和最小化存储和网络带宽需求。
- Delta Lake 是一种开源存储格式,基于 Parquet,并增加了事务日志,从而支持 ACID 事务、数据版本管理以及对存储在数据湖中的文件进行可靠更新。