探索文件存储
将数据存储在文件中的功能是任何计算系统的核心要素。 文件可以存储在个人电脑硬盘上的本地文件系统中,也可以存储在 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(二进制大型对象)。
已优化的文件格式
对于结构化数据和半结构化数据,虽然人类可读格式可能很有用,但它们通常没有针对存储空间或处理进行优化。 随着时间的推移,人们已经开发出了一些支持压缩、索引以及高效存储和处理的专用文件格式。
你可能会看到一些常见的优化文件格式,包括 Avro、ORC 和 Parquet:
Avro 是一种基于行的格式。 它由 Apache 创建。 每条记录都包含一个标头,用于描述记录中的数据结构。 此标头以 JSON 格式存储。 数据以二进制信息的形式存储。 应用程序使用标头中的信息来分析二进制数据,并提取其中包含的字段。 Avro 是一种不错的格式,用于压缩数据和最小化存储和网络带宽需求。
ORC(优化的行列式格式)将数据组织成列而不是行。 它是由 HortonWorks 开发的,用于优化 Apache Hive 中的读写操作(Hive 是一个数据仓库系统,支持对大型数据集进行快速数据汇总和查询)。 ORC 文件包含数据的带区。 每个带区都包含一列或一组列的数据。 带区包含对该带区中行的索引、每行的数据,以及保存着每列统计信息(count、sum、max、min 等)的脚注。
Parquet 是另一种列式数据格式。 它是由 Cloudera 和 X 创建的。Parquet 文件包含行组。 每列的数据一起存储在同一行组中。 每个行组都包含一个或多个数据块。 Parquet 文件包括描述在每个块中找到的行集的元数据。 应用程序可以使用此元数据快速找到给定行集的正确块,并为这些行检索指定列中的数据。 Parquet 专门用于有效地存储和处理嵌套数据类型。 它支持高效的压缩和编码方案。