我打算將商業網站上的大批量訂單事務記錄存儲到存儲庫(必須在這裏使用cassandra,這是我們的數據庫)。讓我們稱這個組件爲commerceOrderRecorderService。基於Cassandra的用例需要設計和實現輸入
問題的第二部分是 - 我想處理這些訂單並推送到其他下游系統。這個組件可以被稱爲batchCommerceOrderProcessor。
commerceOrderRecorderService & batchCommerceOrderProcessor都將在Java平臺上運行。
我需要關於這些組件設計的建議。尤其是以下:
commerceOrderRecorderService
什麼是他設計的列,考慮到性能和可擴展性最好的方法是什麼?我應該將整個訂單(複雜實體)作爲單個JSON對象存儲。訂單屬性沒有搜索要求。我們至少可以等到批處理器處理它們。考慮一下 - 單個訂單可以包含很多子項目 - 在處理每個子項目時可以以不同方式實現。爲這樣的數據結構設計列可能是一種過度衝擊
考慮到數據量會很高,應該是什麼關鍵。在高峯期,每秒10筆交易。任何在cassandra中創建這種交易數據的庫或最佳實踐? TTL也可以有效使用嗎?
batchCommerceOrderProcessor
- 應該如何行處理檢索?
- 如何確保批處理器(也可能在多個節點上運行)的多線程實現將具有行級隔離。這是沒有兩個實例會同時讀取和處理同一行。沒有重複的處理。
- 如何在一段時間後清除數據,同時對壓縮等cassandra過程友好。
欣賞設計輸入,代碼示例和指向庫的指針。謝謝。
鑑於安裝數據庫服務器的容易程度以及數據庫服務器類型cassandra的特定程度,我認爲您選擇cassandra(「這是我們的db」)的動機是錯誤的。 – flup
@flup,如果您喜歡,就像設計約束一樣,基於遺產。隨意更多地瞭解認爲合理的內容。我真的希望在給定的限制內輸入。 –
我的意思是說,不要選擇一個nosql數據庫只是因爲你已經有一個nosql數據庫,但是例如因爲你需要可擴展性。關於訂單的問題:你可以給系統需要做的更多功能描述嗎?示例訂單的樣子是什麼?它在哪裏?我現在閱讀你的方式,每個訂單都被分解成分佈在不同系統中的訂單行。它是否正確?如果是這樣,接下來會發生什麼,系統是否還有其他責任,比如將分佈式線路的狀態重新組合回訂單狀態? – flup