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

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

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

    走自己的路

    路漫漫其修遠兮,吾將上下而求索

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      50 隨筆 :: 4 文章 :: 118 評論 :: 0 Trackbacks
     

    Mysql在數據量大的情況下,會遇到水平分表的情況。

    1.       根據業務屬性拆表

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

    用業務屬性拆表,業務關系復雜的情況下,如果要根據其他條件查詢,其他的條件都必須和這個屬性關聯起來,查詢條件必須帶有這個屬性。

    例子:

    用戶profile表根據用戶ID取模進行水平拆分。

    社區里有群組,群組里有應用,應用有各種類型。可以用群組ID,應用ID拆表。

    問題:

    根據某個條件查詢時無法獲取拆表的屬性

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

    比如用戶在某網站下了訂單,我們根據用戶ID對訂單進行了分表,這樣用戶可以方便地查詢他所關聯的訂單。但用戶投訴時,客服需要根據訂單號查詢訂單,訂單號中可以含有分表的信息,比如訂單拆分成100張表,訂單號中可以有兩位用來表明該訂單處于哪張表中

    2)         key-value store存儲對應關聯

    原理是用key value store做索引表

    3)         數據冗余

    需要關聯的表可以進行數據冗余。避免了查詢。

    例子:

    購買禮品。購買虛擬禮品時,我們根據了購買者的ID進行了拆表,同時訂單號中也含有了分表信息。但是用戶還可能根據被贈送方進行查詢,這時我們可以在購買成功后為被贈送方冗余生成一條記錄。

    4)         緩存,NOSQL

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

    2.       根據時間拆表

    當表的關系比較復雜時,無法根據某個維度進行分表。但是有明顯的時效性。

    例子:

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

    3.       根據自增長ID拆表

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

    4.       數據遷移的方式

    當一些很久之前的數據,很少再查詢。比如員工工資表,我們可以只存今年的工資情況。而歷史數據我們可以遷移到一張salary_old表中,保證數據不會丟失。但也可以用來查詢。

    分庫的原理也類似。



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

    評論

    # re: Mysql水平分表 2011-02-22 12:56 餓了否訂餐網
    如果拆分了統計是怎么做呢  回復  更多評論
      

    # re: Mysql水平分表 2011-02-22 13:18 叱咤紅人
    @餓了否訂餐網
    確實是個問題。
    1.計數統計,直接存為key value的形式。
    2.線下統計:對所有表進行分析,統計程序寫起來很復雜,頭痛。這種方式只適合根據簡單sql或存儲過程就可以分析出來的數據。
    3.統計收集:如果統計程序寫起來相當復雜的,可以把數據按方便的格式存儲到可以存大數據量的數據庫或文件系統中。我現在把統計數據異步地存儲到了mongodb。這樣分析程序起來就簡單了,格式存儲的好可以支持實時查詢都沒問題。
      回復  更多評論
      

    # re: Mysql水平分表 2011-02-24 19:22 E書文學
    學習到了謝謝博主  回復  更多評論
      

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


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 午夜寂寞在线一级观看免费| 99无码人妻一区二区三区免费| 爽爽日本在线视频免费| 麻豆狠色伊人亚洲综合网站| 免费专区丝袜脚调教视频| 亚洲麻豆精品果冻传媒| h视频在线观看免费网站| 亚洲ts人妖网站| 免费看的黄色大片| 另类小说亚洲色图| 国产精品亚洲不卡一区二区三区| g0g0人体全免费高清大胆视频| 最新精品亚洲成a人在线观看| 99免费在线视频| 亚洲精品偷拍无码不卡av| 成年美女黄网站色大免费视频| 亚洲日本VA午夜在线电影| 免费夜色污私人影院在线观看| jzzjzz免费观看大片免费| 西西人体44rt高清亚洲| 成人免费一级毛片在线播放视频| 亚洲AV日韩综合一区尤物| 无码欧精品亚洲日韩一区夜夜嗨 | 久久精品国产亚洲AV网站| 91福利视频免费| 亚洲自偷自偷在线成人网站传媒| 国产在线播放免费| 国产无遮挡色视频免费观看性色| 久久久久无码精品亚洲日韩| 一二三四视频在线观看中文版免费| 日韩在线视精品在亚洲| 久久精品亚洲中文字幕无码网站 | 女人张开腿等男人桶免费视频| 黄色a级免费网站| 亚洲国产成人久久综合一| 成全视频在线观看免费高清动漫视频下载| 色婷婷精品免费视频| 亚洲一区免费观看| 免费人成年轻人电影| 亚洲高清视频免费| 一个人看的www在线免费视频|