mongodb 如果父表中的任何字段发生更改,我是否应该使用事务来更新子表?

3phpmpom  于 2023-10-16  发布在  Go
关注(0)|答案(1)|浏览(92)
product:
    name
    description
    category

productVariants:
    productId
    productName
    sku
    price

如果product表中的产品名称发生更改,应使用什么方法来反映productVariants表中的更改?
我应该使用原子事务吗?或者我应该在msg队列中推送事件,然后在productVariants上设置侦听器,以反映变化?

b4wnujal

b4wnujal1#

首先,您不应该对数据进行反规范化,因此productVariants表中不应该有productName
对于显示,我建议您查询产品变体,在获得响应后立即显示它们,然后对于每个变体,异步查询并按其id显示产品。理想情况下,设置一些缓存以避免一次又一次地查询同一产品。如果你想简化你的前端代码,那么在你的微服务和前端之间添加一个GraphQL层,并使用GraphQL聚合产品变体和产品(GraphQL将为你做请求和缓存)。
现在,如果你想进行交叉查询,例如,如果你想通过价格和相关产品的类别来查找产品变体,那么你必须设置一个物化视图。就像你建议的那样,你的productsproductVariants微服务在每次修改时都会发出消息。实体化视图使用这些消息来保持自身处于最新状态。设置实体化视图可能看起来很复杂,但它可以控制一切:你可以将规范化的数据修改到两个微服务中,视图是只读的。你可以有你想要的复杂的视图,它仍然不会是一个混乱。

相关问题