使用InfluxDB进行基础设施监控 | 现场演示
Apache Parquet
Apache Parquet是一个开源的列式数据文件格式,支持不同的编码和压缩方案,以优化其在大批量数据存储和检索中的效率。
Apache Parquet是一个开源的列式数据文件格式,起源于Cloudera,专为复杂数据的快速数据处理而设计。最初是为了处理Apache Hadoop生态系统的数据交换而构建的,后来被Delta Lake、Apache Iceberg、InfluxDB等开源项目以及Hive、Drill、Impala、Presto、Spark、Kudu、Redshift、BigQuery、Snowflake、Clickhouse等大数据系统采用。其中许多项目围绕Parquet文件和弹性查询层构建,这些层处理这些文件。
Parquet支持在每列基础上使用不同的编码和压缩方案,这允许高效地存储和批量检索数据。字典和运行长度编码(RLE)也得到支持,以及包括数值数据、文本数据和类似JSON的结构化数据在内的广泛数据类型。Parquet是自描述的,允许在每列的基础上包含元数据(如模式、最小/最大值和Bloom过滤器)。这有助于查询计划和执行器优化从Paquet文件中读取和解析的内容。
此外,它基于Google发布的Dremel论文中首先描述的记录切碎和组装算法来构建嵌套数据结构。
Apache Parquet是Apache Arrow项目的一部分,因此它支持包括Java、C++、Python、R、Ruby、JavaScript、Rust和Go在内的多种语言。
Parquet的优点
性能 — 在执行查询时,可以扫描列的子集,从而减少I/O和计算量。每列元数据和压缩有助于这一点。
压缩 — 将同质数据组织到列中可以更好地压缩。字典和运行长度编码为重复值提供了高效的存储。
开源 — 有着强大开源生态系统,由一个充满活力的社区不断改进和维护。
Parquet如何存储数据
让我们用一个例子来看看Parquet如何在列中存储数据。以下是一个包含3个传感器ID、类型和位置信息的简单数据集。当你将其保存为行格式如csv或Arvo时,它看起来像这样
当你以Parquet列格式存储时,你的数据组织成以下形式,其中每种特定数据类型都在一列中
行格式易于理解,因为它是我们通常在电子表格中看到的典型格式。然而,对于任何类型的大规模查询,列格式都有优势,因为你可以查询查询所需的子集列。此外,存储更经济,因为像CSV这样的行存储没有像Parquet那样高效地压缩数据。
InfluxDB和Parquet文件格式
以下是一个我们将用来展示InfluxDB如何以Parquet文件格式存储时间序列数据的例子。
测量映射到一个或多个Parquet文件,标签、字段和时间戳映射到单独的列。这些列使用不同的编码方案以获得最佳的压缩。
此外,数据组织在非重叠的时间范围内。这里我们有3个相同测量但按3个不同时间分组的三份样本Parquet文件。
这可以执行更快的查询,因为它允许用户收集特定时间范围的数据。此外,以这种方式存储时间序列数据允许在需要时轻松删除数据以节省空间。
Parquet和互操作性
Parquet的开源特性及其在其他技术和生态系统中的广泛应用意味着,Parquet用户可以利用存储在Parquet文件中的时间序列数据在其他应用程序中。这使用户能够将时间序列数据的价值和效用扩展到以前不可能的区域和应用。