2009-07-23 100 views
4

我有從一個系統中選擇大量記錄,執行多個轉換(基於業務規則)並將它們插入另一個系統的邏輯。使用DDD,如何實現批處理?

它似乎是一個高性能(和內存)命中實例化每個這些記錄作爲一個對象,對它們執行轉換,然後將所有這些對象插入到其他系統。

在DDD中實現此目的的最佳方法是跳過類/對象,並直接通過SQL,也許是存儲過程?

有沒有更好的方式使用DDD來實現這一目標?

注意:系統使用SQL數據庫,此時像CouchDB這樣的對象存儲不是一個選項。

回答

4

很多基於DDD構建的分佈式系統都使用事件驅動架構,而不是等待在一個批處理中執行所有轉換,因爲每個實體都會經歷狀態更改,導致系統通過系統轉換,該實體引發一個事件發佈到某種類型的消息總線(例如Mule for Java,MassTransit for .NET)。您的轉換系統將預訂此事件,並且隨着每條消息到達您的系統,它將對消息中標識的實體執行轉換,然後將另一條消息發佈到目標系統。

這種「滴流處理」可以整天持續運行,而不會對系統造成負擔,從而需要在工作時間後才能執行作業。如果您擔心性能,這種體系結構可能導致系統在COB後5分鐘轉換最後一個記錄,批量作業甚至可能無法運行到凌晨3點(在所有其他批處理作業之後)完成)。

如果您確實不希望目標系統在午夜之前更新(例如,將消息排隊到午夜),然後將它們發佈到目標系統的端點。

Greg Young已經在這類建築上進行了廣泛的博客和介紹。查看他在InfoQ上的工作。

+0

謝謝。這絕對是一件值得研究的事情。再次感謝。 – Laz 2009-07-28 02:32:14