使用DDD,如何实现批处理?

Laz*_*Laz 4 sql database domain-driven-design batch-file

我的逻辑包括从一个系统中选择大量记录,执行多个转换(基于业务规则)并将它们插入另一个系统.

看起来像是一个高性能(和内存)命中来将这些记录中的每一个实例化为一个对象,对它们执行转换然后将所有这些对象插入到另一个系统中.

在DDD中实现此目的的最佳方法是跳过类/对象并直接通过SQL执行,也许是存储过程?

有没有更好的方法使用DDD来实现这一目标?

注意:系统使用SQL数据库,目前像CouchDB这样的对象存储不是一个选项.

pns*_*eld 5

许多基于DDD构建的分布式系统都使用事件驱动架构,而不是等待在一个批处理中执行所有转换,因为每个实体都经历状态更改,导致系统对其进行转换,实体引发发布到某种消息总线的事件(例如Mule for Java,MassTransit for .NET).您的转换系统将订阅此事件,并且当每条消息到达您的系统时,它将对消息中标识的实体执行转换,然后将另一条消息发布到目标系统.

这种"涓流处理"可以整天持续运行,而不会给您的系统带来负载,这就要求工作在下班后运行.如果您担心性能,这种架构可能会导致系统在COB后5分钟转换最后一条记录,批处理作业甚至可能无法运行到凌晨3点(在所有其他批处理作业之后)完成).

如果您真的不希望目标系统更新到午夜,例如,只需将消息排队到午夜,然后将它们发布到目标系统的端点.

Greg Young在博客上发表了大量有关此类架构的文章.看看他在InfoQ上的工作.