我想知道您何时应该考虑在查询存储中使用多个表。
例如,考虑产品描述发生变化的问题。如果您有许多包含产品描述的聚合,则此更改可能会对只读查询存储的同步产生巨大影响。
在什么时候您应该考虑对数据进行轻微的标准化以避免冗长的同步问题?这是一个禁忌还是可接受的妥协?
谢谢,
我想知道您何时应该考虑在查询存储中使用多个表。
例如,考虑产品描述发生变化的问题。如果您有许多包含产品描述的聚合,则此更改可能会对只读查询存储的同步产生巨大影响。
在什么时候您应该考虑对数据进行轻微的标准化以避免冗长的同步问题?这是一个禁忌还是可接受的妥协?
谢谢,
CQRS 不是关于使用每个视图的表,而是每个视图的表是 CQRS 使系统更容易的一个方面。
这取决于您,取决于您的具体情况和需求。我会这样看,该查询的最终一致性与对高查询性能的需求的成本是多少。您可能需要考虑系统的以下两个特征:
1)平均。该命令的一致性,即更新受命令影响的所有读取模型需要多长时间(还要考虑更改的优化存储过程是否会优于使用 ORM 或其他抽象以这种方式更新数据库)。
我的猜测是,除非您说的是数百万条记录,否则这里的一致性足以满足您的要求和用户对一致性的期望,可能只有几秒钟。
2)查询性能的重要性。您每秒收到多少个查询?你能处理每次都做一个 SQL 连接吗?
在大多数实际情况下,这些事情中的任何一个的优化都是没有实际意义的。无论记录如何,您都可以在几秒钟内使用良好的 SP 进行更新,这对于 UI 刷新来说已经足够一致了(请记住,一旦他们知道命令成功,发出命令的 UI 就可以保持一致)。
而且您通常不需要在系统中进行如此多的查询扩展,以至于单个连接会伤害您。您可能不想要的是在代码和存储过程中执行这些连接所增加的内部复杂性。
与 CQRS 中的所有内容一样,您无需从一开始就使用和优化它的各个方面。您可以逐步优化这些内容。今天使用连接,明天完全非规范化,反之亦然。