CQRS读模型中的关系数据和弹性搜索

时间:2015-09-22 08:33:20

标签: elasticsearch cqrs denormalization eventual-consistency

我们的产品阅读服务订阅了与产品相关的活动(例如来自eventstore或simmilar),其中之一是:

ProductCreated事件

{
    "id": 666,
    "name": "Diablo Beer",
    "manufacturerId": 1
}

当readservice接收到它应该在elasticsearch

中创建一个新文档时

产品文档:

{
    "id": 666,
    "name": "Diablo Beer",
    "manufacturerId": 1,
    "manufacturerName": "Epic proportions .inc"
}

问题是获得并确保ManufacturerName的一致性

我们看到了几个解决方案。

  1. 让产品readservice订阅有关制造商的事件,即创建/更新的事件。并维持自己的制造商缓存,这可能会变得非常耗费内存
  2. 查询manufacturerreadservice以获取名称,但数据可能已过时,可能永远不会变得一致
  3. 注意:

    1. 我们确实需要manufacturerName,因为此字段需要过滤和排序,而分页
    2. 我们考虑过使用父/子,但是文档只能有1个父级,这个限制在很多情况下都是showstopper

0 个答案:

没有答案