2011-02-27 77 views
4

我想知道你什么时候应该考虑在你的查询存储中使用多个表。cqrs查询性能

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

您应该考虑对数据进行轻微规范化以避免冗长的同步问题?这是一个否定或可接受的妥协?

谢谢,

回答

8

CQRS是不是使用表每次观看,而表每次观看是一个系统,使CQRS更容易的一个方面。

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

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

我的猜测是,除非您正在讲数以百万计的数百万条记录,否则这里的一致性足以满足您的要求和用户对一致性的期望,也许几秒钟。

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

在大多数实际情况下,对这些事情的优化都是没有意义的。无论记录如何,您都可以使用一个良好的SP在数秒内完成更新,这对于刷新UI来说具有足够的一致性(请记住,只要知道命令成功,发布该命令的用户界面就可以保持一致)。

而且您通常不需要在系统中进行太多查询缩放,以至于单个连接会伤害到您。你可能不想要的是在你的代码和存储过程中执行这些连接所增加的内部复杂性。

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

+0

感谢您的回复。这是早期的,所以我不确定查询的频率和数量会是什么,但我会采取你建议的尝试看看的方法 - 如果它们在创建问题时稍后调整查询。 – dubs 2011-02-27 19:38:50

+0

也许还值得一提的是,许多NOSQL文档数据库更适合存储按表或按文档查看。像这样的简单连接就是SQL擅长的,如果你使用SQL,你可能需要一定程度的规范化。 – 2011-02-27 20:59:05

+0

我认为克里斯给你一个很好的答案。对我来说,关于CQRS和ES的一个很棒的事情就是创建读取模型时的简单性。我已经编写并优化了我公平分享的SQL连接,并且我发现一个值得关注的阅读模型非常简单。即使您确实需要保持多位数据同步。如果你想看一些示例代码,请随时查看关于该主题的文章[如何在CQRS中构建主详细信息视图](http://danielwhittaker.me/2014/10/05/build-master-细节 - 视图 - 使用-CQRS事件外包/) – Codescribler 2014-10-07 13:41:11