Akka Persistence和Akka Persistence Query有什么区别?

时间:2018-01-24 18:29:40

标签: cassandra akka akka-persistence lagom

Akka持久性查询通过提供基于通用异步流的查询接口来补充持久性,各种日记插件可以实现这种接口,以便公开其查询功能。

这是akka文档中“Akka Persistence Query”的描述。我想知道它只用于查询,换句话说是用于读取端吗?

2 个答案:

答案 0 :(得分:6)

可能更好的问题是为什么Akka持久性查询不是Akka持久性的一部分?如果你不能查询它会有什么好处?

Akka持久性只是为了解决一件事和一件事,让演员的状态持久。它并不关心该actor是否代表一个域实体,或者它是否只是一个操作actor,其状态需要在重新启动后继续存在(例如集群共享管理器的情况,在切换到之前用于在Akka持久性中存储其状态)分布式数据)。这只是一个通用目的“让这个演员坚持不懈”的功能。

现在,Akka持久性的一个常见用途是实现事件源域实体。然而,事件源域实体需要的不仅仅是“使这个actor持久化”,它们通常还需要能够跨域实体执行查询。因此,存在Akka持久性查询以允许此操作,它允许创建可以处理以填充读取侧视图的跨实体流。

问题是,并非所有事件存储都必然能够像这样轻松地进行跨实体流式处理。所以那些不能实现Akka持久性,并且用于使actor持久化,而提供更多功能的存储也可以实现Akka持久性查询。

这一切都大大简化了,但希望能解释一些动机。

答案 1 :(得分:2)

Akka持久性查询可以用于查询日志,这在大多数更简单的情况下就足够了。

然而,持久性查询的主要目的是将存储的事件流式传输到特定的,或多个单独的读/查询存储,在那里您将执行实际的查询。