如何做數(shù)據(jù)存儲(chǔ)架構(gòu)技術(shù)選型怎么做掰烟?

在互聯(lián)網(wǎng)應(yīng)用中爽蝴,數(shù)據(jù)爆發(fā)式的增長(zhǎng),實(shí)際上軟件架構(gòu)的本質(zhì)就是對(duì)數(shù)據(jù)的維護(hù)纫骑。對(duì)數(shù)據(jù)的操作可以歸納為三類:讀蝎亚、寫和檢索。

隨著網(wǎng)站的流量越來(lái)越大先馆,數(shù)據(jù)量也爆發(fā)式的增長(zhǎng)发框,網(wǎng)站響應(yīng)越來(lái)越慢,服務(wù)器經(jīng)常宕機(jī)煤墙。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)不能滿足流量和數(shù)據(jù)的爆發(fā)式增長(zhǎng)梅惯。于是根據(jù)不同的業(yè)務(wù)需求,出現(xiàn)了很多不同的數(shù)據(jù)庫(kù)仿野。

根據(jù)數(shù)據(jù)庫(kù)的類型劃分铣减。有關(guān)系型數(shù)據(jù)庫(kù):mysql,oracle,sqlserver,postgresql等。nosql數(shù)據(jù)庫(kù):mongodb,hbase,cassandra,redis脚作,CouchDB葫哗,Riak,Membase等鳖枕。

根據(jù)數(shù)據(jù)庫(kù)的用途劃分魄梯。有緩存數(shù)據(jù)庫(kù):redis,memcached,h2db等,日志數(shù)據(jù)庫(kù):kahadb等宾符。k-v型數(shù)據(jù)庫(kù):leveldb,redis等酿秸。

檢索型存儲(chǔ)中間件有:elasticsearch、solr魏烫、Lucene等辣苏。

傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)是用途最廣泛也是用的最多的數(shù)據(jù)庫(kù)。關(guān)系型數(shù)據(jù)庫(kù)是強(qiáng)事物一致性(ACID)哄褒,使用比較早稀蟋,技術(shù)相對(duì)成熟,查詢可以根據(jù)字段呐赡,以及表現(xiàn)各個(gè)數(shù)據(jù)對(duì)象之間的關(guān)系退客。在CAP理論中實(shí)現(xiàn)的是CA。沒(méi)有P分區(qū)性,單點(diǎn)瓶頸是硬傷萌狂。

當(dāng)關(guān)系型數(shù)據(jù)庫(kù)越來(lái)越成為瓶頸時(shí)档玻,為解決單點(diǎn)瓶頸犧牲CAP屬性中的C,出現(xiàn)了nosql數(shù)據(jù)庫(kù)茫藏。針對(duì)某些特殊的使用場(chǎng)景误趴,出現(xiàn)了非關(guān)系型數(shù)據(jù)庫(kù)。如:nosql务傲,緩存等凉当。以下針對(duì)不同的業(yè)務(wù)場(chǎng)景闡述各個(gè)數(shù)據(jù)庫(kù)的特性。

對(duì)于數(shù)據(jù)庫(kù)的選型售葡,ACID是重要的考慮指標(biāo)看杭,如果對(duì)ACID要求很高,應(yīng)該選擇關(guān)系型數(shù)據(jù)庫(kù)天通。其次部分對(duì)一致性要求不高的泊窘,寫并發(fā)非常大的可以考慮其他的nosql數(shù)據(jù)庫(kù)。但是有的業(yè)務(wù)并發(fā)非常高像寒,對(duì)ACID要求也非常高,則對(duì)業(yè)務(wù)數(shù)據(jù)和數(shù)據(jù)庫(kù)進(jìn)行拆分瓜贾。

以下對(duì)各種業(yè)務(wù)場(chǎng)景應(yīng)該如何優(yōu)化和存儲(chǔ)選型诺祸。

一、讀多寫少

在互聯(lián)網(wǎng)應(yīng)用中祭芦,對(duì)于一般的量級(jí)筷笨,免費(fèi)的關(guān)系型數(shù)據(jù)庫(kù)mysql、postgresql是首選龟劲。支持事物胃夏,穩(wěn)定性和成熟度比較好。

當(dāng)訪問(wèn)量越來(lái)越大昌跌,數(shù)據(jù)量還不是很大的時(shí)候仰禀。也就是寫不是瓶頸,而讀成為主要的瓶頸蚕愤。一是增加從庫(kù)分擔(dān)讀的壓力答恶,另一個(gè)是在數(shù)據(jù)庫(kù)和應(yīng)用系統(tǒng)之間加一層緩存memcache,redis。增加緩存之后萍诱,能抗住很多壓力悬嗓,大大降低了數(shù)據(jù)庫(kù)的讀請(qǐng)求。

二裕坊、讀多寫多

高并發(fā)場(chǎng)景中包竹,對(duì)數(shù)據(jù)庫(kù)的操作往往提現(xiàn)在高并發(fā)讀和高并發(fā)寫。當(dāng)讀和寫都成為瓶頸時(shí),這時(shí)采用的方案有:

1)對(duì)數(shù)據(jù)庫(kù)進(jìn)行橫向和縱向擴(kuò)展周瞎。按業(yè)務(wù)劃分悟狱,把一個(gè)數(shù)據(jù)庫(kù)實(shí)例擴(kuò)展成多個(gè)實(shí)例。按數(shù)據(jù)分片堰氓,把單表大數(shù)據(jù)量挤渐,水平分片成多個(gè)小表。

2)使用內(nèi)存表負(fù)載壓力双絮。常見的內(nèi)存表有:redis開啟aof功能浴麻。業(yè)務(wù)數(shù)據(jù)要持久化落盤。否則進(jìn)程一旦重啟囤攀,內(nèi)存數(shù)據(jù)就會(huì)丟失软免。

redis:是有硬盤存儲(chǔ)的內(nèi)存數(shù)據(jù)庫(kù),可以支持Master-Slave復(fù)制焚挠,其可以提供并發(fā)量遠(yuǎn)高于關(guān)系型數(shù)據(jù)庫(kù)膏萧。支持的數(shù)據(jù)結(jié)構(gòu):K-V,K-Sets蝌衔,K-Queue榛泛,K-Hash∝澹可適用于高并發(fā)讀寫業(yè)務(wù)場(chǎng)景曹锨,但局限于其數(shù)據(jù)結(jié)構(gòu),不能做復(fù)雜查詢剃允,只能以Key鍵值為基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)操作沛简。

memcachedb:是基于memcache添加了BerkeleyDB存儲(chǔ)機(jī)制和主輔復(fù)制而來(lái)。支持的數(shù)據(jù)結(jié)構(gòu)只要K-V結(jié)構(gòu)斥废〗烽梗可適用于高并發(fā)讀寫業(yè)務(wù)場(chǎng)景,同樣只局限于其數(shù)據(jù)結(jié)構(gòu)牡肉,不能做復(fù)雜查詢捧灰,只能以Key鍵值為基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)操作。

MongoDB:支持Master-Salve復(fù)制荚板,無(wú)schema凤壁,json結(jié)構(gòu)。字段可以任意擴(kuò)展跪另,可以建立字段索引和全字段索引拧抖。可以對(duì)任意字段建立索引查詢免绿。數(shù)據(jù)量越來(lái)越大時(shí)唧席,是吃內(nèi)存的大戶,數(shù)據(jù)一致性問(wèn)題會(huì)越來(lái)越嚴(yán)重。如果對(duì)數(shù)據(jù)一致性要求不高的讀多寫多業(yè)務(wù)淌哟,可以考慮使用此數(shù)據(jù)庫(kù)存儲(chǔ)迹卢。

三、讀少寫多

海量數(shù)據(jù)的寫入徒仓。如貨車app中的gps路線軌跡數(shù)據(jù)腐碱,每天的寫入庫(kù)的數(shù)據(jù)量上億條。如此巨大的寫入量用關(guān)系型數(shù)據(jù)庫(kù)顯然是不合適的掉弛。關(guān)系型數(shù)據(jù)庫(kù)雖然可以采用批量導(dǎo)入的方式增強(qiáng)寫入能力症见,但其強(qiáng)制落盤,對(duì)磁盤IO是影響主要因素殃饿。cassandra和habase其先寫內(nèi)存谋作,異步落盤機(jī)制對(duì)磁盤IO消耗更低。

Cassandra:java開發(fā)乎芳,結(jié)構(gòu)簡(jiǎn)單遵蚜。其數(shù)據(jù)采用分片機(jī)制,副本備份與容錯(cuò)復(fù)制奈惑。面向列式存儲(chǔ)吭净。內(nèi)存寫入與異步刷盤的機(jī)制,使其在寫操作遠(yuǎn)高于讀操作場(chǎng)景中携取,也能輕松應(yīng)對(duì)攒钳。

HBASE:支持?jǐn)?shù)十億行,數(shù)百萬(wàn)列雷滋。對(duì)于海量數(shù)據(jù)的寬表,面向列式存儲(chǔ)文兢,無(wú)schema晤斩,可任意擴(kuò)展列。

四姆坚、讀少寫少

在小系統(tǒng)澳泵,業(yè)務(wù)量低、數(shù)據(jù)量少的系統(tǒng)兼呵,對(duì)讀寫操作都比較少兔辅,當(dāng)然是怎么快就怎么來(lái)。選用mysql免費(fèi)數(shù)據(jù)庫(kù)是最合適的選擇击喂。

五维苔、復(fù)雜條件檢索

關(guān)系型數(shù)據(jù)庫(kù)通常使用b+tree索引,非關(guān)系型數(shù)據(jù)庫(kù)如cassandra使用LSM結(jié)構(gòu)索引懂昂。所有的索引多列復(fù)雜條件查詢的檢索效率遠(yuǎn)遠(yuǎn)低于索引引擎介时。

常用開源的搜索引擎有l(wèi)uence,solr,elasticsearch,sphinx等。

solr:查詢快沸柔,但是更新索引速度偏慢循衰。主要應(yīng)用于那種對(duì)數(shù)據(jù)的實(shí)時(shí)性要求不高的業(yè)務(wù)。

elasticserach:更新速度比solr快褐澎,但是查詢速度相對(duì)solr較慢会钝。主要應(yīng)用于實(shí)時(shí)索引查詢的業(yè)務(wù)。

六工三、總結(jié)

1)對(duì)ACID有強(qiáng)要求業(yè)務(wù)一般使用的數(shù)據(jù)存儲(chǔ)采用關(guān)系型數(shù)據(jù)庫(kù)迁酸,如mysql,postgresql徒蟆、oracle悼粮、sql server等癌椿。

2)讀多寫少的場(chǎng)景,使用非關(guān)系型數(shù)據(jù)庫(kù)Cassandra、hbase螟蝙、MongoDB等。

3)緩解高并發(fā)讀對(duì)數(shù)據(jù)庫(kù)造成的讀瓶頸在塔,使用緩存:memcached胳搞、redis等。

4)復(fù)雜的數(shù)據(jù)檢索姥闪,使用外置索引:elasticsearch始苇、solr等。

5)歡迎點(diǎn)擊鏈接加入群【大數(shù)據(jù)/運(yùn)維/java架構(gòu)】:https://jq.qq.com/?_wv=1027&k=5L0LFRD

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末筐喳,一起剝皮案震驚了整個(gè)濱河市催式,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌避归,老刑警劉巖荣月,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異梳毙,居然都是意外死亡哺窄,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門账锹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)萌业,“玉大人,你說(shuō)我怎么就攤上這事奸柬∩辏” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鸟缕,是天一觀的道長(zhǎng)晶框。 經(jīng)常有香客問(wèn)我排抬,道長(zhǎng),這世上最難降的妖魔是什么授段? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任蹲蒲,我火速辦了婚禮,結(jié)果婚禮上侵贵,老公的妹妹穿的比我還像新娘届搁。我一直安慰自己,他們只是感情好窍育,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布卡睦。 她就那樣靜靜地躺著,像睡著了一般漱抓。 火紅的嫁衣襯著肌膚如雪表锻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天乞娄,我揣著相機(jī)與錄音瞬逊,去河邊找鬼。 笑死仪或,一個(gè)胖子當(dāng)著我的面吹牛确镊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播范删,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蕾域,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了到旦?” 一聲冷哼從身側(cè)響起旨巷,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎添忘,沒(méi)想到半個(gè)月后契沫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昔汉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拴清。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靶病。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖口予,靈堂內(nèi)的尸體忽然破棺而出娄周,到底是詐尸還是另有隱情,我是刑警寧澤沪停,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布煤辨,位于F島的核電站裳涛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏众辨。R本人自食惡果不足惜端三,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鹃彻。 院中可真熱鬧郊闯,春花似錦、人聲如沸蛛株。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谨履。三九已至欢摄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笋粟,已是汗流浹背怀挠。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矗钟,地道東北人唆香。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吨艇,于是被迫代替她去往敵國(guó)和親躬它。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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