什么是列存数据库?
什么是列存数据库?
列存数据库将数据存储在列中,而非以更常见的基于行的数据库格式存储数据。得益于其查询机制,按列存储数据能提升分析查询和存储的性能。列存数据库适用于联机分析处理(OLAP)工作负载,是现代组织数据基础设施中常见的核心组件。
列存数据库是如何工作的?
列存数据库将数据列组合在一起并存储在磁盘上。“列”指的是数据类别,例如姓名、性别和电子邮件。传统数据库按顺序存储每个类别的值。列存数据库则存储与特定列相关的所有值,以最大程度地提高检索效率。下文将介绍列式数据存储的主要特征。
列式存储
以下面的客户数据为例。
| 名称 | 年龄 | 职业 |
|---|---|---|
| John | 24 | 营销人员 |
| Mary | 53 | 首席执行官 |
| Steph | 36 | 教师 |
列存数据库按列存储数据,如下所示:
[John, Mary, Steph, 24, 53, 36, 营销人员, CEO, 教师]
每一列占用一块连续的存储空间。相比之下,传统的行式数据库则逐行存储信息。这导致不同类型的数据被依次排列在一起。
[John, 24, 营销人员, Mary, 53, CEO, Steph, 36, 教师]
压缩
列存数据库将同类数据类型组合在一起,从而实现高效压缩。例如,当某列主要包含数字、文本或布尔值时,可以应用编码技术来减少存储空间。这使得企业能够实现高效的数据存储,特别是在处理大数据时。
向量化查询执行
列存数据库使现代 CPU 能够利用单指令多数据流(SIMD)指令支持大规模数据处理。通过批量而非逐行访问数据,数据分析师在执行分析查询时可以获得更高的吞吐量。
投影与延迟物化
与基于行的数据库不同,应用程序只需检索所需的值,而无需检索整行数据。例如,如果某一行包含 10 列数据,列式存储格式允许您在进行计算时仅检索其中 1 列。除非必要,否则数据库不会检索整行数据。这可以降低输入/输出(I/O)负载,并加快检索速度。
列存数据库有哪些类型?
数据库架构师针对分析型应用采用不同类型的列存数据库。
纯列存
纯列存数据库专为按列摄入、组织和存储数据而设计。它们支持机器学习和预测分析等 OLAP 应用。例如,Amazon Redshift 就是一种纯列存数据库。生物技术公司 Moderna 使用 Redshift 实时、安全地访问和分析海量数据。

混合
混合型数据库结合了传统行式数据库和列存数据库的特性。例如,跨分区属性(PAX)存储就是一种混合型数据库。它创建多个水平分区。然后,在每个分区内按列对数据进行分组。
宽列存储
宽列存储是由多个列族组成的数据库。与列存数据库不同,宽列存储在每个列族内按行存储数据。
列存数据库有哪些优势?
列存数据库在实时处理大量数据方面性能出色。
性能更出色
基于列的存储方式仅检索聚合操作所需的列。例如,您可以获取客户消费总额或中位数,而无需检索整行数据。通过减少检索的数据点数量,可以缩短分析所需的时间。
压缩率更高
由于序列数据排列同质化,列存数据库支持先进的压缩技术。采用压缩技术后,向存储中添加更多数据并不总是会导致存储空间占用成比例增加。与关系数据库相比,列式存储即使在高负载下也能保持最佳性能。
缓存利用率更高
现代 CPU 无需跨多个 CPU 周期处理数据,而是可以利用连续的列数据最大化计算性能。这使企业能够实现亚秒级分析,这对关键任务型应用至关重要。
大规模并行处理
列存数据库技术使企业能够在复杂的云环境中扩展 PB 级数据处理能力。通过按列而非按行存储数据,列存数据库能够快速查询特定的数据属性。此外,面向列的存储解决了资源争用问题(即多个应用程序访问同一数据页以检索不同数据时产生的问题)。
列存数据库有哪些局限性?
列存数据库在针对特定类型数据的选择性分析方面表现出色。但是,在某些场景下,它们的表现可能不尽如人意。
针对事务性工作负载的性能局限
列存数据库不适合需要频繁访问整行数据的联机事务处理(OLTP)工作负载。此外,并非所有列存数据库都支持 ACID 特性,而该特性对于银行、零售及其他事务性应用至关重要。原子性、一致性、隔离性和持久性(ACID)是确保每项事务数据完整性的数据库原则。
高容量写入
向列存数据库写入数据时,系统会先写入某一列的所有数据,然后再处理下一列。这意味着写入密集型工作负载可能会出现延迟。
不适合频繁进行整行检索
列存数据库在基于行的操作方面表现不佳。如果您需要频繁执行插入、更新或删除操作,基于行的数据库会是更好的选择。
列存数据库与面向行的数据库
面向行的数据库将数据按行顺序存储在磁盘上。在基于行的数据存储中,写入、更新和删除记录的速度很快。开发团队通常将面向行的存储用于需要大量事务处理的应用程序。相比之下,列存数据库将数据列存储在连续的数据块中。
与面向行的数据库不同,列式存储专为商业智能(BI)、机器学习和实时分析等分析型工作负载而设计。得益于其结构特性,列存数据库能实现比面向行的数据库更高效的数据压缩。面向行的数据库即使只需几列数据,也必须读取整行;而基于列数据库则只读取所需的特定列。
列存数据库有哪些使用场景?
组织使用列存数据库,针对各种应用场景提供低延迟、高吞吐量的分析能力。下文列举了一些常见的应用场景。
数据仓库
数据仓库存储海量数据,供组织从中获取业务洞察。列式数据存储支持相关应用程序访问大规模历史数据,以进行复杂的数据分析。对于只需从海量行中读取少量列的查询,它能提供最佳性能。

商业智能和分析
BI 工具利用列存数据库,针对数十亿行数据执行即席查询。这些工具能够执行聚合、筛选和分组操作,从而进行预测、趋势分析并为决策提供依据。
日志和事件分析
列存数据库非常适合处理时间序列数据和周期性事件。例如,列式数据存储可以摄入包含少量字段的物联网(IoT)传感器数据。组织利用列式数据来识别异常模式、触发警报并预测未来结果。
机器学习特征存放区
训练机器学习模型需要进行数据预处理和特征提取。列存数据库通过将相似特征归类到各自的列中,从而加速机器学习工作流程。模型无需检索整个数据集,而是针对特定特征执行批量读取操作。
金融与科学分析
金融和科学领域的应用程序通常需要摄入包含大量列的数据。借助列式数据存储,这些应用程序能够处理所需的特定属性,而不会受到吞吐量瓶颈的严重制约。例如,您可以将分析软件与基于云的列存数据库集成,从而进行风险建模、基因组学分析和监管报告生成。
列存数据库的最佳实践有哪些?
数据库架构师应用这些实践来提升列式数据存储的性能。
选择与常用查询筛选条件相匹配的键
键设置不当可能会对查询性能产生负面影响。选择排序键时,请确保它们与您频繁访问的列相匹配。这样,您就可以跳过那些不包含目标列的整个数据块。
按日期或类似标准对大型表进行分区
为避免过度的 I/O 消耗,应按日期对列式数据进行分隔。您可以根据数据生成速度,按月或按日对数据进行分区。这使得查询能够仅检索特定分区,而无需读取整个数据块。
针对不同列使用适当的压缩方式
不同数据类型在采用特定编码方法时,能获得最佳压缩效果。例如,对字符串值使用字典编码,对状态标志使用游程编码。
通过批量摄取进行批量加载
列存数据库并不适合频繁的单条写入操作。这样做会降低查询吞吐量。建议将大量记录复制到文件中,然后将其加载到数据库中,以防止存储碎片化。
定期清理和分析表以优化查询性能
随着摄取的数据不断增多,列存数据库的体积会不断增长。部分数据块可能会出现顺序错乱,从而增加读取延迟。定期进行检查并移除不必要的数据,以提高读取效率。
针对读取性能设计架构
在运行分析型查询时,采用非规范化架构(如星型或雪花型架构)的列存数据库表现更好。这种架构能更好地支持中心事实表与周围维度表之间的联接操作。
AWS 如何满足您的列存数据库需求?
AWS 提供多种列存数据库和分析服务,旨在满足您的各种使用场景需求:
-
Amazon Athena 是一项交互式查询服务,支持使用标准 SQL 简化对 Amazon S3 中数据的分析。Athena 是一项无服务器服务,因此您无需设置或管理任何基础设施,而且只需为您的查询需要运行的资源付费。可以使用 Athena 来处理日志、执行数据分析以及运行交互式查询。
-
Amazon Redshift 是一项托管式列式数据仓库服务,支持利用 SQL 为您的数据湖仓进行大规模现代数据分析。支持以开放格式查询 Amazon S3 中的数据,无需在数据湖和数据仓库之间移动数据。
立即创建免费账户,开始在 AWS 上使用列存数据库。
Browse all cloud computing concepts
Browse all cloud computing concepts content here:
Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages