2011-02-27 76 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