2014-01-15 26 views
1

我打算將商業網站上的大批量訂單事務記錄存儲到存儲庫(必須在這裏使用cassandra,這是我們的數據庫)。讓我們稱這個組件爲commerceOrderRecorderService。基於Cassandra的用例需要設計和實現輸入

問題的第二部分是 - 我想處理這些訂單並推送到其他下游系統。這個組件可以被稱爲batchCommerceOrderProcessor。

commerceOrderRecorderService & batchCommerceOrderProcessor都將在Java平臺上運行。

我需要關於這些組件設計的建議。尤其是以下:

commerceOrderRecorderService

  1. 什麼是他設計的列,考慮到性能和可擴展性最好的方法是什麼?我應該將整個訂單(複雜實體)作爲單個JSON對象存儲。訂單屬性沒有搜索要求。我們至少可以等到批處理器處理它們。考慮一下 - 單個訂單可以包含很多子項目 - 在處理每個子項目時可以以不同方式實現。爲這樣的數據結構設計列可能是一種過度衝擊

  2. 考慮到數據量會很高,應該是什麼關鍵。在高峯期,每秒10筆交易。任何在cassandra中創建這種交易數據的庫或最佳實踐? TTL也可以有效使用嗎?

batchCommerceOrderProcessor

  1. 應該如何行處理檢索?
  2. 如何確保批處理器(也可能在多個節點上運行)的多線程實現將具有行級隔離。這是沒有兩個實例會同時讀取和處理同一行。沒有重複的處理。
  3. 如何在一段時間後清除數據,同時對壓縮等cassandra過程友好。

欣賞設計輸入,代碼示例和指向庫的指針。謝謝。

+0

鑑於安裝數據庫服務器的容易程度以及數據庫服務器類型cassandra的特定程度,我認爲您選擇cassandra(「這是我們的db」)的動機是錯誤的。 – flup

+0

@flup,如果您喜歡,就像設計約束一樣,基於遺產。隨意更多地瞭解認爲合理的內容。我真的希望在給定的限制內輸入。 –

+0

我的意思是說,不要選擇一個nosql數據庫只是因爲你已經有一個nosql數據庫,但是例如因爲你需要可擴展性。關於訂單的問題:你可以給系統需要做的更多功能描述嗎?示例訂單的樣子是什麼?它在哪裏?我現在閱讀你的方式,每個訂單都被分解成分佈在不同系統中的訂單行。它是否正確?如果是這樣,接下來會發生什麼,系統是否還有其他責任,比如將分佈式線路的狀態重新組合回訂單狀態? – flup

回答

2

根據系統的總體要求,也可能是可行的應用組成的架構:

  1. 卡桑德拉存儲訂單,分析和你有什麼。
  2. 消息隊列 - 您的商務訂單記錄器服務將簡單地將新訂單排入交易持續隊列並返回。可伸縮性和性能不應該成爲問題,因爲您可以使用單個隊列服務器輕鬆實現每秒數千個事務。您可以看看RabbitMQ作爲可用選項之一。
  3. 流處理框架 - 您可以使用流式框架(如Twitter Storm)以可伸縮的方式讀取隊列中的消息流。你可以在Java中實現比在風暴3種簡單的流水線工藝:

    一)噴的過程,從隊列中出隊的下一個訂單,並把它傳遞給 第二過程
    B)叫博爾特二的過程,每一個訂單插入到Cassandra並將其傳遞給第三個螺栓。c)將訂單推送到其他下游系統的第三螺栓工藝。

這樣的架構提供了高性能,可伸縮性和接近實時的低延遲數據處理。它考慮到Cassandra在高速數據寫入方面非常強大,但在讀取記錄順序列表時並不那麼強大。我們在我們的InnoQuant MOCA平臺中使用Storm + Cassandra組合,並根據硬件處理25.000 tx /秒和更多。

最後,您應該考慮一下,如果這樣的架構對您的方案來說不算是矯枉過正。現在,幾乎任何單箱數據庫都可以輕鬆達到10 tx /秒。

1

這個例子可能會有所幫助。它使用jmxbulkloader加載大量事務,然後將結果批量處理成特定大小的文件,以便在其他位置傳輸。它是多線程的,但在同一個進程中。

https://github.com/PatrickCallaghan/datastax-bulkloader-writer-example

希望它能幫助。順便說一句,它使用最新的cassandra 2.0.5。

+0

我會檢查一下。感謝您的迴應。 –

相關問題