黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

關(guān)于大型網(wǎng)站技術(shù)演進(jìn)的思考(五)--存儲(chǔ)的瓶頸

系統(tǒng) 2475 0

   上文里我遺留了兩個(gè)問題,一個(gè)問題是數(shù)據(jù)庫(kù)做了水平拆分以后,如果我們對(duì)主鍵的設(shè)計(jì)采取一種均勻分布的策略,那么它對(duì)于被水平拆分出的表后續(xù)的查詢操作 將有何種影響,第二個(gè)問題就是水平拆分的擴(kuò)容問題。這兩個(gè)問題在深入下去,本系列就越來越技術(shù)化了,可能最終很多朋友讀完后還是沒有找到解決實(shí)際問題的啟 迪,而且我覺得這些問題都是像BAT這樣巨型互聯(lián)網(wǎng)公司才會(huì)認(rèn)真思考的,因此本篇我打算換個(gè)角度來闡述本文的后續(xù)內(nèi)容。

?

  這里我們 首先要明確一個(gè)問題,到底是什么因素促使我們?nèi)プ鰯?shù)據(jù)庫(kù)的垂直拆分和水平拆分的呢?答案很簡(jiǎn)單就是業(yè)務(wù)發(fā)展的需求,前文里的水平拆分技術(shù)方案基本都是拋棄 千變?nèi)f化的業(yè)務(wù)規(guī)則的限制,盡量將水平拆分的問題歸為一個(gè)簡(jiǎn)單的技術(shù)實(shí)現(xiàn)方案,而純技術(shù)手段時(shí)常是看起來很美,但是到了面對(duì)現(xiàn)實(shí)問題時(shí)候,常常會(huì)變得那么 蒼白和無力。

?

  水平拆分 的難題里我還有個(gè)難題沒有講述,就是水平拆分后對(duì)查詢操作的影響,特別是對(duì)單表查詢的影響,這點(diǎn)估計(jì)也是大伙最為關(guān)心的問題,今天我不在延著水平拆分的技 術(shù)手段演進(jìn)是闡述上文的遺留問題,而是我要把前面提到的技術(shù)手段和一些典型場(chǎng)景結(jié)合起來探討如何解決網(wǎng)站存儲(chǔ)的瓶頸問題。

?

  前文中我總結(jié)過一個(gè)解決存儲(chǔ)瓶頸的脈絡(luò),具體如下:

  單庫(kù)數(shù)據(jù)庫(kù)--> 數(shù)據(jù)庫(kù)讀寫分離--> 緩存技術(shù)--> 搜索技術(shù)--> 數(shù)據(jù)的垂直拆分--> 數(shù)據(jù)的水平拆分

?

  這個(gè)脈絡(luò)給一些朋友產(chǎn)生了誤解,就是認(rèn)為這個(gè)過程應(yīng)該是個(gè)串行的過程,其實(shí)在實(shí)際的場(chǎng)景下這個(gè)過程往往是并行的,但是里面有一個(gè)元素應(yīng)該是串行的或者說思考時(shí)候有個(gè)先后問題,那就是對(duì)數(shù)據(jù)庫(kù)層的操作,具體如下:

  單庫(kù)數(shù)據(jù)庫(kù)--> 數(shù)據(jù)庫(kù)讀寫分離--> 數(shù)據(jù)的垂直拆分--> 數(shù)據(jù)的水平拆分

?

  而緩存技 術(shù)和搜索技術(shù)在數(shù)據(jù)庫(kù)的任意階段里都可以根據(jù)實(shí)際的業(yè)務(wù)需求隨時(shí)切入其中幫助數(shù)據(jù)庫(kù)減輕不必要的壓力。例如,當(dāng)網(wǎng)站的后臺(tái)數(shù)據(jù)庫(kù)還是單庫(kù)的時(shí)候,數(shù)據(jù)庫(kù)漸 漸出現(xiàn)了瓶頸問題,而這個(gè)瓶頸又沒有達(dá)到需要采取大張旗鼓做讀寫分離方案的程度,那么我這個(gè)時(shí)候可以考慮引入緩存機(jī)制。不過要合理的使用緩存我們首先要明 確緩存本身的特點(diǎn),這些特點(diǎn)如下所示:

?

  特點(diǎn)一:緩存主要是適用于讀操作,并且緩存的讀操作的效率要遠(yuǎn)遠(yuǎn)高于從數(shù)據(jù)庫(kù)以及硬盤讀取數(shù)據(jù)的效率。

   特點(diǎn)二:緩存的數(shù)據(jù)是存儲(chǔ)在內(nèi)存當(dāng)中,因此當(dāng)系統(tǒng)重啟,宕機(jī)等等異常場(chǎng)景下,緩存數(shù)據(jù)就會(huì)不可逆的丟失,且無法恢復(fù),因此緩存不能作為可靠存儲(chǔ)設(shè)備,這 就導(dǎo)致一個(gè)問題,緩存里的數(shù)據(jù)必須首先從數(shù)據(jù)庫(kù)里同步到內(nèi)存中,而使用緩存的目的就是為了解決數(shù)據(jù)庫(kù)的讀操作效率低下的問題,數(shù)據(jù)庫(kù)的數(shù)據(jù)同步到緩存的操 作會(huì)因?yàn)閿?shù)據(jù)庫(kù)的效率低下而在性能上大打折扣,所以緩存適合的場(chǎng)景是那些固定不變的數(shù)據(jù)以及業(yè)務(wù)對(duì)實(shí)時(shí)性變化要求不高的數(shù)據(jù)。

?

  根據(jù)緩存的上述兩個(gè)特點(diǎn),我們可以把數(shù)據(jù)庫(kù)里和上述描述類似操作的相關(guān)數(shù)據(jù)遷移到緩存里,那樣我們就從數(shù)據(jù)庫(kù)上剝離了那些對(duì)數(shù)據(jù)庫(kù)價(jià)值不高的操作,讓數(shù)據(jù)庫(kù)專心做有價(jià)值的操作,這樣也是減輕數(shù)據(jù)庫(kù)壓力的一種手段。

?

  不過這個(gè) 手段局限性很強(qiáng),局限性主要是一臺(tái)計(jì)算機(jī)了用于存儲(chǔ)緩存的內(nèi)存的大小都是遠(yuǎn)遠(yuǎn)要低于硬盤,并且內(nèi)存的價(jià)格要遠(yuǎn)貴于硬盤,如果我們將大規(guī)模的數(shù)據(jù)從硬盤往內(nèi) 存遷移,從資源成本和利用率角度考慮性價(jià)比還是很低的,因此緩存往往都是用于轉(zhuǎn)存那些不會(huì)經(jīng)常變化的數(shù)據(jù)字典,以及經(jīng)常會(huì)被讀,而修改較少的數(shù)據(jù),但是這 些數(shù)據(jù)的規(guī)模也是有一定限度的,因此當(dāng)單庫(kù)數(shù)據(jù)庫(kù)出現(xiàn)了瓶頸時(shí)候馬上就著手進(jìn)行讀寫分離方案的設(shè)計(jì)性價(jià)比還是很高的。

?

  前文我講 到我們之所以選擇數(shù)據(jù)庫(kù)讀寫分離是主要原因是因?yàn)閿?shù)據(jù)庫(kù)的讀寫比例嚴(yán)重失衡所致,但是做了讀寫分離必然有個(gè)問題不可避免,寫庫(kù)向讀庫(kù)同步數(shù)據(jù)一定會(huì)存在一 定的時(shí)間差,如果我們想減小讀庫(kù)和寫庫(kù)數(shù)據(jù)的時(shí)間差,那么任然會(huì)導(dǎo)致讀庫(kù)因?yàn)閷懙牧6冗^細(xì)而發(fā)生部分性能的損失,但是時(shí)間差過大,或許又會(huì)無法滿足實(shí)際的 業(yè)務(wù)需求,因此這個(gè)時(shí)間差的設(shè)計(jì)一定要基于實(shí)際的業(yè)務(wù)需求合理的設(shè)計(jì)。

?

  同步的時(shí) 間差的問題還是個(gè)小問題,也比較好解決,但是如何根據(jù)實(shí)際的業(yè)務(wù)需求做讀寫分離這其實(shí)還是非常有挑戰(zhàn)性的,這里我舉個(gè)很常見的例子來說明讀寫分離的難度問 題,我們這里以淘寶為例,淘寶是個(gè)C2C的電商網(wǎng)站,它是互聯(lián)網(wǎng)公司提供一個(gè)平臺(tái),商家自助接入這個(gè)平臺(tái),在這個(gè)平臺(tái)上賣東西,這個(gè)和線下很多大賣場(chǎng)的模 式類似。淘寶是個(gè)大平臺(tái),它的交易表里一定是要記下所有商戶的交易數(shù)據(jù),但是針對(duì)單個(gè)商家他們只會(huì)關(guān)心自己的網(wǎng)店的銷售數(shù)據(jù),這就有一個(gè)問題了,如果某一 個(gè)商家要查詢自己的交易信息,淘寶就要從成千上萬的交易信息里檢索出該商家的交易信息,那么如果我們把所有交易信息放在一個(gè)交易表里,肯定有商家會(huì)有這樣 的疑問,我的網(wǎng)店每天交易額不大,為什么我查詢交易數(shù)據(jù)的速度和那些大商家一樣慢了?那么我們到底該如何是解決這樣的場(chǎng)景了?

?

  碰到這樣 的情況,當(dāng)網(wǎng)站的交易規(guī)模變大后就算我們把交易表做了讀寫分離估計(jì)也是沒法解決實(shí)際的問題,就算我們做的徹底點(diǎn)把交易表垂直拆分出來估計(jì)還是解決不了問 題,因?yàn)橐粋€(gè)業(yè)務(wù)數(shù)據(jù)庫(kù)擁有很多張表,但是真正壓力大的表畢竟是少數(shù),這個(gè)符合28原則,而數(shù)據(jù)庫(kù)大部分的關(guān)鍵問題又都是在那些數(shù)據(jù)壓力大的表里,就算我 們把這些表單獨(dú)做讀寫分離甚至做垂直拆分,其實(shí)只是把數(shù)據(jù)庫(kù)最大的問題遷移出原來數(shù)據(jù)庫(kù),而不是在解決該表的實(shí)際問題。

?

  如果我們 要解決交易表的問題我們首先要對(duì)交易表做業(yè)務(wù)級(jí)的拆分,那么我們要為交易表增加一個(gè)業(yè)務(wù)維度:實(shí)時(shí)交易和歷史交易,一般而言實(shí)時(shí)交易以當(dāng)天及當(dāng)天24小時(shí) 為界,歷史交易則是除去當(dāng)天交易外的所有歷史交易數(shù)據(jù)。實(shí)時(shí)交易數(shù)據(jù)和歷史交易數(shù)據(jù)有著很大不同,實(shí)時(shí)交易數(shù)據(jù)讀與寫是比較均衡的,很多時(shí)候估計(jì)寫的頻率 會(huì)遠(yuǎn)高于讀的頻率,但是歷史交易表這點(diǎn)上和實(shí)時(shí)交易就完全不同了,歷史交易表的讀操作頻率會(huì)遠(yuǎn)大于寫操作頻率,如果我們將交易表做了實(shí)時(shí)交易和歷史交易的 拆分后,那么讀寫分離方案適合的場(chǎng)景是歷史交易查詢而非實(shí)時(shí)交易查詢,不過歷史交易表的數(shù)據(jù)是從實(shí)時(shí)交易表里同步過來的,根據(jù)這兩張表的業(yè)務(wù)特性,我們可 以按如下方案設(shè)計(jì),具體如下:

?

  我們可以 把實(shí)時(shí)交易表設(shè)計(jì)成兩張表,把它們分別叫做a表和b表,a表和b表按天交替進(jìn)行使用,例如今天我們用a表記錄實(shí)時(shí)交易,明天我們就用b表記錄實(shí)時(shí)交易,當(dāng) 然我們事先可以用個(gè)配置表記錄今天到底使用那張表進(jìn)行實(shí)時(shí)交易記錄,為什么要如此麻煩的設(shè)計(jì)實(shí)時(shí)交易表了?這么做的目的是為了實(shí)時(shí)交易數(shù)據(jù)同步到歷史數(shù)據(jù) 時(shí)候提供便利,一般我們會(huì)在凌晨0點(diǎn)切換實(shí)時(shí)交易表,過期的實(shí)時(shí)交易表數(shù)據(jù)會(huì)同步到歷史交易表里,這個(gè)時(shí)候需要數(shù)據(jù)遷移的實(shí)時(shí)交易表是全表數(shù)據(jù)遷移,效率 是非常低下,假如實(shí)時(shí)交易表的數(shù)據(jù)量很大的時(shí)候,這種導(dǎo)入同步操作會(huì)變得十分耗時(shí),所以我們?cè)O(shè)計(jì)兩張實(shí)時(shí)交易表進(jìn)行切換來把數(shù)據(jù)同步的風(fēng)險(xiǎn)降到最低。由此 可見,歷史交易表每天基本都只做一次寫操作,除非同步出了問題,才會(huì)重復(fù)進(jìn)行寫操作,但是寫的次數(shù)肯定是很低的,所以歷史交易表的讀寫比例失衡是非常嚴(yán)重 的。不過實(shí)時(shí)交易表的切換也是有技術(shù)和業(yè)務(wù)風(fēng)險(xiǎn)的,為了保證實(shí)時(shí)交易表的高效性,我們一般在數(shù)據(jù)同步操作成功后會(huì)清空實(shí)時(shí)交易表的數(shù)據(jù),但是我們很難保證 這個(gè)同步會(huì)不會(huì)有問題,因此同步時(shí)候我們最好做下備份,此外,兩個(gè)表切換的時(shí)候肯定會(huì)碰到這樣的場(chǎng)景,就是有人在凌晨0點(diǎn)前做了交易,但是這個(gè)交易是在零 點(diǎn)后做完,假如實(shí)時(shí)交易表會(huì)記錄交易狀態(tài)的演變過程,那么在切換時(shí)候就有可能兩個(gè)實(shí)時(shí)表的數(shù)據(jù)沒有做好接力,因此我們同步到歷史交易表的數(shù)據(jù)一定要保持一 個(gè)原則就是已經(jīng)完成交易的數(shù)據(jù),沒有完成的交易數(shù)據(jù)兩張實(shí)時(shí)交易還要完成一個(gè)業(yè)務(wù)上的接力,這就是業(yè)界常說的數(shù)據(jù)庫(kù)日切的問題。

?

  歷史交易 表本身就是為讀使用的,所以我們從業(yè)務(wù)角度將交易表拆分成實(shí)時(shí)交易表和歷史交易表本身就是在為交易表做讀寫分離,居然了設(shè)計(jì)了歷史交易表我們就做的干脆 點(diǎn),把歷史交易表做垂直拆分,將它從原數(shù)據(jù)庫(kù)里拆分出來獨(dú)立建表,隨著歷史交易的增大,上文里所說的某個(gè)商戶想快速檢索出自己的數(shù)據(jù)的難題并沒有得到根本 的改善,為了解決這個(gè)難題我們就要分析下難題的根源在那里。這個(gè)根源很簡(jiǎn)單就是我們把所有商戶的數(shù)據(jù)不加區(qū)別的放進(jìn)了一張表里,不管是交易量大的商戶還是 交易量小的商戶,想要查詢出自己的數(shù)據(jù)都要進(jìn)行全表檢索,而關(guān)系數(shù)據(jù)庫(kù)單表記錄達(dá)到一定數(shù)據(jù)量后全表檢索就會(huì)變的異常低效,例如DB2當(dāng)數(shù)據(jù)量超過了1億 多,mysql單表超過了100萬條后那么全表查詢這些表的記錄都會(huì)存在很大的效率問題,那么我們就得對(duì)歷史交易表進(jìn)一步拆分,因?yàn)閱栴}根源是單表數(shù)據(jù)量 太大了,那我們就可以對(duì)單表的數(shù)據(jù)進(jìn)行拆分,把單表分成多表,這個(gè)場(chǎng)景就和前面說的水平拆分里把原表變成邏輯表,原表的數(shù)據(jù)分散到各個(gè)獨(dú)立的邏輯表里的方 式一致,不過這里我們沒有一開始做水平拆分,那是會(huì)把問題變麻煩,我們只要在一個(gè)數(shù)據(jù)庫(kù)下對(duì)單表進(jìn)行拆分即可,這樣也能滿足我們的要求,并且避免了水平拆 分下的跨庫(kù)寫作的難題。接下來我們又有一個(gè)問題了那就是我們按什么維度拆分這張單表呢?

?

  我們按照 前文講到的水平拆分里主鍵設(shè)計(jì)方案執(zhí)行嗎?當(dāng)然不行哦,因?yàn)槟切┓桨该黠@提升不了商戶檢索數(shù)據(jù)的效率問題,所以我們要首先分析下商戶檢索數(shù)據(jù)的方式,商戶 一般會(huì)按這幾個(gè)維度檢索數(shù)據(jù),這些維度分別是:商戶號(hào)、交易時(shí)間、交易類型,當(dāng)然還有其他的維度,我這里就以這三個(gè)維度為例闡述下面的內(nèi)容,商戶查詢數(shù)據(jù) 效率低下的根本原因是全表檢索,其實(shí)商戶查詢至少有一個(gè)維度那就是商戶號(hào)來進(jìn)行查詢,如果我們把該商戶的數(shù)據(jù)存入到一張單獨(dú)的表里,自然查詢的效率會(huì)有很 大的提升,但是在實(shí)際系統(tǒng)開發(fā)里我們很少通過商戶號(hào)進(jìn)行拆分表,這是為什么呢?因?yàn)橐粋€(gè)電商平臺(tái)的商戶是個(gè)動(dòng)態(tài)的指標(biāo),會(huì)經(jīng)常發(fā)生變化,其次,商戶號(hào)的粒 度很細(xì),如果使用商戶號(hào)拆分表的必然會(huì)有這樣的后果那就是我們可能要頻繁的建表,隨著商戶的增加表的數(shù)量也會(huì)增加,造成數(shù)據(jù)的碎片化,同時(shí)不同的商戶交易 量是不一樣的,按商戶建表會(huì)造成數(shù)據(jù)存儲(chǔ)的嚴(yán)重不平衡。如果使用交易類型來拆分表,雖然維度的粒度比商戶號(hào)小,但是會(huì)造成數(shù)據(jù)的分散化,也就是說我們查詢 一個(gè)商戶的全部交易數(shù)據(jù)會(huì)存在很大問題。由此可見拆表時(shí)候如何有效的控制維度的粒度以及數(shù)據(jù)的聚集度是拆分的關(guān)鍵所在,因?yàn)槭褂媒灰讜r(shí)間這個(gè)維度就會(huì)讓拆 分更加合理,不過時(shí)間的維度的設(shè)計(jì)也是很有學(xué)問的,下面我們看看騰訊分析的維度,如下所示:

? 關(guān)于大型網(wǎng)站技術(shù)演進(jìn)的思考(五)--存儲(chǔ)的瓶頸(5)

  騰訊分析 的維度是今天這個(gè)其實(shí)相當(dāng)于實(shí)時(shí)交易查詢,除此之外都是對(duì)歷史數(shù)據(jù)查詢,它們分為昨天、最近7天和最近30天,我們?nèi)绻獙?duì)歷史交易表進(jìn)行拆分也是可以參 照騰訊分析的維度進(jìn)行,不過不管我們選擇什么維度拆分?jǐn)?shù)據(jù),那么都是犧牲該維度成全了其他維度,例如我們按騰訊分析的維度拆分?jǐn)?shù)據(jù),那么我們想靈活使用時(shí) 間查詢數(shù)據(jù)將會(huì)受到限制。

?

  我們把歷 史交易數(shù)據(jù)通過交易時(shí)間維度進(jìn)行了拆分,雖然得到了效率提升,但是歷史交易數(shù)據(jù)表是個(gè)累積表,隨著時(shí)間推移,首先是月表,接下來是周表都會(huì)因?yàn)閿?shù)據(jù)累積產(chǎn) 生查詢效率低下的問題,這個(gè)時(shí)候我們又該如何解決了?這個(gè)時(shí)候我們需要再引進(jìn)一個(gè)維度,那么這個(gè)時(shí)候我們可以選擇商戶號(hào)這個(gè)維度,但是商戶號(hào)作為拆分維度 是有一定問題的,因?yàn)闀?huì)造成數(shù)據(jù)分布不均衡,那么我們就得將維度的粒度由小變粗,其實(shí)一個(gè)電商平臺(tái)上往往少數(shù)商戶是完成了大部分電商平臺(tái)的交易,因此我們 可以根據(jù)一定指標(biāo)把重要商戶拆分出來,單獨(dú)建表,這樣就可以平衡了數(shù)據(jù)的分布問題。

?

  我們總結(jié)下上面的案例,我們會(huì)得到很多的啟迪,我將這些啟迪總結(jié)如下:

  啟迪一:數(shù)據(jù)庫(kù)的讀寫分離不是簡(jiǎn)單的把主庫(kù)數(shù)據(jù)導(dǎo)入到讀庫(kù)里就能解決問題,讀數(shù)據(jù)庫(kù)和寫數(shù)據(jù)的分離的目的是為了讓讀和寫操作不能相互影響效率。

  啟迪二:解決讀的瓶頸問題的本質(zhì)是減少數(shù)據(jù)的檢索范圍,數(shù)據(jù)檢索的范圍越小,讀的效率也就越高;

   啟迪三:數(shù)據(jù)庫(kù)的垂直拆分和水平拆分首先不應(yīng)該從技術(shù)角度進(jìn)行,而是通過業(yè)務(wù)角度進(jìn)行,如果數(shù)據(jù)庫(kù)進(jìn)行業(yè)務(wù)角度的水平拆分,那么拆分的維度往往是要根據(jù) 該表的某個(gè)字段進(jìn)行的,這個(gè)字段選擇要有一定原則,這個(gè)原則主要是該字段的維度的粒度不能過細(xì),該字段的維度范圍不能經(jīng)常的動(dòng)態(tài)發(fā)生變化,最后就是該維度 不能讓數(shù)據(jù)分布嚴(yán)重失衡。

?

  回到現(xiàn)實(shí)的開發(fā)里,對(duì)于一個(gè)數(shù)據(jù)庫(kù)做拆表,分表的工作其實(shí)是一件很讓人惱火的工作,這主要是有以下原因所造成的,具體如下所述:

?

  原因一:一個(gè)數(shù)據(jù)庫(kù)其實(shí)容納多少?gòu)埍硎怯幸欢ㄏ拗频模退銢]有超過這個(gè)限制,如果原庫(kù)本來有30 張表,我們拆分后變成了60 張,接著是120 張,那么數(shù)據(jù)庫(kù)本身管理這么多表也會(huì)消耗很多性能,因此公司的DBA 往往會(huì)控制那些過多分表的行為。

?

  原因二:每次拆表后,都會(huì)牽涉到歷史數(shù)據(jù)的遷移問題,這個(gè)遷移風(fēng)險(xiǎn)很大,遷移方案如果設(shè)計(jì)的不完善可能會(huì)導(dǎo)致數(shù)據(jù)丟失或者損壞,如果關(guān)鍵數(shù)據(jù)發(fā)生了丟失和損壞,結(jié)果可能非常致命。因此在設(shè)計(jì)數(shù)據(jù)庫(kù)分表分庫(kù)方案時(shí)候我們要盡量讓受影響的數(shù)據(jù)范圍變得最小。

?

  原因三:每次拆表和分表都會(huì)讓系統(tǒng)的相關(guān)方繃緊神經(jīng),方案執(zhí)行后,會(huì)有很長(zhǎng)時(shí)間的監(jiān)控和觀察期,所以拆數(shù)據(jù)庫(kù)時(shí)常是一件令人討厭的事情。

?

  原因四:為了保證新方案執(zhí)行后確保系統(tǒng)沒有問題,我們常常會(huì)讓新舊系統(tǒng)并行運(yùn)行一段時(shí)間,這樣可以保證如果新方案出現(xiàn)問題,問題的影響面最低,但是這種做法也有一個(gè)惡果就是會(huì)導(dǎo)致數(shù)據(jù)遷移方案要進(jìn)行動(dòng)態(tài)調(diào)整,從而增加遷移數(shù)據(jù)的風(fēng)險(xiǎn)

?

  因此當(dāng)公司不得不做這件事情時(shí)候,公司都會(huì)很自然去考慮第三種解決方案, 第三種解決方案是指盡量不改變?cè)瓟?shù)據(jù)庫(kù)的功能,而是另起爐灶,使用新技術(shù)來解決我們的問題 ,例如前文所說的搜索技術(shù)解決數(shù)據(jù)庫(kù)like的低效問題就是其中方案之一,該方案只要我們將數(shù)據(jù)庫(kù)的表按一定時(shí)間導(dǎo)入到文件系統(tǒng),然后對(duì)文件建立倒排索引,讓like查詢效率更好,這樣就不用改變?cè)瓟?shù)據(jù)庫(kù)的功能,又能減輕數(shù)據(jù)庫(kù)的壓力。

?

  現(xiàn)在常用 的第三種解決方案就是使用NoSql數(shù)據(jù)庫(kù),NoSql數(shù)據(jù)庫(kù)大多都是針對(duì)文件進(jìn)行的,因此我們可以和使用搜索引擎那樣把數(shù)據(jù)導(dǎo)入到文件里就行 了,NoSql基本都采用Key/Value這種簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)和關(guān)系數(shù)據(jù)庫(kù)比起來更加的靈活,對(duì)原始數(shù)據(jù)的約束最少,所以在NoSql數(shù) 據(jù)庫(kù)里建表我們可以很靈活的把列和行的特性交叉起來用,這句話可能很多人不太理解,下面我舉個(gè)例子解釋下,例如hadoop技術(shù)體系里的 hbase,hbase是一個(gè)基于列族的數(shù)據(jù)庫(kù),使用hbase時(shí)候我們就可以通過列來靈活的拆分?jǐn)?shù)據(jù),比如我們可以把中國(guó)的省份作為一個(gè)列,將該省份的 數(shù)據(jù)都放入到這個(gè)列下面,在省這個(gè)維度下我們可以接著在定義一個(gè)列的維度,例如軟件行業(yè),屬于軟件行業(yè)的數(shù)據(jù)放在這個(gè)列下面,最終提供用戶查詢時(shí)候我們就 可以減少數(shù)據(jù)檢索的范圍,最終達(dá)到提升查詢效率的目的。由此可見當(dāng)我們用慣了關(guān)系數(shù)據(jù)庫(kù)后,學(xué)習(xí)像hbase這樣的Nosql數(shù)據(jù)庫(kù)我們會(huì)非常的不適應(yīng), 因?yàn)殛P(guān)系數(shù)據(jù)庫(kù)的表有固定模式,也就是我們常說的結(jié)構(gòu)化數(shù)據(jù),當(dāng)表的定義好了后,就算里面沒有數(shù)據(jù),那么這個(gè)結(jié)構(gòu)也就固定了,我們使用表的時(shí)候都是按這個(gè) 模型下面,我們幾乎感覺不到它,但是到了hbase的使用就不同了,hbase使用時(shí)候我們都在不停的為數(shù)據(jù)增加結(jié)構(gòu)化模型,而且這個(gè)維度是以列為維度 的,而關(guān)系數(shù)據(jù)庫(kù)里列確定后我們使用時(shí)候是無法改變的,這就是學(xué)習(xí)hbase的最大困難之一。Hbase之所以這么麻煩的設(shè)計(jì)這樣的計(jì)算模型,終極目的就 是為了讓海量數(shù)據(jù)按不同維度存儲(chǔ)起來,使用時(shí)候盡全力檢索數(shù)據(jù)檢索的數(shù)量,從而達(dá)到海量數(shù)據(jù)快速讀取的目的。

?

  好了,今天就寫到這里,祝大家生活愉快。

?

原文: http://www.cnblogs.com/sharpxiajun/p/4265853.html

?

關(guān)于大型網(wǎng)站技術(shù)演進(jìn)的思考(五)--存儲(chǔ)的瓶頸(5)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論