2013-04-29 24 views
1

我一直在尋找高性能的文件存儲解決方案,用於在Java EE環境中持久化SOAP消息。消息的高性能存儲

我們目前在Oracle RMDBS上使用CLOB表,但它的擴展非常昂貴。儘管oracle在存儲相關元數據方面效果很好,但對於消息內容來說效果不佳。使用CLOB插入表的性能比沒有CLOB的表的性能差大約1000%(這是通過比較在CLOB禁用行存儲時VARCHAR2(4000)插入到CLOB插入的性能來衡量的)

堅持文件系統上的消息是一種選擇,但是我對平均文件系統每天如何執行存儲數百萬個文件有些疑問。考慮到我們必須將這些文件保留幾個月,這聽起來不對。

我知道有幾個開源鍵值數據庫(兔崽子,MongoDB的命名等等),可能是彌補了任務,但是我只是找不到時間來評估他們。我也想聽聽開源RMDBS的性能。

考慮到傳輸的消息量不斷增加,優先考慮的是低延遲和高性能。我們不需要集羣或事務性,系統故障時的(輕微)數據丟失是可以接受的。

要求:

  • 必須能夠維持至少100persisted消息/秒的速率時的消息大小是8kilobytes
  • 必須能夠存儲至少1億消息
  • 必須支持的持續缺失按年齡排列的消息
  • 必須支持持續同時刪除正在進行中
  • 必須支持通過標識檢索消息

幫助表示讚賞

+0

我會嘗試couchDB,但我不知道這比其他數據庫解決方案更適合您的使用。你會想要全部閱讀。另外,如果您的IT/DBA不支持mongodb或couchdb,您可能需要使用它們。 – 2013-04-29 19:35:58

+0

通過將lob存儲轉換爲SECUREFILES,我們實際上設法使Oracle負載下降了很多。不過,我認爲我仍然需要評估開源選項。當我完成後,我會發表一篇關於我的發現的文章。 – 2013-04-30 10:18:49

回答

0

這是我到目前爲止發現的。我會在評估每個產品後嘗試更新此答案。

我開始我的實驗,使用MongoDB,它在紙上看起來像一個可行的選擇。這是我發現的一個總結:用C++編寫

  • 複製(replicaset)

    • 需要高可用性3個節點
    • 其中一個節點被選作爲主 - 只有主能寫
    • 向外擴展是通過分片(分區)來完成
    • 每個碎片本質上是一個replicaset - 所以碎片化環境需要ATLEAST 6個節點的高可用性
    • 的mongod實例消耗所有可用的內存 - 虛擬化技術應該用於資源分區(如果你打算運行在相同的硬件應用服務器)
    • 主連任可能需要1分鐘
    • 文檔集合(表)寫操作
    • 的Java API過程中使用排它鎖是非常容易使用,並且包括所謂的GridFS的一個虛擬文件系統的測試系統上
    • 單節點寫入性能爲〜20000點的插入/秒爲1K字節文件
    • 單節點讀取性能爲〜20000的讀/秒爲1K字節文件

    是MongoDB的需要在兩個數據中心配置6個節點的事實,使我進一步的尋找更具成本效益的解決方案。

    Apache的卡桑德拉:

    • Java語言編寫
    • 複製要求的高可用性3個節點
    • 數據庫生存
    • 複製算法已被設計爲多個數據中心網絡分區
    • 所有節點都可寫入
    • 向外擴展可以通過增加更多的節點(達到一定極限)做
    • 卡桑德拉可能需要JVM的垃圾收集微調
    • 的Java API是不是最容易與
    • 單個節點的寫入性能,以工作爲〜7000個刀片/秒爲1K字節文件
    • 單節點讀取性能爲〜7000讀取用於1K字節文件/秒

    雖然卡桑德拉在單個節點配置較慢,寫上一個高可用性配置將匹配MongoDB的性能的性能。在每個節點上執行寫操作的能力(即使在網絡分區過程中)對於日誌記錄來說都是非常受歡迎的。

    Couchbase:

    不幸的是我無法測試Couchbase。

    現在我們將繼續使用Oracle SecureFiles。我們是否會用盡Oracle的資源,Cassandra和MongoDB都是可行的替代方案。

  • 1

    Here是MongoDB中和SQL Server之間的比較不錯(我相信甲骨文將有類似的性能)。你可以從圖表中看到Mongo每秒可以處理20 000次插入。蒙戈也查詢基於JSON語言,它幾乎可以做一切都像常規的SQL,它具有分片羣集和副本設定,它可以處理所有neccesary備份和故障轉移(一些基本信息here)。

    另外,如果你有興趣挖掘稍微深一點,10根具有online course在授予證書2周開始。

    +0

    我忘了感謝您提及在線課程 – 2013-05-13 18:45:43

    1

    你可以嘗試以下產品:

    • HBase的
    • MongoDB的
    • 卡桑德拉
    • Solr的4.0頭(只)

    這些是我有什麼經驗的球員。還有很多其他好的產品可以做到你想要的市場。

    一些意見:他們都沒有這個「刪除年齡」功能外的開箱,據我知道這一點。但實施它應該非常簡單。更容易在MogoDB我必須承擔。

    如果你會嘗試Solr的,你應該4.x版本堅持,因爲這些是唯一以接近實時的支持承諾,它會影響你的「刪除和插入」的要求。

    他們都有偉大的表現,但我沒有運行與您的要求的基準。如果我是你,我會制定我自己的基準。

    0

    Oracle11g中具有特色的介紹重複數據刪除。這個特性將會提高clob數據庫的性能。

    +0

    由於存儲的郵件是唯一的,重複數據刪除不會提供任何改進 - 但是,壓縮在xml上運行良好 – 2013-05-05 21:45:16