為什么要使用NoSQL


NoSQL概念

?隨著web2.0的快速發(fā)展贿条,非關(guān)系型雹仿、分布式數(shù)據(jù)存儲得到了快速的發(fā)展,它們不保證關(guān)系數(shù)據(jù)的ACID特性整以。NoSQL概念在2009年被提了出來胧辽。NoSQL最常見的解釋是“non-relational”,“Not Only SQL”也被很多人接受悄蕾。(“NoSQL”一詞最早于1998年被用于一個輕量級的關(guān)系數(shù)據(jù)庫的名字票顾。)
NoSQL被我們用得最多的當數(shù)key-value存儲,當然還有其他的文檔型的帆调、列存儲奠骄、圖型數(shù)據(jù)庫、xml數(shù)據(jù)庫等番刊。在NoSQL概念提出之前含鳞,這些數(shù)據(jù)庫就被用于各種系統(tǒng)當中,但是卻很少用于web互聯(lián)網(wǎng)應(yīng)用芹务。比如cdb蝉绷、qdbm、bdb數(shù)據(jù)庫枣抱。

傳統(tǒng)關(guān)系數(shù)據(jù)庫的瓶頸

?傳統(tǒng)的關(guān)系數(shù)據(jù)庫具有不錯的性能熔吗,高穩(wěn)定型,久經(jīng)歷史考驗佳晶,而且使用簡單桅狠,功能強大,同時也積累了大量的成功案例轿秧。在互聯(lián)網(wǎng)領(lǐng)域中跌,MySQL成為了絕對靠前的王者,毫不夸張的說菇篡,MySQL為互聯(lián)網(wǎng)的發(fā)展做出了卓越的貢獻漩符。

?在90年代,一個網(wǎng)站的訪問量一般都不大驱还,用單個數(shù)據(jù)庫完全可以輕松應(yīng)付嗜暴。在那個時候,更多的都是靜態(tài)網(wǎng)頁议蟆,動態(tài)交互類型的網(wǎng)站不多闷沥。

?到了最近10年,網(wǎng)站開始快速發(fā)展咪鲜。火爆的論壇撞鹉、博客疟丙、sns颖侄、微博逐漸引領(lǐng)web領(lǐng)域的潮流。在初期享郊,論壇的流量其實也不大览祖,如果你接觸網(wǎng)絡(luò)比較早,你可能還記得那個時候還有文本型存儲的論壇程序炊琉,可以想象一般的論壇的流量有多大展蒂。

Memcached+MySQL

?后來,隨著訪問量的上升苔咪,幾乎大部分使用MySQL架構(gòu)的網(wǎng)站在數(shù)據(jù)庫上都開始出現(xiàn)了性能問題锰悼,web程序不再僅僅專注在功能上,同時也在追求性能团赏。程序員們開始大量的使用緩存技術(shù)來緩解數(shù)據(jù)庫的壓力箕般,優(yōu)化數(shù)據(jù)庫的結(jié)構(gòu)和索引。開始比較流行的是通過文件緩存來緩解數(shù)據(jù)庫壓力舔清,但是當訪問量繼續(xù)增大的時候丝里,多臺web機器通過文件緩存不能共享,大量的小文件緩存也帶了了比較高的IO壓力体谒。在這個時候杯聚,Memcached就自然的成為一個非常時尚的技術(shù)產(chǎn)品。

?Memcached作為一個獨立的分布式的緩存服務(wù)器抒痒,為多個web服務(wù)器提供了一個共享的高性能緩存服務(wù)幌绍,在Memcached服務(wù)器上,又發(fā)展了根據(jù)hash算法來進行多臺Memcached緩存服務(wù)的擴展评汰,然后又出現(xiàn)了一致性hash來解決增加或減少緩存服務(wù)器導(dǎo)致重新hash帶來的大量緩存失效的弊端纷捞。當時,如果你去面試被去,你說你有Memcached經(jīng)驗主儡,肯定會加分的。

Mysql主從讀寫分離

?由于數(shù)據(jù)庫的寫入壓力增加惨缆,Memcached只能緩解數(shù)據(jù)庫的讀取壓力糜值。讀寫集中在一個數(shù)據(jù)庫上讓數(shù)據(jù)庫不堪重負,大部分網(wǎng)站開始使用主從復(fù)制技術(shù)來達到讀寫分離坯墨,以提高讀寫性能和讀庫的可擴展性寂汇。Mysql的master-slave模式成為這個時候的網(wǎng)站標配了。

分表分庫

?隨著web2.0的繼續(xù)高速發(fā)展捣染,在Memcached的高速緩存骄瓣,MySQL的主從復(fù)制,讀寫分離的基礎(chǔ)之上耍攘,這時MySQL主庫的寫壓力開始出現(xiàn)瓶頸榕栏,而數(shù)據(jù)量的持續(xù)猛增畔勤,由于MyISAM使用表鎖,在高并發(fā)下會出現(xiàn)嚴重的鎖問題扒磁,大量的高并發(fā)MySQL應(yīng)用開始使用InnoDB引擎代替MyISAM庆揪。同時,開始流行使用分表分庫來緩解寫壓力和數(shù)據(jù)增長的擴展問題妨托。這個時候缸榛,分表分庫成了一個熱門技術(shù),是面試的熱門問題也是業(yè)界討論的熱門技術(shù)問題兰伤。也就在這個時候内颗,MySQL推出了還不太穩(wěn)定的表分區(qū),這也給技術(shù)實力一般的公司帶來了希望医清。雖然MySQL推出了MySQL Cluster集群起暮,但是由于在互聯(lián)網(wǎng)幾乎沒有成功案例,性能也不能滿足互聯(lián)網(wǎng)的要求会烙,只是在高可靠性上提供了非常大的保證负懦。

MySQL的擴展性瓶頸

?在互聯(lián)網(wǎng),大部分的MySQL都應(yīng)該是IO密集型的柏腻,事實上纸厉,如果你的MySQL是個CPU密集型的話,那么很可能你的MySQL設(shè)計得有性能問題五嫂,需要優(yōu)化了颗品。大數(shù)據(jù)量高并發(fā)環(huán)境下的MySQL應(yīng)用開發(fā)越來越復(fù)雜,也越來越具有技術(shù)挑戰(zhàn)性沃缘。分表分庫的規(guī)則把握都是需要經(jīng)驗的躯枢。雖然有像淘寶這樣技術(shù)實力強大的公司開發(fā)了透明的中間件層來屏蔽開發(fā)者的復(fù)雜性,但是避免不了整個架構(gòu)的復(fù)雜性槐臀。分庫分表的子庫到一定階段又面臨擴展問題锄蹂。還有就是需求的變更,可能又需要一種新的分庫方式水慨。

?MySQL數(shù)據(jù)庫也經(jīng)常存儲一些大文本字段得糜,導(dǎo)致數(shù)據(jù)庫表非常的大,在做數(shù)據(jù)庫恢復(fù)的時候就導(dǎo)致非常的慢晰洒,不容易快速恢復(fù)數(shù)據(jù)庫朝抖。比如1000萬4KB大小的文本就接近40GB的大小,如果能把這些數(shù)據(jù)從MySQL省去谍珊,MySQL將變得非常的小治宣。

?關(guān)系數(shù)據(jù)庫很強大,但是它并不能很好的應(yīng)付所有的應(yīng)用場景。MySQL的擴展性差(需要復(fù)雜的技術(shù)來實現(xiàn))侮邀,大數(shù)據(jù)下IO壓力大缆巧,表結(jié)構(gòu)更改困難,正是當前使用MySQL的開發(fā)人員面臨的問題豌拙。

NOSQL的優(yōu)勢
  • 易擴展
    ?NoSQL數(shù)據(jù)庫種類繁多,但是一個共同的特點都是去掉關(guān)系數(shù)據(jù)庫的關(guān)系型特性题暖。數(shù)據(jù)之間無關(guān)系按傅,這樣就非常容易擴展。也無形之間胧卤,在架構(gòu)的層面上帶來了可擴展的能力唯绍。
  • 大數(shù)據(jù)量,高性能
    ?NoSQL數(shù)據(jù)庫都具有非常高的讀寫性能枝誊,尤其在大數(shù)據(jù)量下况芒,同樣表現(xiàn)優(yōu)秀。這得益于它的無關(guān)系性叶撒,數(shù)據(jù)庫的結(jié)構(gòu)簡單绝骚。一般MySQL使用Query Cache,每次表的更新Cache就失效祠够,是一種大粒度的Cache压汪,在針對web2.0的交互頻繁的應(yīng)用,Cache性能不高古瓤。而NoSQL的Cache是記錄級的止剖,是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了落君。
  • 靈活的數(shù)據(jù)模型
    ?NoSQL無需事先為要存儲的數(shù)據(jù)建立字段穿香,隨時可以存儲自定義的數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫里绎速,增刪字段是一件非常麻煩的事情皮获。如果是非常大數(shù)據(jù)量的表,增加字段簡直就是一個噩夢朝氓。這點在大數(shù)據(jù)量的web2.0時代尤其明顯魔市。
  • 高可用
    ?NoSQL在不太影響性能的情況,就可以方便的實現(xiàn)高可用的架構(gòu)赵哲。比如Cassandra待德,HBase模型,通過復(fù)制模型也能實現(xiàn)高可用枫夺。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末将宪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌较坛,老刑警劉巖印蔗,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異丑勤,居然都是意外死亡华嘹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門法竞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耙厚,“玉大人,你說我怎么就攤上這事岔霸⊙” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵呆细,是天一觀的道長型宝。 經(jīng)常有香客問我,道長絮爷,這世上最難降的妖魔是什么趴酣? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮坑夯,結(jié)果婚禮上价卤,老公的妹妹穿的比我還像新娘。我一直安慰自己渊涝,他們只是感情好慎璧,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著跨释,像睡著了一般胸私。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鳖谈,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天岁疼,我揣著相機與錄音,去河邊找鬼缆娃。 笑死捷绒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的贯要。 我是一名探鬼主播暖侨,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼崇渗!你這毒婦竟也來了字逗?” 一聲冷哼從身側(cè)響起京郑,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎葫掉,沒想到半個月后些举,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡俭厚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年户魏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挪挤。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绪抛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出电禀,到底是詐尸還是另有隱情,我是刑警寧澤笤休,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布尖飞,位于F島的核電站,受9級特大地震影響店雅,放射性物質(zhì)發(fā)生泄漏政基。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一闹啦、第九天 我趴在偏房一處隱蔽的房頂上張望沮明。 院中可真熱鬧,春花似錦窍奋、人聲如沸荐健。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽江场。三九已至,卻和暖如春窖逗,著一層夾襖步出監(jiān)牢的瞬間址否,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工碎紊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留佑附,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓仗考,卻偏偏與公主長得像音同,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子秃嗜,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容