列式存储通过支持列式存储数据,提供高性能的数据分析和查询。 作为云原生数据仓库,ByteHouse还采用列式存储设计,保证读写性能,支持交易一致性,并应用于大规模数据计算,为用户提供极快的分析体验和海量数据处理能力,提升企业数字化转型能力。
列式存储简介
分析数据库中的列式存储是数据库的物理存储结构,它基于列而不是行来存储数据。 列式存储的主要优点是它能够提高数据分析和查询的性能,尤其是在处理大型数据集时。
以下是列式存储的一些主要功能:
数据压缩:由于同一列中的数据往往具有相似或相同的数据模式(例如,日期、时间、地址等),因此列式存储可以更有效地进行数据压缩,从而节省存储空间。
数据过滤性能:列式存储使仅读取查询所需的列非常高效。 在执行大量涉及多列的复杂查询时,可以显著减少磁盘IO操作,从而提高查询性能。
计算位置:由于数据以列形式存储,因此在执行某些计算(如数学算术或统计函数)时,数据可以直接在内存中本地操作,而无需频繁访问磁盘,从而提高了计算效率。
数据独立性:列式存储允许独立更新表中的列,这使得增量更新和数据维护更加简单和高效。
数据分片和分布式处理:由于列式存储的性质,它非常适合分布式计算环境。 数据可以按列分片,并分发到不同的计算节点进行并行处理,从而实现对大规模数据的分布式处理和分析。
灵活的数据模型:列式存储通常支持多种数据模型,如行、列、键值存储等,可以适应不同的数据处理需求。
Bytehouse 的柱式存储设计
ByteHouse是云原生数据仓库,为用户提供超快的分析体验,支持海量数据的实时数据分析和离线分析,便捷的弹性伸缩能力,极致的分析性能,丰富的企业级功能,帮助客户实现数字化转型。
通常,事务数据库使用行存储来支持事务和高并发读写,而分析数据库使用列存储来减少 IO 并促进压缩。 Bytehouse 使用列存储来保证读写性能,支持事务一致性,适用于大规模数据计算。
data layout
表数据根据分区键在物理上分为多个部分,并存储在统一云存储的逻辑存储路径中,每个部分的大小受数据量和行数的限制。
part delta
部分数据初始构建后,是以行列混合形式存储的部件数据文件,并且部分中有增量数据,构造了DML数据字典、位图索引等,这部分数据可以通过以下两种方式存储:
1.每个构建都会重写零件数据。
2.生成增量数据,并将背景异步合并到一个大型部分文件中。
方案 1 可能会影响整个群集的可用性
1.每次构建 DML 数据字典时,都可能涉及对整个表部件的完整 I/O 操作,这成本很高。
2.构建 DML 等操作需要很长时间才能完成,对用户不友好,所以我们使用解决方案 2。
零件文件内容
partdata 分为两部分:
首先,整个部分包含元信息,例如数据文件中行模式列数据的偏移量,由计算节点持久存储和缓存。
二是实际数据信息,包括实际的列箱数据、列mrk数据、地图键箱地图键索引数据、字典数据、位图索引数据等,数据根据元信息中的偏移信息存储在零件的数据文件中。
compaction
Bytehouse 支持将一个零件文件拆分为多个小文件,通过配置零件的最大尺寸和行数,需要满足该零件的最大尺寸和最大行数。
bytehouse 中的压缩是全局完成的,这与之前引发的全局块 ID 一致。
除了列式存储能力外,Bytehouse还优化了元数据管理、自研表引擎等技术,为用户提供更极致的分析体验。