<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    走自己的路

    路漫漫其修遠(yuǎn)兮,吾將上下而求索

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      50 隨筆 :: 4 文章 :: 118 評(píng)論 :: 0 Trackbacks
     

    Mysql在數(shù)據(jù)量大的情況下,會(huì)遇到水平分表的情況。

    1.       根據(jù)業(yè)務(wù)屬性拆表

    這種分表方式的算法大致是取模,hashmd5等。

    用業(yè)務(wù)屬性拆表,業(yè)務(wù)關(guān)系復(fù)雜的情況下,如果要根據(jù)其他條件查詢,其他的條件都必須和這個(gè)屬性關(guān)聯(lián)起來(lái),查詢條件必須帶有這個(gè)屬性。

    例子:

    用戶profile表根據(jù)用戶ID取模進(jìn)行水平拆分。

    社區(qū)里有群組,群組里有應(yīng)用,應(yīng)用有各種類(lèi)型。可以用群組ID,應(yīng)用ID拆表。

    問(wèn)題:

    根據(jù)某個(gè)條件查詢時(shí)無(wú)法獲取拆表的屬性

    1)         條件中含有分表的信息

    比如用戶在某網(wǎng)站下了訂單,我們根據(jù)用戶ID對(duì)訂單進(jìn)行了分表,這樣用戶可以方便地查詢他所關(guān)聯(lián)的訂單。但用戶投訴時(shí),客服需要根據(jù)訂單號(hào)查詢訂單,訂單號(hào)中可以含有分表的信息,比如訂單拆分成100張表,訂單號(hào)中可以有兩位用來(lái)表明該訂單處于哪張表中

    2)         key-value store存儲(chǔ)對(duì)應(yīng)關(guān)聯(lián)

    原理是用key value store做索引表

    3)         數(shù)據(jù)冗余

    需要關(guān)聯(lián)的表可以進(jìn)行數(shù)據(jù)冗余。避免了查詢。

    例子:

    購(gòu)買(mǎi)禮品。購(gòu)買(mǎi)虛擬禮品時(shí),我們根據(jù)了購(gòu)買(mǎi)者的ID進(jìn)行了拆表,同時(shí)訂單號(hào)中也含有了分表信息。但是用戶還可能根據(jù)被贈(zèng)送方進(jìn)行查詢,這時(shí)我們可以在購(gòu)買(mǎi)成功后為被贈(zèng)送方冗余生成一條記錄。

    4)         緩存,NOSQL

    和數(shù)據(jù)冗余類(lèi)似。例子中提到的群組應(yīng)用的拆表例子,我們已經(jīng)按照群組ID和應(yīng)用類(lèi)型進(jìn)行了分表。但是當(dāng)我要查詢最近所有類(lèi)型的應(yīng)用時(shí),就遇到困難了。我們需要把該群組的所有應(yīng)用類(lèi)型都查詢一遍,而且還要再進(jìn)行排序,分頁(yè)等等。其實(shí),可以用緩存的方式存儲(chǔ)最近幾百條應(yīng)用。

    2.       根據(jù)時(shí)間拆表

    當(dāng)表的關(guān)系比較復(fù)雜時(shí),無(wú)法根據(jù)某個(gè)維度進(jìn)行分表。但是有明顯的時(shí)效性。

    例子:

    想必大家都用微薄,某人發(fā)的微薄,會(huì)被推送到千家萬(wàn)戶。所以某條微薄是無(wú)法根據(jù)用戶ID進(jìn)行分表查詢。而微薄是有很強(qiáng)的時(shí)效性的。一年前的默認(rèn)的動(dòng)態(tài)信息是不會(huì)再關(guān)心的。我們把微薄按時(shí)間分表,三個(gè)月一張表。而行級(jí)緩存(memcached)只存儲(chǔ)了一個(gè)月。用戶微薄收件箱(微薄ID列表)一般都是限長(zhǎng)的。當(dāng)緩存服務(wù)器重啟或不命中時(shí),需要查詢Mysqlmysql按時(shí)間分表,緩存不命中的情況下,大部分情況下都是查近三個(gè)月的微薄。所以近1年的微薄我們可以存儲(chǔ)在物理資源比較好的數(shù)據(jù)庫(kù)服務(wù)器上。

    3.       根據(jù)自增長(zhǎng)ID拆表

    這種分割法不是取模分,而是每張表存指定量的數(shù)據(jù)。如果數(shù)據(jù)量到了,就存放到新表中。這樣可以完全控制每張表的數(shù)據(jù)量。關(guān)系非常簡(jiǎn)單并且有時(shí)效性的情況下可以用。

    4.       數(shù)據(jù)遷移的方式

    當(dāng)一些很久之前的數(shù)據(jù),很少再查詢。比如員工工資表,我們可以只存今年的工資情況。而歷史數(shù)據(jù)我們可以遷移到一張salary_old表中,保證數(shù)據(jù)不會(huì)丟失。但也可以用來(lái)查詢。

    分庫(kù)的原理也類(lèi)似。



    posted on 2011-02-22 10:06 叱咤紅人 閱讀(7598) 評(píng)論(4)  編輯  收藏

    評(píng)論

    # re: Mysql水平分表 2011-02-22 12:56 餓了否訂餐網(wǎng)
    如果拆分了統(tǒng)計(jì)是怎么做呢  回復(fù)  更多評(píng)論
      

    # re: Mysql水平分表 2011-02-22 13:18 叱咤紅人
    @餓了否訂餐網(wǎng)
    確實(shí)是個(gè)問(wèn)題。
    1.計(jì)數(shù)統(tǒng)計(jì),直接存為key value的形式。
    2.線下統(tǒng)計(jì):對(duì)所有表進(jìn)行分析,統(tǒng)計(jì)程序?qū)懫饋?lái)很復(fù)雜,頭痛。這種方式只適合根據(jù)簡(jiǎn)單sql或存儲(chǔ)過(guò)程就可以分析出來(lái)的數(shù)據(jù)。
    3.統(tǒng)計(jì)收集:如果統(tǒng)計(jì)程序?qū)懫饋?lái)相當(dāng)復(fù)雜的,可以把數(shù)據(jù)按方便的格式存儲(chǔ)到可以存大數(shù)據(jù)量的數(shù)據(jù)庫(kù)或文件系統(tǒng)中。我現(xiàn)在把統(tǒng)計(jì)數(shù)據(jù)異步地存儲(chǔ)到了mongodb。這樣分析程序起來(lái)就簡(jiǎn)單了,格式存儲(chǔ)的好可以支持實(shí)時(shí)查詢都沒(méi)問(wèn)題。
      回復(fù)  更多評(píng)論
      

    # re: Mysql水平分表 2011-02-24 19:22 E書(shū)文學(xué)
    學(xué)習(xí)到了謝謝博主  回復(fù)  更多評(píng)論
      

    # re: Mysql水平分表 2011-07-12 19:13 likun
    @叱咤紅人
    分表以后, 如果, 搜索的話, 怎么辦呢……  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 一级毛片免费播放试看60分钟| 国产日韩一区二区三免费高清| 亚洲国产a级视频| 国产婷婷成人久久Av免费高清 | 久久亚洲精品成人777大小说| 人成午夜免费视频在线观看| 人禽伦免费交视频播放| 亚洲欧洲日产专区| 亚洲乱码日产精品a级毛片久久| 84pao强力永久免费高清| 亚洲av第一网站久章草| 亚洲国产精品一区| 亚洲女人被黑人巨大进入| 麻豆高清免费国产一区| 色爽黄1000部免费软件下载| 久久久久久亚洲AV无码专区| 在线观看永久免费视频网站| 一区二区三区在线免费看| 成人亚洲国产精品久久| 亚洲国产高清美女在线观看| 亚洲一级特黄大片在线观看 | 日本免费人成黄页在线观看视频 | 在线免费观看国产| sss在线观看免费高清| 亚洲日本中文字幕天天更新| 久久夜色精品国产嚕嚕亚洲av| 国产精品国产免费无码专区不卡 | 日韩免费一级毛片| 亚洲精品在线免费观看| 久久av免费天堂小草播放| 国产偷国产偷亚洲清高APP| 亚洲精品影院久久久久久| 丝袜熟女国偷自产中文字幕亚洲| 成人免费无码大片a毛片软件| 午夜影院免费观看| 一个人免费观看www视频| 亚洲国产精品无码中文lv| 亚洲女人18毛片水真多| 亚洲av中文无码乱人伦在线r▽| 亚洲av午夜成人片精品电影| 免费无码又爽又刺激高潮的视频|