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

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

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

    一點一滴,編程人生

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      69 隨筆 :: 0 文章 :: 25 評論 :: 0 Trackbacks

    近段時間離職了,一個半月時間一直面試中,面試差不多大大小小30次,從運維到開發都有,成功3家,但是可惜我這邊對那3家不滿意,所以只能繼續努力尋找。

         今天比較特別面試的是數據庫的設計。面試我的人和我年齡一樣,說實話數據庫設計方面我不在行,但是他發布的職位上面只寫了網站維護,數據庫維護等字樣,比較模糊,所以我這邊直接的投遞,有了面試機會。

          面試開始那位仁兄直接的說了他所面臨的問題,公司數據庫數據到達百萬級別,以后可能會到達千萬,需要一個好的設計人員對數據庫進行優化設計,這里指的是不光設計符合功能需求,更加要符合性能需求,就是說數據庫設計上面需要兼顧到效率。

         他給我出了一道題目, 一個信息表,一個類別表。類別表中的類別成樹形結構的,這個樹可能會非常深,就是說類別會很多。信息表中有所有類別的信息。現在需要設計下類別表和信息表,使得信息表和類別表在查詢的效率能夠承受千萬級別的數據。

         我用比較正常的思維去設計,類別表中有id,name,parentid。這時候他說如果以這種方式設計那在查詢的時候不斷的用嵌套的方式查詢效率不行,他讓我想下,我說可以將類別表分為幾個小表和信息表聯結查詢,他說這個方法不行,我想了會沒有想到,他就直接給我講了他的方法,但是他說這個方法百萬級可以,但是千萬級的不行,他的方法也簡單,設第一個大類為1,第一個大類下面的一個類別為2,那么在類別表中存儲

        id  name                       category_id

        1  第一大類下的一個小類    '1,2'

     

    那么在查詢的時候 select * from category where  category_id like '1%';

     只要like后面不要寫'%1%'。  1的前面不要寫%,在效率上面還是能夠承受的,這個和索引類似。

     

    他也指出雖然這種方法提高了一定效率但是每次有一個新類別加入時候總要再次遍歷整個樹形類別,在適合的位置插入,這樣子的方式給維護類別表格帶來一定麻煩。

     

    那位仁兄還問題程序上分頁的問題,我說比較通常的方式是將在查詢數據庫的時候截取記錄上的某一頁記錄顯示。

    但是他說這樣子的方式對他的大量數據處理沒有用處。 

     

    以上就是那位仁兄的思路。我這邊沒有這方面經驗只能對這位仁兄說抱歉了,同時也非常感謝他提出的問題和答案。

     回來的路上一直在想這個問題,雖然他這樣子的方式可以回避掉嵌套查詢,但是我想到這樣子的存儲方式給增大了類別表格的記錄數量和更新刪除的難度,同時如果類別和信息多的話仍然會有查詢效率的問題產生。

     

      在網上查詢這種大量數據的數據庫設計方法,大部分方法都是分區表或者索引。

     


    1.按照月來分,每個月讓系統自動建一張表,然后把這個月的數據放在這個表里面2.就是用一個備份的數據服務器,把每個月的數據都導出到那個備份服務器上去,在備份服務器上面數據的存儲不按月來分,按照年來分,每年建一張新表,做報表的時候,就到備份服務器上面操作3.就是對這幾張表用對象數據庫,來存儲一個月的數據,這數據是在內存的,操作起來,比操作關系數據庫快,前段時間的數據還是放在關系數據庫里面,這樣就可以不用數據備份服務器了4 .定時清理數據,可以考慮用觸發器或者帶存儲過程的作業來實現;5.是考慮數據的轉換與提取,定期用程序或用事務復制導入原始/匯總數據,把數據復制到一臺專門做統計的服務器上,專門做查詢所用;查詢的時候做相應的優化,例如索引,視圖等這樣查詢的時候壓力就會小很多;同時考慮負載平衡,在空隙時利用其cpu和內存6 . 各業務系統和外部數據源傳送的數據為維系挽留系統輸入,這些數據分別經過數據格式檢查;源數據清洗抽取轉換、裝載數據到收集層;對收集層中數 據抽取、轉換、裝載到數據倉庫;數據倉庫中數據進行抽取、轉換并結合模型算法庫中的算法生成維系結果集以供輸出;同時通過數據倉庫接口,可將數據提供給應 用系統的本地化查詢使用。

    轉自:http://www.cnblogs.com/luluping/archive/2009/12/12/1622566.html

     

    大數據量的數據庫設計準則:   1、分區 (list、range、hash)。   2、根據where條件來決定分區策略。

    轉自:www.itpub.net

     

    個人認為: 1、既然數據量達到5000萬,是否可以考慮根據種子進行分類,把不同類的種子對應的記錄存放在不同的表中,或者每10個種子對應的數據一起放入一張表 中; 2、在種子信息表中,增加一個字段,該字段用于記錄該種子的產生的記錄是存放在哪張表里面。 不知道這樣是否有用,樓下的繼續。。

     

    轉自:http://www.soidc.net/discuss/30/040101/00/487088_1.html

     

     

          我對這方面沒有太多的涉及,所以對那位仁兄遇到的問題無法做出確切的回答。現在做下事后諸葛亮,我認為內存既然有限制,那么如果一個數據庫(不分區)的數據量到達一定程度下,對數據庫的數據查詢的效率一定有影響,不管設計的如何巧妙。所以分區策略,以硬盤空間來換效率是比較可行方法。

    posted on 2010-10-19 16:50 writegull 閱讀(1444) 評論(2)  編輯  收藏 所屬分類: 數據庫

    評論

    # re: 最近面試中遇到的海量數據庫設計問題【轉】[未登錄] 2010-10-24 14:45 永恒瞬間
    加個字段level指明當前是第幾級,然后查詢的時候,把level和parentid加起來查,這兩個字段加索引,這樣可能能應對一些時間。  回復  更多評論
      

    # re: 最近面試中遇到的海量數據庫設計問題【轉】 2013-12-02 15:31 王黎曉
    比較正常的思維是類別表中有id,name,parentid,key
    key即標識級別又標識父子關系,例如:一級IXX,二級IXXMXX,三級IXXMXXTXX  回復  更多評論
      

    主站蜘蛛池模板: 亚洲AV日韩AV一区二区三曲| 亚洲一区二区三区免费视频| 成人免费网站视频www| 午夜精品在线免费观看| 亚洲 欧洲 自拍 另类 校园| 在线免费观看色片| 日韩亚洲人成网站| 国产日韩成人亚洲丁香婷婷| 国产精品永久免费| 亚洲va久久久噜噜噜久久狠狠| 久久国产乱子伦精品免费强| 亚洲粉嫩美白在线| 蜜桃视频在线观看免费网址入口| 久久乐国产综合亚洲精品| 成年人免费网站在线观看| 亚洲妇女无套内射精| 亚洲av麻豆aⅴ无码电影| 久久成人永久免费播放| 久久91亚洲精品中文字幕| 老湿机一区午夜精品免费福利| 亚洲天堂中文字幕在线| 成人爽a毛片免费| 亚洲国产av一区二区三区丶| 日韩一级在线播放免费观看| 一级做α爱过程免费视频| 久久精品亚洲精品国产色婷 | 久久精品亚洲男人的天堂| 美女网站在线观看视频免费的| 亚洲欧洲国产日韩精品| 好爽又高潮了毛片免费下载| 一级做a爱片特黄在线观看免费看| 亚洲成人激情在线| 免费观看的av毛片的网站| 黄色网页在线免费观看| 亚洲国产美女视频| 亚洲免费无码在线| 最近2019免费中文字幕6| 免费播放国产性色生活片| 亚洲精品mv在线观看| 亚洲成人国产精品| 两性刺激生活片免费视频|