什么是流式数据库?
什么是流式数据库?
流式处理数据库是一种专门设计用于处理大量实时流数据的数据库。与在处理之前批量存储数据的传统数据库不同,流数据库在生成数据后立即对其进行处理,从而实现实时洞察和分析。与不保留数据的传统流处理引擎不同,流数据库可以存储数据并响应用户数据访问请求。流数据库是实时分析、欺诈检测、网络监控和物联网 (IoT) 等延迟关键型应用程序的理想选择,并且可以简化技术堆栈。
简史
流数据库的概念于2002年首次在学术界引入。来自布朗大学、布兰代斯大学和麻省理工学院的一组研究人员指出了管理数据库内部数据流的需求,并建立了第一个流数据库Aurora。几年后,该技术被大型企业采用。排名前三的数据库供应商Oracle,IBM和Microsoft连续推出了他们的流处理解决方案,称为Oracle CQL,IBM System S和Microsoft SQLServer StreamInsight。这些供应商不是从头开始开发流数据库,而是直接将流处理功能集成到其现有数据库中。
自 2000 年代后期以来,受 MapReduce 启发的开发人员将流处理功能与数据库系统分离,并开发了大规模的流处理引擎,包括 Apache Storm、Apache Samza、Apache Flink 和 Apache Spark Streaming。这些系统旨在持续处理摄取的数据流,并将结果交付给下游系统。但是,与流式数据库相比,流处理引擎不存储数据,因此无法为用户启动的即席查询提供服务。
流数据库与流处理引擎并行发展。两个流数据库PipelineDB和KsqlDB是在2010年代开发的,当时很流行。在 2020 年代初期,出现了一些基于云的流媒体数据库,如 RisingWave、Materialize 和 DeltaStream。这些产品旨在为用户提供云中的流式数据库服务。为了实现这一目标,重点是设计一个充分利用云资源来实现无限水平可扩展性和最高成本效益的架构。
典型用例
流式数据库非常适合需要最新结果的实时应用程序,新鲜度要求从亚秒到几分钟不等。IoT 和网络监控等应用程序需要亚秒级延迟,广告推荐、库存仪表板和食品配送等应用程序的延迟要求可能从数百毫秒到几分钟不等。流式数据库持续以低延迟提供结果,非常适合这些应用程序。
某些应用程序对新鲜度不敏感,可以容忍数十分钟、几小时甚至几天的延迟。一些代表性的应用程序包括酒店预订和库存跟踪。在这些情况下,用户可以考虑使用流式数据库或传统的基于批处理的数据库。他们应该根据其他因素做出决定,例如成本效率、灵活性和技术堆栈复杂性。
流式数据库通常与其他现代数据系统集成,以促进两种类型的用例:流式引入 (ETL) 和流式分析。
流式引入 (ETL)
开发人员可以使用流数据库来清理流数据,加入多个流,并将连接的结果实时移动到下游系统。在实际方案中,引入流式数据库的数据通常来自 OLTP 数据库、消息队列或存储系统。处理后,结果最有可能被转储回这些系统或插入到数据仓库或数据湖中。
流分析
数据通常来自流分析方案中的 OLTP 数据库、消息队列和存储系统。结果通常会摄取到服务系统中,以支持用户触发的请求。流式数据库也可以自行提供查询。用户可以将流式数据库直接与 BI 工具连接,以可视化结果。
随着对实时机器学习的需求不断增长,流数据库也已成为实现敏捷特征工程的关键工具。通过利用流数据库将转换后的数据存储为功能,开发人员可以快速响应不断变化的数据模式和新事件。流式数据库允许实时引入、处理数据并将其转换为有意义的功能,从而提高机器学习模型的准确性和效率,同时减少数据重复并提高数据质量。这使组织能够做出更快、更明智的决策,优化其机器学习工作流程,并获得竞争优势。
流式数据库与传统数据库
传统数据库旨在存储大量批处理数据,并通过事务和查询提供对该数据的快速、一致的访问。它们通常针对处理批量操作数据的复杂操作(如聚合和联接)进行了优化。传统数据库的执行模型通常被称为人工-主动、DBMS-被动(HADP)模型。也就是说,传统的数据库被动地存储数据,由人类主动发起的查询触发计算。
另一方面,流式数据库旨在以增量方式动态处理大量连续摄取的数据,并提供对数据和结果的低延迟访问,以便进一步处理和分析。它们经过优化,可在数据到达后立即处理数据,而不是在数据持久化后进行批量处理。流数据库的执行模型通常称为 DBMS 主动、人工-被动 (DAHP) 模型。流数据库在数据进入时主动触发计算,而人类被动地从数据库中接收结果。
流式数据库与 OLTP 数据库
OLTP 数据库符合 ACID,可以处理并发事务。相比之式数据库不保证 ACID 合规性,因此不能用于支持事务工作负载。在数据正确性方面,流数据库强制执行一致性和完整性。设计良好的流式数据库应保证以下两个属性:
- 恰好一次语义,这意味着即使发生系统故障,每个数据事件也将处理一次且仅处理一次。
- 无序处理意味着用户可以强制流式数据库按预定义的顺序处理数据事件,即使数据事件无序到达也是如此。
流式数据库与 OLAP 数据库
OLAP 数据库经过优化,可高效回答用户启动的分析查询。与 OLAP 数据库不同,流式数据库更关注生成的新鲜度,它们使用增量计算模型来优化延迟。流式数据库通常不采用列存储,但可以实现矢量化执行以进行查询处理。
结论
总之,对于需要从大量数据中获得实时见解的组织来说,流式数据库是理想的选择。它们可以为实时分析、欺诈检测、网络监控和物联网等延迟关键型应用程序提供低延迟的结果,并且可以简化技术堆栈。与传统数据库不同,流式数据库是一种主动计算模型,可以动态处理大量连续摄取的数据。流式数据库还可以与其他数据系统集成,以促进流式引入和流式分析。同时,流式数据库也适用于实时机器学习场景,可以加快特征工程的开发和提高机器学习模型的准确性和效率。