更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群

列式存储通过支持按列存储数据,提供高性能的数据分析和查询。作为云原生数据仓库的 ByteHouse,也采用列式存储设计,保证读写性能、支持事务一致性,又适用大规模的数据计算,为用户提供极速分析体验和海量数据处理能力,提升企业数字化转型能力。

列式存储介绍

分析型数据库中的列式存储,是一种数据库的物理存储结构,它是根据数据的列而不是行来存储数据的。列式存储的主要优势在于它能够提高数据分析和查询的性能,尤其是在处理大规模数据集时。

以下是列式存储的一些主要特点:

  1. 数据压缩: 由于同一列中的数据往往具有相似或相同的数据模式(例如日期、时间、地址等),因此列式存储可以更有效地进行数据压缩,从而节省存储空间。
  2. 数据筛选性能: 列式存储使得只读取查询所需的列变得非常高效。在执行大量涉及多列的复杂查询时,可以显著减少磁盘 I/O 操作,从而提高查询性能。
  3. 计算局部性: 由于数据按列存储,在进行某些计算(如数学运算或统计函数)时,数据可以直接在内存中进行局部操作,而不需要频繁地访问磁盘,从而提高了计算效率。
  4. 数据独立性: 列式存储允许独立地更新表中的列,这使得增量更新和数据维护变得更加简单和高效。
  5. 数据分片和分布式处理: 由于列式存储的特性,它非常适合于分布式计算环境。数据可以按列进行分片,并分布到不同的计算节点上进行并行处理,从而实现大规模数据的分布式处理和分析。
  6. 灵活的数据模型: 列式存储通常支持多种数据模型,如行存储、列存储和键-值存储,这使得它能够适应不同的数据处理需求。

ByteHouse 的列式存储设计

ByteHouse 是一款云原生数据仓库,为用户提供极速分析体验,能够支撑实时数据分析和海量数据离线分析,便捷的弹性扩缩容能力,极致分析性能和丰富的企业级特性,助力客户数字化转型。

通常事务型数据库采用行存便于支持事务和高并发读写,分析型数据库采用列存减少 IO 和便于压缩。ByteHouse 采用列存的方式,保证读写性能、支持事务一致性,又适用大规模的数据计算。

Data layout

表数据物理上按 Partition Key 切分为多个 Parts 存储在统一的云存储的逻辑存储路径下,每个 Part 的大小有数据量和行数限制,计算组根据服务节点分配的策略(预先分配和实时分配)获得其对应的部分 parts。

Part Delta

Part 数据最初构建之后是一个行列混合存储的 Part 数据文件,随着 DML/数据字典/Bitmap index 等构建工作的进行 Part 存在增量数据,这部分数据可以有以下两种存储方式:

  1. 每次构建都会 Rewrite Part 数据
  2. 生成增量数据,后台异步合并成一个大的 Part 文件

方案一对整个集群的可用性可能会有一定的影响:

1.每次 DML/数据字典等构建都可能涉及到整个表 Parts 的全量 IO 操作,这个代价比较大。

  1. 构建时间比较长 DML 等操作会比较长的时间才能做完,对用户不友好,我们采用方案二。

Part 文件内容

part 数据分为两个部分:

一是整个 Part 包括 rows/schema/column data 在数据文件中的 Offset 等元信息,这部分信息持久化存储并被计算节点缓存

二是实际的数据信息,这部分信息包含实际的 column bin 数据/column mrk 数据/Map key bin/Map key index/数据字典数据/bitmap index 数据等,数据按元信息中的 Offset 信息在 Part 的数据文件依次存储。

Compaction

ByteHouse 支持将一个 part 文件拆分为多个小文件,通过配置 Part 的最大 Size 和最大行数,Compact 之后的 Part 需要满足这个限制。

ByteHouse 中的 Compaction 是在全局做的,与前面提高的全局的 block ID 保持一致。

不仅仅是列式存储能力,ByteHouse 还在元数据管理、自研表引擎等技术点深度优化,为用户提供更极致的分析体验。

点击跳转ByteHouse了解更多

火山引擎ByteHouse:分析型数据库如何设计列式存储的更多相关文章

  1. 回首2018 | 分析型数据库AnalyticDB: 不忘初心 砥砺前行

    题记 分析型数据库AnalyticDB(下文简称ADB),是阿里巴巴自主研发.唯一经过超大规模以及核心业务验证的PB级实时数据仓库.截止目前,现有外部支撑客户既包括传统的大中型企业和政府机构,也包括众 ...

  2. 阿里下一代云分析型数据库AnalyticDB入选Forrester云化数仓象限

    前言 近期, 全球权威IT咨询机构Forrester发布"The Forrester Wave: CloudData Warehouse Q4 2018"研究报告,阿里巴巴分析型数 ...

  3. 阿里巴巴下一代云分析型数据库AnalyticDB入选Forrester Wave™ 云数仓评估报告 解读

    前言近期, 全球权威IT咨询机构Forrester发布"The Forrester WaveTM: CloudData Warehouse Q4 2018"研究报告,阿里巴巴分析型 ...

  4. 什么是分析型数据库PostgreSQL版

    分析型数据库PostgreSQL版(原HybridDB for PostgreSQL)为您提供简单.快速.经济高效的 PB 级云端数据仓库解决方案.分析型数据库PostgreSQL版 兼容 Green ...

  5. AnalyticDB - 分析型数据库

    https://yq.aliyun.com/teams/31?spm=5176.7937365.1120968.ee1.78505692UL9DhG 分析型数据库(AnalyticDB)是一种高并发低 ...

  6. 悠星网络基于阿里云分析型数据库PostgreSQL版的数据实践

    说到“大数据”,当下这个词很火,各行各业涉及到数据的,目前都在提大数据,提数据仓库,数据挖掘或者机器学习,但同时另外一个热门的名词也很火,那就是“云”.越来越多的企业都在搭建属于自己的云平台,也有一些 ...

  7. Linux系统:Centos7下搭建ClickHouse列式存储数据库

    本文源码:GitHub·点这里 || GitEE·点这里 一.ClickHouse简介 1.基础简介 Yandex开源的数据分析的数据库,名字叫做ClickHouse,适合流式或批次入库的时序数据.C ...

  8. 开源列式存储引擎Parquet和ORC

    转载自董的博客 相比传统的行式存储引擎,列式存储引擎具有更高的压缩比,更少的IO操作而备受青睐(注:列式存储不是万能高效的,很多场景下行式存储仍更加高效),尤其是在数据列(column)数很多,但每次 ...

  9. HBase 是列式存储数据库吗

    在介绍 HBase 是不是列式存储数据库之前,我们先来了解一下什么是行式数据库和列式数据库. 行式数据库和列式数据库 在维基百科里面,对行式数据库和列式数据库的定义为:列式数据库是以列相关存储架构进行 ...

  10. 【HBase】与关系型数据库区别、行式/列式存储

    [HBase]与关系型数据库区别 1.本质区别 mysql:关系型数据库,行式存储,ACID,SQL,只能存储结构化数据 事务的原子性(Atomicity):是指一个事务要么全部执行,要么不执行,也就 ...

随机推荐

  1. AtCoder ABC 165 D - Floor Function (Good, 手动模拟推出公式)

    题目链接:Here 题意: 给出正整数 \(A,B,N (1\le A\le 1e6,1\le B,N\le1e12)\) ,对于 \(x\in [0,N]\) 求出 \(\left\lfloor\f ...

  2. Problem 330A - Cakeminator (思维)

    330A. Cakeminator https://codeforces.com/problemset/problem/330/A 题意很容易理解:给定一块蛋糕区域,但蛋糕上有几个不能吃的草莓,大胃王 ...

  3. OKR之剑·实战篇05:OKR致胜法宝-氛围&业绩双轮驱动(上)

    作者:vivo 互联网平台产品研发团队 本文是<OKR 之剑>系列之实战第 5 篇-- 我们的OKR执行如此顺利,离不开我们的"双轮驱动".类似于亚马逊的"飞 ...

  4. 08.25北京站|阿里云Serverless 技术实践营( AI 专场)开放报名

    活动简介 阿里云 Serverless 技术实践营(AI 专场)是一场以聚焦企业级 AIGC 应用开发与落地展开的主题活动,活动受众以关注 Serverless 和 AI 技术的开发者.企业决策人.云 ...

  5. UNI-APP 使用Echart

    UNI-APP 使用Echart(含地图教程) https://blog.csdn.net/weixin_43548442/article/details/121468189 uniapp使用echa ...

  6. [吉他谱]duvet

  7. MySQL 及调优

    存储引擎的种类 MySQL 中存在多种存储引擎,比如: InnoDB 支持事务: 支持外键: 同时支持行锁和表锁. 适用场景:经常更新的表,存在并发读写或者有事务处理的业务场景. MyISAM 支持表 ...

  8. spring--JDK动态代理和CGLIB代理的区别

    JDK 动态代理和 CGLIB 代理是 Java 中常用的两种动态代理实现方式,它们各有特点和适用场景: JDK 动态代理: JDK 动态代理是基于接口的代理方式,它使用 Java 反射机制来创建代理 ...

  9. 如果诸葛亮会编程,用Java写出师表...

    继上一篇 "如果诸葛亮用C#写出师表..."后,站长想自己的第一语言是Java,虽然平时工作上用的不多,也用Java实现一遍吧,改改就是了,无非就是: C#的Console.Wri ...

  10. printf 函数格式控制

    Printf()介绍 printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出.标准输出,即标准输出文件,对应终端的屏幕.printf()申明于头文件stdio.h. 函数原型: in ...