我的逻辑包括从一个系统中选择大量记录,执行多个转换(基于业务规则)并将它们插入到另一个系统中。
将这些记录中的每一个实例化为对象,对它们执行转换,然后将所有这些对象插入到另一个系统中,这似乎对性能(和内存)产生了很大的影响。
在 DDD 中实现此目的的最佳方法是跳过类/对象并直接通过 SQL(也许是存储过程)来完成?
有没有更好的方法使用DDD来实现这个目标?
注意:系统使用 SQL 数据库,目前不提供像 CouchDB 这样的对象存储。
许多基于 DDD 构建的分布式系统都使用事件驱动架构,在该架构中,当每个实体经历状态更改(这将导致系统对其进行转换)时,实体不会等待一批执行所有转换,而是会引发发布到某种消息总线的事件(例如 Java 的 Mule、.NET 的 MassTransit)。您的转换系统将订阅此事件,并且当每条消息到达您的系统时,它将对消息中标识的实体执行转换,然后将另一条消息发布到目标系统。
这种“涓流处理”可以全天连续运行,不会给系统带来需要在下班后运行作业的负载。如果您担心性能,这种架构可能会导致系统在 COB 后 5 分钟转换最后一条记录,其中批处理作业甚至可能要到凌晨 3 点才能运行(在所有其他批处理作业完成之后)完成的)。
例如,如果您确实不希望目标系统在午夜之前更新,只需将消息排队到午夜,然后将它们发布到目标系统的端点。
Greg Young 在博客上发表了大量关于这种架构的文章。在 InfoQ 上查看他的工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)