cqrs查询性能

时间:2011-02-27 18:29:30

标签: cqrs

我想知道何时应该考虑在查询存储中使用多个表。

例如,考虑产品的描述发生变化的问题。如果您有许多包含产品描述的聚合,则此更改可能会对只读查询存储的同步产生巨大影响。

在哪一点上您应该考虑对数据进行轻微规范化以避免冗长的同步问题?这是禁止或不可接受的妥协吗?

谢谢,

1 个答案:

答案 0 :(得分:8)

CQRS不是关于使用每个视图的表,而是每个视图的表是CQRS使系统更容易的一个方面。

取决于您的具体情况和需求,取决于您。我会这样看,该查询的最终一致性与高查询性能需求的成本是多少。您可能需要考虑系统的以下两个特征:

1)平均该命令的一致性,即更新受命令影响的所有读取模型所需的时间(还要考虑更改的优化存储过程是否优于使用ORM或其他抽象以这种方式更新数据库) )。

我的猜测是,除非你说数百万,否则数百万条记录的一致性足以满足你的要求和用户对一致性的期望,可能只需几秒钟。

2)查询性能的重要性。你每秒收到多少查询?你能每次都处理SQL连接吗?

在大多数实际情况中,这两种方法的优化都没有实际意义。无论记录如何,您都可以在几秒钟内使用良好的SP进行更新,这对于UI刷新来说足够一致(请记住,只要知道命令成功,发出命令的UI就会保持一致)。

并且您通常不需要在单个连接会伤害您的系统中进行如此多的查询扩展。您可能不想要的是在代码和存储过程中执行这些连接所增加的内部复杂性。

与CQRS中的所有内容一样,您不需要从第一天开始使用和优化它的每个方面。您可以逐步优化这些内容。今天使用连接,明天完全非规范化,反之亦然。