隨著web前端技術2.0的快速發展,推動力非關系型、分布式數據存儲的高速發展,這些技術的發展不可以保護關系數據的ACID特性。這時NoSQL數據庫就是這個時候得到了廣泛的應用。其實NoSQL的概念早在2009年就人們被提了出來。NoSQL比較常見的解釋為“non-relational”,但是另一個解釋“Not Only SQL”也被很多人接受。那么NoSQL數據庫面臨的挑戰有哪些?什么時候使用比較給力?
NoSQL數據庫面臨的挑戰有哪些?
1、成熟度
RDBMS系統由來已久。NoSQL擁護者們會說RDBMS的高齡是其衰退的標志,不過對于大多數CIO來說,RDBMS的成熟讓人放心。對于大多數情況來說,RDBMS系統是穩定且功能豐富的。相比較而言,大多數NoSQL數據庫則還有很多特性有待實現。
2、支持
企業需要的是安心,如果關鍵系統出現了故障,他們可以獲得即時的支持。所有RDBMS廠商都在不遺余力地提供良好的企業支持。與之相反,大多數NoSQL系統都是開源項目,雖然每種數據庫都有那么幾家公司提供支持,不過這些公司大多都是小的初創公司,沒有全球支持資源,也沒有Oracle、微軟或是IBM那種令人放心的公信力。
3、分析與商業智能
NoSQL數據庫在Web 2.0應用時代開始出現。因此,大多數特性都是面向這些應用的需要的。然而,應用中的數據對于業務來說是有價值的,這種價值遠遠超出了Web應用那種CRUD。企業數據庫中的業務信息可以幫助改進效率并提升競爭力,商業智能對于大中型企業來說是個非常關鍵的IT問題。
4、管理
NoSQL的設計目標是提供零管理的解決方案,不過當今的現實卻離這個目標還相去甚遠?,F在的NoSQL需要很多技巧才能用好,并且需要不少人力、物力來維護。
5、專業
全球有很多開發者,每個業務部門都會有熟悉RDBMS概念與編程的人。相反,幾乎每個NoSQL開發者都處于學習模式。這種狀況會隨著時間的流逝而發生改觀。但現在,找到一個有經驗的RDBMS程序員或是管理員要比NoSQL專家容易多了。
什么時候使用NoSQL比較給力?
1、數據庫表schema經常變化
比如在線商城,維護產品的屬性經常要增加字段,這就意味著ORMapping層的代碼和配置要改,如果該表的數據量過百萬,新增字段會帶來額外開銷(重建索引等)。NoSQL應用在這種場景,可以極大提升DB的可伸縮性,開發人員可以將更多的精力放在業務層。
2、數據庫表字段是復雜數據類型
對于復雜數據類型,比如SQL Sever提供了可擴展性的支持,像xml類型的字段。很多用過的同學應該知道,該字段不管是查詢還是更改,效率非常一般。主要原因是是DB層對xml字段很難建高效索引,應用層又要做從字符流到dom的解析轉換。NoSQL以json方式存儲,提供了原生態的支持,在效率方便遠遠高于傳統關系型數據庫。
3、高并發數據庫請求
此類應用常見于web2.0的網站,很多應用對于數據一致性要求很低,而關系型數據庫的事務以及大表join反而成了”性能殺手”。在高并發情況下,sql與no-sql的性能對比由于環境和角度不同一直是存在爭議的,并不是說在任何場景,no-sql總是會比sql快。
4、海量數據的分布式存儲
海量數據的存儲如果選用大型商用數據,如Oracle,那么整個解決方案的成本是非常高的,要花很多錢在軟硬件上。NoSQL分布式存儲,可以部署在廉價的硬件上,是一個性價比非常高的解決方案。Mongo的auto-sharding已經運用到了生產環境。
并不是說NoSQL可以解決一切問題,像ERP系統、BI系統,在大部分情況還是推薦使用傳統關系型數據庫。主要的原因是此類系統的業務模型復雜,使用NoSQL將導致系統的維護成本增加。
以上即是關于NoSQL數據庫面臨的挑戰有哪些,以及什么時候使用比較給力的全部內容介紹,想了解更多關于NoSQL數據庫的信息,請繼續關注中培偉業。