一.Nosql = not only sql 是非關(guān)系型數(shù)據(jù)庫
關(guān)系型數(shù)據(jù)庫采用的結(jié)構(gòu)化的數(shù)據(jù)(可以通過數(shù)據(jù)表格建立關(guān)系),NoSQL采用的是鍵值對的方式存儲(chǔ)數(shù)據(jù)
(1)使用關(guān)系型數(shù)據(jù)庫還是非關(guān)系型數(shù)據(jù)庫,考慮的角度
?在處理非結(jié)構(gòu)化/半結(jié)構(gòu)化的大數(shù)據(jù)時(shí);在水平方向上進(jìn)行擴(kuò)展時(shí)(數(shù)據(jù)字段更新頻繁);隨時(shí)應(yīng)對動(dòng)態(tài)增加的數(shù)據(jù)項(xiàng)時(shí)可以優(yōu)先考慮使用? NoSQL數(shù)據(jù)庫。
?在考慮數(shù)據(jù)庫的成熟度;支持;分析和商業(yè)智能淮逊;管理及專業(yè)性等問題時(shí),應(yīng)優(yōu)先考慮關(guān)系型數(shù)據(jù)庫扶踊。
NoSQL很容易實(shí)現(xiàn)可伸縮性(向上擴(kuò)展與水平擴(kuò)展)
支持的特性不夠豐富:現(xiàn)有產(chǎn)品所提供的功能都比較有限泄鹏,大多數(shù)NoSQL數(shù)據(jù)庫都不支持事務(wù),也不像MS SQL Server和Oracle那樣能提供各種附加功能秧耗,比如BI和報(bào)表等;
現(xiàn)有產(chǎn)品的不夠成熟:大多數(shù)產(chǎn)品都還處于初創(chuàng)期命满,和關(guān)系型數(shù)據(jù)庫幾十年的完善不可同日而語;
上面NoSQL產(chǎn)品的優(yōu)缺點(diǎn)都是些比較共通的,在實(shí)際情況下绣版,每個(gè)產(chǎn)品都會(huì)根據(jù)自己所遵從的數(shù)據(jù)模型和CAP理念而有所不同胶台。適合場景
NoSQL數(shù)據(jù)庫正在成為數(shù)據(jù)庫領(lǐng)域的重要力量歼疮。如果使用恰當(dāng),那么它會(huì)帶來很多好處诈唬。然而韩脏,企業(yè)應(yīng)該非常小心并注意到這些數(shù)據(jù)庫的限制與問題。
NoSQL這兩年越來越熱铸磅,尤其是大型互聯(lián)網(wǎng)公司非常熱衷這門技術(shù)赡矢。根據(jù)筆者的經(jīng)驗(yàn),并不是任何場景阅仔,NoSQL都要優(yōu)于關(guān)系型數(shù)據(jù)庫吹散。下面我們來具體聊聊,什么時(shí)候使用NoSQL比較給力:
1) 數(shù)據(jù)庫表schema經(jīng)常變化
? 比如在線商城八酒,維護(hù)產(chǎn)品的屬性經(jīng)常要增加字段空民,這就意味著ORMapping層的代碼和配置要改,如果該表的數(shù)據(jù)量過百萬羞迷,新增字段會(huì)帶來額外開銷(重建索引等)界轩。NoSQL應(yīng)用在這種場景,可以極大提升DB的可伸縮性衔瓮,開發(fā)人員可以將更多的精力放在業(yè)務(wù)層浊猾。
2)數(shù)據(jù)庫表字段是復(fù)雜數(shù)據(jù)類型
對于復(fù)雜數(shù)據(jù)類型,比如SQL
Sever提供了可擴(kuò)展性的支持热鞍,像xml類型的字段葫慎。很多用過的同學(xué)應(yīng)該知道,該字段不管是查詢還是更改薇宠,效率非常一般偷办。主要原因是是DB層對xml字
段很難建高效索引,應(yīng)用層又要做從字符流到dom的解析轉(zhuǎn)換昼接。NoSQL以json方式存儲(chǔ),提供了原生態(tài)的支持悴晰,在效率方便遠(yuǎn)遠(yuǎn)高于傳統(tǒng)關(guān)系型數(shù)據(jù)庫慢睡。
3)高并發(fā)數(shù)據(jù)庫請求
此類應(yīng)用常見于web2.0的網(wǎng)站,很多應(yīng)用對于數(shù)據(jù)一致性要求很低铡溪,而關(guān)系型數(shù)據(jù)庫的事務(wù)以及大表join反而成了”性能殺手”漂辐。在高并發(fā)情況
下,sql與no-sql的性能對比由于環(huán)境和角度不同一直是存在爭議的棕硫,并不是說在任何場景髓涯,no-sql總是會(huì)比sql快。有篇article和大家
分享下哈扮,http://artur.ejsmont.org/blog/content/insert-performance-comparison-of-nosql-vs-sql-servers
4)海量數(shù)據(jù)的分布式存儲(chǔ)
海量數(shù)據(jù)的存儲(chǔ)如果選用大型商用數(shù)據(jù)纬纪,如Oracle蚓再,那么整個(gè)解決方案的成本是非常高的,要花很多錢在軟硬件上包各。NoSQL分布式存儲(chǔ)摘仅,可以部署在廉價(jià)的硬件上,是一個(gè)性價(jià)比非常高的解決方案问畅。Mongo的auto-sharding已經(jīng)運(yùn)用到了生產(chǎn)環(huán)境娃属。http://www.mongodb.org/display/DOCS/Sharding
并不是說NoSQL可以解決一切問題,像ERP系統(tǒng)护姆、BI系統(tǒng)矾端,在大部分情況還是推薦使用傳統(tǒng)關(guān)系型數(shù)據(jù)庫。主要的原因是此類系統(tǒng)的業(yè)務(wù)模型復(fù)雜卵皂,使用NoSQL將導(dǎo)致系統(tǒng)的維護(hù)成本增加秩铆。5選擇SQL還是NoSQL
二、NoSQL作為緩存服務(wù)器
?? 比如MySQL+Memcached的架構(gòu)中渐裂,我們處處都要精心設(shè)計(jì)我們的緩存豺旬,包括過期時(shí)間的設(shè)計(jì)、緩存的實(shí)時(shí)性設(shè)計(jì)柒凉、緩存內(nèi)存大小評(píng)估族阅、緩存命中率等等。
?? NoSQL數(shù)據(jù)庫一般都具有非常高的性能膝捞,在大多數(shù)場景下面坦刀,你不必再考慮在代碼層為NoSQL構(gòu)建一層???? Memcached緩存。NoSQL數(shù)據(jù)本身在Cache上已經(jīng)做了相當(dāng)多的優(yōu)化工作蔬咬。
?? Memcached這類內(nèi)存緩存服務(wù)器緩存的數(shù)據(jù)大小受限于內(nèi)存大小鲤遥,如果用NoSQL來代替Memcached來緩存數(shù)據(jù)庫的話,就可以不再受限于內(nèi)存大小林艘。雖然可能有少量的磁盤IO讀寫盖奈,可能比Memcached慢一點(diǎn),但是完全可以用來緩存數(shù)據(jù)庫的查詢操作
三.NoSQL也是分很多種類的
四.總結(jié)一下Nosql的優(yōu)缺點(diǎn)
NoSQL優(yōu)點(diǎn)
a.??易擴(kuò)展
b.??快速的讀寫(主要例子有Redis狐援,由于其邏輯簡單钢坦,而且純內(nèi)存操作)
c.??低廉的成本(這是大多數(shù)分布式數(shù)據(jù)庫共有的特點(diǎn),因?yàn)橹饕际情_源軟件啥酱,沒有昂貴的License成本)
d.??架構(gòu)的靈活性,沒有復(fù)雜的關(guān)系
e.??分布式計(jì)算
NoSQL缺點(diǎn)
a. 沒有標(biāo)準(zhǔn)化(如果不支持SQL這樣的工業(yè)標(biāo)準(zhǔn)爹凹,將會(huì)對用戶產(chǎn)生一定的學(xué)習(xí)和應(yīng)用遷移成本)
b. 沒有正式的官方支持
?c. 支持的特性不夠豐富:現(xiàn)有產(chǎn)品所提供的功能都比較有限,大多數(shù)NoSQL數(shù)據(jù)庫都不支持事務(wù)
也不像MS SQL Server和Oracle那樣能提供各種附加功能,比如BI和報(bào)表等;
d.數(shù)據(jù)易于丟失(存于內(nèi)存中)
五.關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫對比