2010-06-24 148 views
3

我想創建一個deamon來反規範化我的數據庫。在CQRS中反規範化的最佳做法是什麼?

我使用ActiveMQ的作爲隊列管理器 我有2個數據庫:關係一個(寫+複製),和非規範化的一個(讀取)

我的問題是什麼是進行非規範化我真正的DB我有最好的做法一些想法:

  • MySQL的代理(與LUA)讀取隊列(這是可能的)
  • 觸發在MySQL
  • Java的守護進程讀取隊列
  • 服務
  • 克朗標籤? (但我會有很大的延遲時間
+1

出於興趣你爲什麼要編寫一個守護進程?我對CQRS非常陌生,但從我讀過的內容來看,建議的方法是直接從寫入/命令服務引發事件(使用可靠的消息,例如NServiceBus)。 – 2010-11-03 14:10:11

回答

3

我不確定這是否是官方的「最佳」做法,但總的來說,我發現事件採購和使用事件驅動寫入和更新讀取模型這是一個很好的做法,在採用事件源的情況下,寫模型並不是以關係數據庫本身的實體和關係的形式存在,而是作爲事件的歷史記錄(我知道起初聽起來相當混亂)

您可以通過觀察Eventide如何實現它(在Ruby中)學習更多事件源https://eventide-project.org/

我還對CQRS使用dom做了簡短介紹艾因事件在這裏:http://lucisferre.net/2010/11/04/a-brief-introduction-to-cqrs/

但是,這並不真正回答你的直接問題,並在最後事件採購可能不適合你。既然您已經將「寫入」模型的狀態存儲在關係數據庫中,那麼觸發器是一種可行的方法,但是您將使您的系統非常以數據爲中心。如果你可以在代碼中使用觸發器來完成同樣的事情,它會更清晰和更易於測試。

爲此,我仍然使用域事件模式,並使用事件總線將事件發佈到事件處理程序,這些事件處理程序負責更新讀取模型。

想象這些事件和處理程序,如SQL觸發器,但基於您的域設計和它的行爲。 Udi Dahan在這種方法中有很多很好的材料,其中域事件用於更新讀取模型,但不使用事件源。 http://www.udidahan.com/?blog=true

+0

前兩個鏈接是404。 – coderz 2017-08-09 05:15:06

+1

謝謝。我修了一個。我不知道cqrsinfo.com網站發生了什麼。我將連接到新的Eventide項目,因爲迄今爲止,它是實踐中事件採購的更好例子之一,也是一個很好的參考。 – 2017-08-12 03:17:54

相關問題