首页 文章

了解具有数据流的持久实体

提问于
浏览
0

我想使用Lagom构建数据处理管道 . 此管道中的第一步是使用Twitter客户端来处理Twitter消息流的服务 . 对于每个新消息,我想在Cassandra中保留消息 .

我不明白的是,我将我的Aggregare根模型化为一个TwitterMessages列表,例如,运行一段时间后,这个聚合根将是几千兆字节 . 没有必要将所有TwitterMessages存储在内存中,因为这一项服务的目标只是持久保存每条消息,然后将消息发布到Kafka以供下一个要处理的服务 .

如何在不消耗无限资源的情况下将聚合根建模为消息流的持久性权限?如果使用Lagom,是否有任何示例代码显示此用法?

1 回答

  • 2

    事件采购是一个很好的默认设置,但不是适合所有事情的正确解决方案 . 在您的情况下,它可能不是正确的方法 . 首先,您是否需要保持推文,或者可以将它们直接发布到Kafka?

    假设您需要持久化聚合,聚合应该在内存中存储它们验证传入命令和生成新事件所需的任何内容 . 从你需要任何数据来做到这一点,所以你的聚合不会是一个Twitter消息列表,而是它可能只是 NotUsed . 每次获取命令时,它都会为该推文发出新事件 . 这里的事情是,'s not really an aggregate, because you'没有聚合任何状态,你're just emitting events in response to commands with no invariants or anything. And so, you'并没有真正使用Lagom持久化实体API来实现它的用途 . 然而,无论如何,以这种方式使用它可能是有意义的,它使用错误的方法,并且您需要至少在多个实体上分发您的推文 .

    另一种方法是简单地将消息直接存储在Cassandra中,然后在完成后直接发布到Kafka . 这将更简单,涉及的机制更少,并且它应该非常好地扩展,只需确保您明智地选择Cassandra中的分区键列 - 我可能会按用户ID进行分区 .

相关问题