基于SQL的關系型數據庫在過去幾十年來一直是組織應用數據存儲的中流砥柱。針對關系型數據庫的優化、監控和管理性能都有很成熟的經驗,也有很多軟件工具提供這方面的輔助功能。但是,NoSQL數據庫的情況卻非如此。
NoSQL技術現在仍然處于相對初級的階段,眾多NoSQL軟件類型和產品服務令人眼花繚亂,選擇合適的性能管理方案也成為一件頗具挑戰性的事。目前,管理NoSQL性能仍然是新興的技術問題,可能在未來一段時間都是如此。
軟件開發和咨詢服務公司ThoughtWorks公司的首席顧問Pramod Sadalage說:“人們早就知道如何優化關系型數據庫系統,但是那種優化模式在NoSQL中尚不成熟。選擇的優化模式與個體數據庫密切相關。”
Sadalage和其它數據庫專家們都認為,這意味著我們應該在項目開始的時候就為NoSQL性能打下堅實基礎。他們說,IT經理、架構師和開發人員都應該評估NoSQL方案,謹慎選擇,使用合適的數據庫做特定的工作。
NoSQL數據庫經常被描述為“量體裁衣”型的技術,要使用最適合具體應用的不同技術解決具體問題。要實現NoSQL落地有太多事情要處理。主要的NoSQL系統類型包括:鍵值存儲、文檔數據庫、列簇存儲和圖數據庫。
對于如何應用各種類型的NoSQL數據庫,業界正在逐漸形成一些共識。列簇數據庫一般應用于寫入任務比較繁重的應用場景,場景應對數據庫復制的短暫不一致性有一定容忍度。文檔數據庫可以應用在Web中,這種場景多使用JSON數據結構,靈活更新是重點關注的因素。鍵值數據庫支持非常快速的數據訪問,通過簡單的鍵值就能獲取到,還會使用緩存數據。圖數據庫適合處理數據元素之間的網絡關系并以圖的形式展示,例如業務流程管理或者社交網絡信息。
盡管每種類型都有各種產品和開源技術對應,但用戶需要分辨選擇真正適合的類型。對于采用MongoDB還是Cassandra會有一些分歧,不過這也在情理之中,NoSQL應用需求沒有放之四海而皆準的答案。
明智地使用NoSQL數據庫
Mullins咨詢公司的總裁和首席咨詢顧問Craig Mullins說:“人們習慣使用關系型數據庫,這種數據庫可以應用于絕大多數場景。不過,選擇NoSQL最好有具體的案例,要確保選擇的NoSQL數據庫是專為提供該場景必要的性能而設計的。”
Mullins說,要獲得預期數據庫性能,IT團隊在部署某種NoSQL數據庫產品之前“需要切實理解這些產品的工作機制”。他指出,Cassandra列數據庫就是應用要適應NoSQL環境相關處理性能的一個例子。
Mullins說:“Cassandra設計是按行(記錄)存儲所有信息的。同樣的場景,在關系型數據庫的世界里可能需要用十幾個表。但是在Cassandra數據庫中都存儲在一條記錄中了。”如果需要訪問某一條記錄的所有數據,這種方案會獲得極好的性能,Mullins以客戶信用評級應用為例進行了說明。不過,他還說業務用戶可能還有別的需求,例如統計所有客戶信息。在這種需求面前,一條記錄存儲所有信息的方法就可能會給性能帶來問題。
此外,SQL數據庫中標準應用程序元素通常需要硬編碼到NoSQL系統中。Athena IT解決方案咨詢公司創始人Rick Sherman說:“使用NoSQL想要獲得良好性能,需要做很多耗時的工作。這些工作量超過了一些人對它的預期。需要編寫很多定制代碼來實現任務。”
在許多情況下,這些工作是應用程序開發人員完成的,他們可能沒有完全理解他們所使用NoSQL數據庫內部的運行機制。Mullins說:“開發人員不是數據庫設計者,他們是基于項目需求做設計,而不是考慮通用數據使用設計。”
NoSQL技能非標準問題
即使是數據庫管理員,NoSQL技能不足的局限也會成為數據管理團隊面臨的問題,這個問題會影響應用程序任務獲得更好的NoSQL性能。豐富的NoSQL技術方案并不能立即轉換為相應同樣豐富的資源。Sadalage說:“你很容易能找到具有15年經驗的Oracle DBA人員,但是想找到同樣經驗的Cassandra數據庫管理員則是不可能的,該數據庫誕生才只有八年。”
NoSQL采納的第一推動力應該是業務應用程序,不過也有更多的關注集中在處理分析方面。耶穌基督末世圣徒教會首席企業信息架構師Mike Bowers認為,如果你有分析和報表需求,那么要使用NoSQL數據庫獲得速度優勢可能就會變得更加困難。
Bowers認為,部署的第一步是研究可用方案并了解方案的工作原理,在這一步我們要重點考慮如何獲得良好的NoSQL性能。他說:“大多數NoSQL數據庫不是真正的數據庫,他們只是支持開發人員構建自己定制數據庫的數據引擎,需要專門針對具體應用進行優化。”
Sadalage表達了更加鞭辟入里的觀點,在當前乃至外來可能都是成立的。他說:“要因地制宜,物盡其用。不要選擇錯誤的產品,然后抱怨產品不好。”