回答

收藏

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

技术问答 技术问答 191 人阅读 | 0 人回复 | 2023-09-14

我有逻辑,包括从一个系统中选择大量记录,执行多个转换(基于业务规则),并将其插入另一个系统。
6 A* A% ~& ?- e将这些记录中的每个例子转换为一个对象,然后将所有这些对象插入另一个系统,这似乎是一个高性能(和内存)。9 ~$ h6 I5 \; R
在DDD跳过类/对象并直接通过SQL(也许是存储过程)这样做吗?
6 h0 \+ d7 ~% h有没有更好的方法可以使用?DDD实现这个目标?
% D' [# P$ N' {& w" H( @注:系统使用SQL目前,数据库像数据库这样的数据库CouchDB存储此类对象。8 \, N+ e" U& _, o$ V. a. F
                                                               
# ]6 u9 p. q7 E9 e  D$ c% K    解决方案:                                                               
) ~( b6 }$ }2 N' }                                                                许多在DDD上述分布式系统采用事件驱动的系统结构。在这种情况下,当每个实体经历状态变化(它将导致您的系统转换)时,与其等待一批所有转换线上发布的事件,而不是等待一批执行所有转换(例如,Java的Mule,用于.NET的MassTransit)。您的转换系统将预订此事件,并随着每信息转换为信息中标记的实体,然后将另一个信息发布到目标系统。
! b, e7 K0 g3 R, I这种滴答处理可以连续运行一整天,而不会给系统带来任何负担,这将使工作在下班后运行。如果您担心性能,该架构可能会将系统的最终记录转换为COB在接下来的5分钟里,批处理作业甚至可能要到凌晨3点才能完成(所有其他批处理作业都完成后)。  V. P) ^% F5 \8 m3 n  \3 q2 n
如果你真的不想在午夜前更新目标系统,例如,只需在午夜前排队,然后将其发布到目标系统的端点。; D& x$ P- ~3 Y' a' G
格雷格·杨(Greg Young)博客并广泛介绍了这种结构。看看他在哪里InfoQ上的工作。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则