数据流 - 状态持久性数据库

Posted

技术标签:

【中文标题】数据流 - 状态持久性数据库【英文标题】:Dataflow - State persistence database 【发布时间】:2021-12-23 01:01:55 【问题描述】:

我们正在考虑使用 Beam/Dataflow 进行状态处理:

在全局窗口上实时聚合指标(每 1 分钟) 大量并行会话 (> 1 mio) 的实时聚合

示例:自在门户网站上注册后,每 1 个 mio 客户可获得最高价格文章

此外,我们还希望在不干扰实时作业的情况下访问这些计算出的聚合。

设计问题:它是否可以被当前状态后端覆盖 - Windmill/Persistent Disks [1] - 还是使用数据库(如 BigTable)更合适?

谢谢!

[1]Dataflow - State persistence?

【问题讨论】:

如果您需要对存储层进行此类控制,那么数据流现在可能是合适的产品。在 stackex 中询问时,我建议还解释上下文(为什么您需要在管道上满足饱和度?为什么需要在存储层上进行控制?)。这将避免XY problem。您已经问了 4 个关于在标准 Beam 之外做事的问题,所以也许您应该解释一下您面临的限制,以便获得更好的答案。 已重构问题以阐明要求。 对于设计和架构方面的疑问,由于没有相关的代码疑问(检查Help Centre "What's on Topic"),*** 不是最好的提问地方。请尝试在 Software Engineering Stack Exchange 上提问。 【参考方案1】:

其实可以在Dataflow中定义Big Table connectors来进行读写操作。 此外,Dialogflow API 的project.jobs.get method 会返回一个instance of a job,它是一个包含“currentState”字段的json 响应。 因此,我认为您可以构建一种自动化脚本来获取此字段值,然后使用 Big Table 连接器将其存储在 Big Table 数据库中,但这是一个非常复杂的解决方案,我不确定它是否方便。

【讨论】:

仍然需要手工制作,但到目前为止唯一(可行的)答案!如果您有使用这种方法的具体示例,很高兴听到更多信息。

以上是关于数据流 - 状态持久性数据库的主要内容,如果未能解决你的问题,请参考以下文章

Java三大框架之——Hibernate中的三种数据持久状态和缓存机制

持久化视图状态数据并中继到 Knockout.JS

Redis持久化

Hibernate

第6章 数据存储全方案,详解持久化技术

如何在实体框架中持久保存 MassTransit 状态数据?