事务型与分析型数据库选型:OLTP、OLAP还是HTAP?
DataHot 速览
本文对比事务型与分析型数据库的并发控制机制,介绍悲观锁与乐观锁的差异,并给出降低锁竞争、测试并发负载的建议。在分析负载集成方面,讨论了CDC实时复制、ETL与ELT的取舍,以及HTAP单平台方案的权衡。适合需要规划数据库架构与数据管道的数据团队参考。
为什么值得关注:数据库选型是数据平台建设的基础决策,本文对OLTP/OLAP/HTAP的并发和数据集成模式做了清晰梳理,值得数据从业者阅读。
本文目录 21 节
译文
AI 逐段翻译并发控制与并发访问
事务系统通过协调对共享数据访问的并发控制机制支持数千并发用户。悲观并发控制(锁)通过在修改数据前获取排他锁来防止冲突,确保一次只有一个事务能修改一行。乐观并发控制在提交时才检查冲突,减少锁争用,允许多个用户同时访问同一数据。
通过使用合适的隔离级别、保持事务简短以及按一致顺序访问行来减少锁争用。在生产部署前,在现实的并发负载下进行测试,以测量事务延迟、锁争用和回滚率。这些指标揭示你的数据库能否处理多个用户同时访问同一数据的生产流量。
分析工作负载的集成模式
需要事务和分析系统的组织通常使用通过复制管道连接的独立平台。
变更数据捕获(CDC)工具从操作数据库中提取行级更改,并近实时地将其流式传输到分析系统。使用Kafka或云原生服务的CDC管道将延迟从批处理周期(小时)减少到分钟,实现生产数据库系统与数据仓库之间的持续复制。这种方法使分析系统与事务数据源保持同步,减少数据冗余并确保数据一致性。
传统的ETL将转换集中化,但可能成为瓶颈。现代ELT将原始数据直接加载到仓库中,并使用SQL应用转换,实现更快的摄取。数据源直接流入仓库,转换在仓库中应用,减少了对中间暂存的需求,并提高了快速数据集成的吞吐量。
混合事务/分析处理(HTAP)系统尝试在单一平台上支持两种工作负载,消除了复制延迟。权衡在于单一系统必须满足相互冲突的需求——事务工作负载偏好行式存储;分析工作负载偏好列式存储。HTAP在分析新鲜度要求适中(几小时或几天)且分析查询量低于事务负载时效果最佳。
架构与可扩展性
事务系统通过向单个生产数据库添加CPU、内存或存储进行垂直扩展。水平扩展很复杂,因为跨分布式系统保持一致性需要复杂的协调。垂直扩展使事务系统的工作负载优化更简单,使其能够高效地服务多个用户和多个表。
分析系统自然地水平扩展。将数据分布到多个服务器实现并行化:扫描数十亿行的查询将工作分配给各服务器,每个服务器扫描其分区。这种架构支持大规模索引策略,允许系统在频繁查询的列上创建合适的索引,以优化复杂SQL查询性能。
现代云数据仓库将计算与存储分离。这实现独立扩展和成本效益:仅在查询工作负载时提供计算,并根据数据量扩展存储,在需要时支持数千并发用户,同时在非高峰期间最小化成本。
商业智能与报告用例
分析数据库为仪表盘、报告和商业智能应用提供支持,高管、分析师和运营团队使用这些应用了解业务绩效并推动战略决策。
适合分析数据库的BI场景
历史趋势分析比较数周、数月或数年的业务指标。分析数据库擅长于此:聚合数百万历史事务以显示收入趋势、客户获取模式或成本趋势。组织可以跟踪库存模式,分析多年客户数据,并识别长期业务模式。
预测分析从历史数据构建预测模型。分析数据库提供预测模型学习模式和预测未来需求、流失或收入所需的历史背景。
运营仪表盘显示每几分钟刷新的当前指标。这些需要近实时分析,但不需要毫秒级延迟的事务处理。具有流式摄取的分析数据库能够很好地处理这一点。
客户数据分析按行为、人口统计或价值对客户进行细分。这需要扫描客户和事务表以识别模式——这正是分析系统高效执行的。
仪表盘的新鲜度要求
不同的仪表盘有不同的新鲜度要求。显示实时运营指标的仪表盘需要亚分钟级延迟。显示每日或每周趋势的高管仪表盘可以容忍一小时前的数据。历史报告仪表盘可以使用昨天的数据。
在实时分析和批处理刷新报告之间做出选择之前,了解你的新鲜度要求。实时系统更复杂且成本更高;当新鲜度容忍度允许时,批处理系统更简单且成本效益更高。
何时选择哪种:决策指南
在事务和分析数据库之间做出选择需要诚实评估你的工作负载,并做出关于技术投资的战略决策。
查询模式
如果您的应用程序执行许多返回小结果集的短查询,请选择事务型数据库。如果它执行较少但返回大型结果集的复杂SQL查询,请选择分析型数据库。如果您两者都需要——实时运营查询和需要数据仓库功能的复杂查询——则运行两个系统并在它们之间建立复制管道,或考虑使用HTAP系统。
并发性和延迟要求
事务型系统在需要高并发(许多并发用户)和单个操作低延迟时表现出色。分析型系统在可以容忍较高延迟以换取大规模操作和复杂查询的吞吐量时表现出色。
电子商务结账需要高并发和毫秒级延迟。分析型数据库不适合。股票交易系统也有同样的要求。每周收入报告可以容忍分钟级延迟和较低的并发性,因此分析型数据库是合适的。不同的工作负载优化策略适用于每种场景。
数据量和保留
事务型系统在GB到低TB级别的数据量下表现良好。超过低TB级别,性能会下降,因为面向行的存储和规范化模式未针对海量数据进行优化。在没有复杂分布式系统的情况下,事务保证在极端规模下也难以维持。
分析型系统能高效处理PB级数据。如果您的数据集达到TB级别,就需要分析型系统。数据仓库功能使这些系统能够存储和查询来自多个表和来源的、大规模集成的数据。
保留要求也不同。事务型系统通常保留最近的运营数据(当前订单、活跃客户、近期交易)。分析型系统积累多年的历史数据以支持趋势分析和预测。
可接受的数据新鲜度
事务型系统按定义提供当前数据——每个运营变更立即可见。分析型系统按计划(每小时、每天)刷新。如果您的应用程序需要当前数据,请选择事务型。如果历史或每日刷新数据可接受,则分析型系统就足够了。
迁移和工具建议
迁移到混合架构的组织应评估CDC工具(Apache Kafka、AWS DMS、Google Cloud Dataflow、Azure Data Factory),以将运营系统的变更以最小延迟流式传输到分析系统,并在生产数据库系统之间实现持续复制。
对于分析型系统,考虑现代云数据仓库(Snowflake、Google BigQuery、Amazon Redshift、Databricks),并根据您的并发性、延迟和成本要求进行评估。每种系统都提供不同的索引策略和查询优化方法。
在承诺使用某个平台之前,使用实际查询模式和现实数据量对代表性工作负载进行基准测试。合成基准很少反映生产现实或系统将如何处理您的特定数据源和访问模式。
总结:选择您的架构
大多数组织同时使用事务型和分析型系统,因为它们服务于根本不同的目的。事务型数据库快速可靠地捕获和处理运营活动,支持日常业务运行的应用程序。分析型数据库通过聚合历史数据和支持揭示趋势和模式的复杂查询来实现洞察。
选择不是事务型或分析型——而是事务型和分析型,通过复制管道连接。变更数据捕获将变更以最小延迟从运营系统流式传输到分析系统。两个系统独立运行,针对各自的工作负载进行优化。
对于构建新系统的组织,请评估您在查询模式、并发需求、数据量和新鲜度要求方面的具体需求。理解这些权衡确保您构建平衡性能、成本和运营复杂性的架构。通过诸如 Unity Catalog 之类的工具实施统一治理,有助于在事务型和分析型工作负载中维护一致的安全、访问控制和数据血缘。
常见问题:事务型与分析型数据库
事务型和分析型数据库之间的主要区别是什么?
事务型数据库针对单个记录的快速、可靠读写操作进行了优化,支持银行和电子商务等运营应用程序。分析型数据库针对大型历史数据集上的复杂查询进行了优化,支持仪表板和商业智能。
为什么组织同时使用事务型和分析型数据库?
事务型和分析型数据库做出相反的权衡。事务型系统优先考虑单个操作的一致性和低延迟;分析型系统优先考虑大规模聚合的吞吐量。运行两者并在它们之间复制数据使每个系统都能在其预期的工作负载中表现出色。
面向行和面向列的存储有何不同?
面向行的存储将单个记录的所有字段组合在一起,优化了对完整记录的快速访问。面向列的存储将跨所有记录的单个列的值组合在一起,优化了对数百万行中特定列的扫描,而无需访问不相关的列。
事务数据库中的ACID合规性意味着什么?
ACID(原子性、一致性、隔离性、持久性)意味着事务数据库保证每个事务都被完整、可靠地处理。原子性确保全有或全无的执行。一致性确保有效的状态转换。隔离性确保并发事务不相互干扰。持久性确保已提交的更改在故障后仍然存在。
分析型数据库可以用于事务型工作负载吗?
技术上可以,但实际上不行。分析型数据库针对大规模读取的吞吐量进行了优化,而非低延迟写入。将分析型数据库用于事务型工作负载会很慢且成本高昂,并且会降低分析查询的性能。
从仅有事务型系统迁移到混合系统时,最大的挑战是什么?
主要挑战包括管理系统间的数据冗余、确保运营系统与分析平台之间的数据一致性、可靠地维护CDC管道,以及支持多个用户访问集成数据而不产生冲突或性能下降。
组织如何减少数据冗余同时又维持两个系统?
使用变更数据捕获(CDC)进行持续复制,而不是夜间批处理。通过CDC管道保持反规范化副本的同步。在事务型系统中实现单一数据源,并使用CDC仅将必要的变化流入分析系统,从而减少在两个平台中存储相同数据的需求。
这篇内容对你有用吗?
反馈只用于改善内容筛选,不等同于收藏