如果父表中有任何提交的更改,我应该使用事务来更新子表吗?

问题描述 投票:0回答:1
product:
       name
       description
       category

productVariants:
       productId
       productName
       sku
       price

嗨我应该使用什么方法来反映productVariants的变化 桌子, 如果product

中的产品名称发生变化

我应该使用原子事务吗? 或者 我应该将事件推送到消息队列中,然后设置侦听器 产品变量,以反映 变化,什么是首选?最佳实践是什么?

mongodb transactions microservices replication eventual-consistency
1个回答
0
投票

首先,您不应该对数据进行非规范化,因此

productName
表中不应该有
productVariants

对于显示,我建议您查询产品变体,收到响应后立即显示它们,然后对于每个变体,您通过其id异步查询并显示产品。理想情况下,设置一些缓存以避免一次又一次查询相同的产品。如果您想简化前端代码,请在微服务和前端之间添加 GraphQL 层,并使用 GraphQL 聚合产品变体和产品(GraphQL 将为您执行请求和缓存)。

现在,如果您想进行交叉查询,例如,如果您想按价格和相关产品的类别查找产品变体,那么您必须设置一个物化视图。正如您所建议的,您的

products
productVariants
微服务会在每次修改时发出消息。物化视图使用消息来保持自身最新。设置物化视图可能看起来很复杂,但它使事情处于控制之中:您将规范化数据修改到两个微服务中,并且视图是只读的。您可以拥有任意复杂的视图,但仍然不会混乱。

© www.soinside.com 2019 - 2024. All rights reserved.