您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

結(jié)合實(shí)踐對水平分庫做一個系統(tǒng)地剖析

大?。?/span>0.5 MB 人氣: 2017-10-11 需要積分:1
 隨著大型互聯(lián)網(wǎng)應(yīng)用的發(fā)展,海量數(shù)據(jù)的存儲和訪問成為系統(tǒng)設(shè)計的瓶頸,分布式處理成為不二選擇。數(shù)據(jù)庫拆分,特別是水平分庫是個高難度的活,涉及一系列技術(shù)決策。
  本人有幸負(fù)責(zé)1號店訂單水平分庫的方案設(shè)計及實(shí)施落地,這里結(jié)合項目實(shí)踐,對水平分庫做一個系統(tǒng)地剖析,希望為大家水平分庫(包括去IOE)改造提供思路,主要內(nèi)容包括:
  水平分庫說明分庫維度– 根據(jù)哪個字段分庫分庫策略– 記錄如何分配到不同庫分庫數(shù)量– 初始庫數(shù)量及庫數(shù)量如何增長 路由透明– 如何實(shí)現(xiàn)庫路由,支持應(yīng)用透明分頁處理– 跨多個庫的分頁case如何處理Lookup映射—非分庫字段映射到分庫字段,實(shí)現(xiàn)單庫訪問整體架構(gòu)– 分庫的整體技術(shù)架構(gòu) 上線步驟– 分庫改造實(shí)施上線項目總結(jié)
  水平分庫說明
  數(shù)據(jù)庫拆分有兩種:
  1)垂直分庫
  數(shù)據(jù)庫里的表太多,拿出部分到新的庫里,一般是根據(jù)業(yè)務(wù)劃分表,關(guān)系密切的表放同一數(shù)據(jù)庫,應(yīng)用修改數(shù)據(jù)庫連接即可,比較簡單。
  2)水平分庫
  某張表太大,單個數(shù)據(jù)庫存儲不下或訪問性能有壓力,把一張表拆成多張,每張表存放部分記錄,保存在不同的數(shù)據(jù)庫里,水平分庫需要對系統(tǒng)做大的改造。
  結(jié)合實(shí)踐對水平分庫做一個系統(tǒng)地剖析
  1號店核心的訂單表存儲在Oracle數(shù)據(jù)庫,記錄有上億條,字段有上百個,訪問的模式也是復(fù)雜多樣,隨著業(yè)務(wù)快速增長,無論存儲空間或訪問性能都面臨巨大挑戰(zhàn),特別在大促時,訂單庫已成為系統(tǒng)瓶頸。
  通常有兩種解決辦法:
  1)Scale up,升級Oracle數(shù)據(jù)庫所在的物理機(jī),提升內(nèi)存/存儲/IO性能,但這種升級費(fèi)用昂貴,并且只能滿足短期需要。
  2)Scale out,把訂單庫拆分為多個庫,分散到多臺機(jī)器進(jìn)行存儲和訪問,這種做法支持水平擴(kuò)展,可以滿足長遠(yuǎn)需要。
  1號店采取后一種做法,它的訂單庫主要包括訂單主表/訂單明細(xì)表(記錄商品明細(xì))/訂單擴(kuò)展表,水平分庫即把這3張表的記錄分到多個數(shù)據(jù)庫中,訂單水平分庫效果如下圖所示:
  結(jié)合實(shí)踐對水平分庫做一個系統(tǒng)地剖析
  原來一個Oracle庫被多個MySQL庫取代,支持1主多備和讀寫分離,主備之間通過MySQL自帶的數(shù)據(jù)同步機(jī)制(SLA《1秒),所有應(yīng)用通過訂單服務(wù)訪問訂單數(shù)據(jù)。
  分庫維度
  水平分庫首先要考慮根據(jù)哪個字段作為分庫維度,選擇標(biāo)準(zhǔn)是盡量避免應(yīng)用代碼和SQL性能受影響,這就要求當(dāng)前SQL在分庫后,訪問盡量落在單個庫里,否則單庫訪問變成多庫掃描,讀寫性能和應(yīng)用邏輯都會受較大影響,。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

結(jié)合實(shí)踐對水平分庫做一個系統(tǒng)地剖析下載

相關(guān)電子資料下載

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?