對雲計算供應商成本進行成本比較是很容易的;但是對應用程式進行性能比較則不是那麼簡單的了。 在同一個雲計算或跨不同雲計算的環境下,對運行其中的不同類型資料庫應用程式進行性能比較將是特別具有挑戰性的一項工作。 雅虎雲計算服務基準(YCSB)是專為説明使用者瞭解不同雲計算資料庫性能以及在實際負載下存儲資料性能表現的一個測試框架。 這個測試框架的原始程式碼可從GitHub下載獲得。
雅虎雲計算服務基準工具組括了兩個重要的組成部分:一個工作負載產生器和一組產生器生成的工作負載,以及針對大量NoSQL資料庫的介面,其中包括Cassandra、DynamoDB、Hbase、MongoDB、 Redis以及甲骨文公司的NoSQL資料庫。 當然,它還配有一個用於關聯式資料庫的JDBC介面。
當面臨進行應用程式架構決策時,諸如YCSB這樣的資料庫測試基準是特別有用的。 例如,一個不再滿足性能需求的現有資料庫應用程式可能會迫使你考慮擴容硬體資源或者變更基礎資料庫。 如果額外的硬體能夠實現近乎線性的性能提升(例如,雙倍的伺服器可實現雙倍的性能),那麼硬體擴容將是一個合適的選擇。 但是,硬體擴容並不總是能夠説明我們實現性能的線性提升,因為不讓管理員充分發揮額外硬體資源優勢的應用程式中還存在著其他的性能提升瓶頸。
如果你更換了你的資料庫,那麼你就會有很多的選擇項,特別是如果你選擇使用NoSQL資料庫來取代之前的關聯式資料庫。 雖然一開始的性能提升可能並不明顯,但是一些特定類型的NoSQL資料庫將說明問題。 例如,社交網路分析就正好適合使用圖形資料庫。 如果使用者不需要支援複雜查詢應用,那麼諸如Cassandra和Amazon DynamoDB這樣的索引碼資料庫則可能比MongoDB這樣的文檔存儲更為適合。 測試基準可以通過測試資料來説明你決定哪一個資料庫最適合你的需求。
雅虎雲計算服務基準的工作負載管理
運行YCSB的第一步就是確定你所希望測試的資料庫類型以及希望在資料庫上運行的工作負載。 一旦你已經創建了你的資料庫,那麼你必須創建一個與你的目標工作負載相關的計畫。 計畫的實施細節將隨資料庫類型的不同而有所變化。 例如,可能在MySQL中創建一個資料表,而在Cassandra中創建一個列族和索引碼空間。
測試基準是比較資料庫性能的一大利器,但是工作負載也必須配合你的實際生產負載,當選擇資料庫時,除測試結果外還需要考慮其他的設計考量。 你可以運行由YCSB提供的核心工作負載或者創建你自己的。 核心工作負載包括一組六個具有不同讀/寫操作特性的工作負載。 一些工作負載是以更新升級為主的,而另一些則是測試讀操作性能的。 如果你創建你自己的工作負載,那麼你就必須開發一個JAVA應用程式,以便於擴展現有YCSB類生成資料並執行讀/寫操作。
工作負載是使用參數開關進行設置的,因此你是可以在不同的執行緒數和單位時間運行數下測試工作負載的。 它分為了兩個階段:創建資料的導入階段,和執行特定工作負載下操作然後輸出一組性能統計資料的執行階段。 除了執行時間和單位時間的運行次數外,還有很多的延遲測量資料,其中包括平均值、最大值、最小值、第95個百分點的延遲數和99個百分點的延遲數。
如果你有一個現成的應用程式,它可能會從性能監控工具中收集資料以確定你的應用程式中讀、寫以及更新操作的運行資料。 如果你使用了一個關聯式資料庫,那麼則需特別關注運行次數最頻繁和執行時間最長的查詢操作。
有很好的候選物件可供在自訂工作負載中使用。
如果你開發了一個新應用程式,那麼你應當在正式把應用程式投入生產之前運行一系列的測試基準以便於對大量的不同的可能生產負載進行評估。 這可以為不同條件下不同資料庫的性能表現評估提供有價值的資訊。 如果你希望瞭解大部分時間的中等工作負載以及設計需求中偶爾發生的高峰工作負載的運行情況,可針對兩種情況進行測試。 理想情況下,你所選擇的資料庫將在所有預期的情況下性能表現良好。
你還應當根據使用頻率來選擇資料庫。 如果一個資料庫在大多數預期的工作負載下能夠表現良好,但在一個設計範圍外或偶爾發生的工作負載下表現糟糕,那麼你可能會選擇這個資料庫。