我的应用程序遵循CQRS策略,将读模型和写模型分开。我有一个产品和多个与该产品相关的采购订单。
PurchaseOrder读取模型在Elasticsearch中,并且附加了产品名称。现在,如果我在写模型中更改产品名称,那么我需要在读模型中相应地更新所有PurchaseOrder的productName字段(使用Elasticsearch的批量更新API)。
我的问题是:由于我有几百万个PurchaseOrderers,这个productName同步会不会是一个性能问题?或者对这种同步建模有什么建议?
虽然我不相信在现有订单上更改产品名称是一个好主意(发票可能已经生成,订单中的产品名称应该与发票中的名称相匹配),但这个问题仍然有价值。
您可能希望您的 PurchaseOrder
只保留 ID
(也许还有 version
?")中的 Product
,这样就可以避免这样的大规模更新。另一方面,这种方法需要调用到 Product
聚合根,每当你想把产品的ID翻译成自己的名字时,就会对其进行读取。这种读取的影响显然可以通过使用缓存来减轻。
我想真的要看这样两种情况的发生次数,然后我会优化发生次数最多的一种。