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