paulwong

          鐵路的售票系統來說明分庫分表對架構的影響

          一、問題:鐵路的售票系統的數據量是海量嗎?

          不是。因為數據量不大,真不大。

          每一個車次與車次間是獨立的,每車次不超過2000張票,一天發車不超過50萬車次;
          以預售期15天來講,15*0.1億張不超過1.5億筆的熱線數據,稱不上海量數據的。
          再加上可以按線路分庫,更是不到千萬級的單表容量。已經發車完成的進入歸檔分析。
          即數據庫按路線使用不同的服務器,不同的車次放在不同的表中。并發量鎖真不大。

          當然,如果不分庫分表,再加上不歸檔處理,鐵路的售票系統的數據量看起來是海量的;
          關鍵是這海量的數據沒有意義。


          二、如何分庫分表?

          2.1 分庫,考慮數據間沒有直接關系和服務器如何部署

          鐵路的售票系統為例來說,按路線分庫,再按車次分表是合理的。
          設路線有1萬條,按每1000條需要兩臺服務器(一臺熱機沉余),不到20臺服務器
          如果使用SAN存儲,則使用SAN作為存儲,本機作為熱機沉余,只需要10臺。
          當然使用mySQL這種經濟型數據庫,服務器需要更多來防災;
          即可以采用雙寫或多寫的方式來保證數據的絕對安全。

          2.2分表,考慮數據間不存在重疊,即數據滿足二分原則

          鐵路的售票系統的任意兩個車次是沒有關系的,所以可以分表。
          電信的某個用戶的通話和其它用戶的通話記錄,也是沒有關系,所以可以分表處理
          (實際上電信的系統,分庫分表后也是不大的,難在后臺的計費、結算等規則)



          三、數據庫訪問接口



          1. 元數據:如何識別到當前要處理的數量在哪張表?

          鐵路的售票系統會有一個車次管理系統,例2012年2月12日 D3206 車次,
          按預先設計的在哪臺服務器的哪個庫,建哪個表。

          2.建立元數據的規則:即具體如何分庫分表的規則

          這個就是數據庫的訪問接口。

          3.數據庫訪問接口的透明程度

          即哪個層知道哪些元數據信息。
          例,是否讓窗口售票的客戶端來解析元數據的規則然后緩存,還是通過中間件來解析緩存的

          具體各層使用怎樣透明程度,和業務性質、節點和數據中心的拓撲等有關。



          四、歷史數據歸檔與分析

          1.使用分庫分表后,數據需要歸檔,分析處理的程序變得復雜,但使聯機交易變得簡單
          2.分析:要注意是針對熱線數據分析、歸檔數據分析、混合分析有關,
          通過分庫分表和歸檔,更方便使用分布式的統計方案。

          具體可以參考,淘寶的開放平臺架構師寫的文章:

          結論:分庫分表跟不分庫分表,整個架構是完全不一樣的。

          像鐵票的售票系統、淘寶、電信、銀行等,絕對要采用分庫分表的數據存儲方案,

          來解決數據量的增長而不影響性能的問題。

          像淘寶等互聯網應用還要解決帶寬即CDN問題。

          posted on 2012-01-17 13:24 paulwong 閱讀(625) 評論(0)  編輯  收藏 所屬分類: 性能優化火車站售票系統

          主站蜘蛛池模板: 贡觉县| 芷江| 枣强县| 枣阳市| 林西县| 石屏县| 手游| 东安县| 南涧| 若尔盖县| 昌都县| 舟山市| 盖州市| 万州区| 奉化市| 萍乡市| 沙雅县| 丽江市| 富蕴县| 杭锦后旗| 静海县| 南投县| 宁城县| 九龙城区| 永济市| 克拉玛依市| 鲁山县| 连云港市| 宁城县| 桓仁| 剑阁县| 南雄市| 花莲县| 蓬安县| 井陉县| 湘潭县| 霍州市| 涟水县| 岳阳市| 开远市| 神木县|