实时数仓核心技术点:列式存储

实时数据仓库分享
2024/4/25
SelectDB

实时数仓的存储方式有行式存储和列式存储,所谓行式存储,指存储结构化数据时,在底层的存储介质上,数据是以行的方式来组织的,即存储完一条记录的所有字段,再存储下一条数据的所以字段,以此类推;

所谓列式存储,指存储结构化数据时,在底层的存储介质上,数据时以列的方式来组织的,即存储完若干条记录的首个字段后,再存储这些记录的第二个字段,然后是这些记录的第三个字段,以此类推,当这些记录的所有字段存储完毕后,再按照这种方式,组织存储下一批若干条记录的所有字段;

举个例子要存储某个企业的姓名、性别、年龄信息,行式存储如下:

男.PNG

列式存储如下:

女.PNG

以上只是示意图,实际存储时,往往还会存储一些元数据,比如校验信息,统计信息等等;(列式存储往往会存储更多的元数据信息,以便于检索/查询/统计等)

行存储与列存储,存储的都是结构化数据;(非结构化数据,就无所谓行和列了)

行存储和列存储,描述的是底层存储介质上,数据的组织形式,而存储介质可以是磁盘,也可以是内存;存储介质的上次建筑,可以是文件系统,也可以是对象存储;

很多数据库,在底层即支持行存储(MySQL、Oracle、SQL Server等),也支持列存储(Parquet、ORC、ClickHouse、HBase等),这两者有时是同时混合使用的;(比如 SelectDB, 底层同时支持行存储引擎和列存储引擎);

场景优化的存储模型有三种:

aggregate key模型:相同key列value列合并,通过提前聚合大幅提升性能; unique key模型:key唯一,相同key的数据覆盖,实现行级别数据更新; duplicate key模型:明细模型;

男女.PNG

行、列存储的优缺点

列式存储 优点:查询时只有涉及到的列会被读取,投影(Projection)很高效,任何列都能作为索引,另外还具有更好的压缩比; 缺点:选择完成时,被选择的列要重新组装,INSERT/UPDATE比较麻烦;

行式存储: 优点:是数据被保存在一起,INSERT/UPDATE容易; 缺点:选择(Selection)时即使只涉及某几列,所有数据也都会被读取;

列式存储主要适用场景:

数据分析:列式存储数据库非常适合处理大型数据集,特别是在需要对数据进行聚合和分析时。传统的行式存储数据库需要读取整行数据才能提取所需信息,而列式存储数据库只需要读取所需列的数据,这样可以大大提高数据处理的速度。这种方式适用于需要处理海量数据的企业,如金融、医疗、电信和电子商务等领域。

实时数据处理:列式存储数据库可以实现实时数据处理,这种方式非常适合需要实时监控和分析数据的应用程序。例如,监控银行交易、电信网络流量和物流运输等领域,都需要实时处理大量数据以保持业务运行的稳定性。

业务分析:列式存储数据库在处理大型数据集时具有显著优势,特别适合进行深度业务分析。通过对数据的聚合和分析,企业能够挖掘出隐藏在数据中的有价值信息,为业务决策提供有力支持。列式存储数据库的高查询速度和数据处理效率使得业务分析变得更加高效和准确。

在线报表:在线报表通常需要快速响应并展示大量数据。列式存储数据库通过仅读取所需列的数据,减少了不必要的数据读取,从而提高了报表的生成速度。此外,列式存储数据库还具有较高的数据压缩率,能够节省存储空间,进一步加快报表的加载和展示速度。

用户行为分析:在数字化时代,用户行为分析成为企业了解用户需求、优化产品和服务的重要手段。列式存储数据库能够处理海量的用户行为数据,并通过高效的数据分析技术,帮助企业揭示用户的行为模式、兴趣偏好等信息,为精准营销和个性化服务提供数据支持。

用户画像:用户画像是企业了解用户特征、构建精准用户群体的重要手段。列式存储数据库在处理用户画像数据时具有天然优势。由于其以列为单位存储数据,可以方便地提取和分析用户的各种属性信息,如年龄、性别、地域、消费习惯等。同时,列式存储数据库的高压缩率和查询效率也使得用户画像的构建和分析更加高效和准确。

adhoc分析:Adhoc分析是一种灵活的数据分析方法,通常需要根据不同的业务需求进行即时的数据查询和分析。列式存储数据库能够快速响应这类分析需求,提供实时的数据分析结果。其高效的数据处理能力使得Adhoc分析变得更加轻松和高效。

数据湖分析加速:数据湖是企业存储和管理海量数据的重要工具。然而,随着数据量的不断增长,数据湖的分析性能可能会受到影响。列式存储数据库可以作为数据湖的分析加速层,通过对数据进行高效的列式存储和查询,提高数据湖的分析性能。这使得企业能够更快地获取数据的洞察和价值,加速业务决策和创新。

行式存储主要适用于以下场景:

需要进行频繁的随机增删改查操作。由于行式存储将数据按行组织,因此在进行此类操作时具有优势;

需要在行中选取所有属性进行查询的操作。当查询需要涉及行的所有属性时,行式存储可以高效地返回结果;

需要频繁插入或更新的操作,其操作与索引和行的大小更为相关。在这种情况下,行式存储能够提供较好的性能。

实时数仓列式存储列式存储数据库数据分析