互聯網公司為啥不使用mysql分區表?

来源:http://www.cnblogs.com/zhulin516114/archive/2017/08/08/7306708.html
-Advertisement-
Play Games

緣起:有個朋友問我分區表在58的應用,我回答不出來,在我印象中,百度、58都沒有聽說有分區表相關的應用,業內進行一些技術交流的時候也更多的是自己分庫分表,而不是使用分區表。於是去網上查了一下,並詢問了58到家的DBA專家,將自己收到的信息沉澱下來,share給大伙。 解決什麼問題? 回答:當mysq ...


緣起:有個朋友問我分區表在58的應用,我回答不出來,在我印象中,百度、58都沒有聽說有分區表相關的應用,業內進行一些技術交流的時候也更多的是自己分庫分表,而不是使用分區表。於是去網上查了一下,並詢問了58到家的DBA專家,將自己收到的信息沉澱下來,share給大伙。

 

解決什麼問題?

回答:當mysql單表的資料庫過大時,資料庫的訪問速度會下降,“數據量大”問題的常見解決方案是“水平切分”。

 

mysql常見的水平切分方式有哪些?

回答:分庫分表,分區表

 

什麼是mysql的分庫分表?

回答:把一個很大的庫(表)的數據分到幾個庫(表)中,每個庫(表)的結構都相同,但他們可能分佈在不同的mysql實例,甚至不同的物理機器上,以達到降低單庫(表)數據量,提高訪問性能的目的。

分庫分表往往是業務層實施的,分庫分表後,為了滿足某些特定業務功能,往往需要rd修改代碼。

 

什麼是mysql的分區表?

回答:所有數據還在一個表中,但物理存儲根據一定的規則放在不同的文件中。這個是mysql支持的功能,業務rd代碼無需改動。

 

看上去分區表很帥氣,為什麼大部分互聯網還是更多的選擇自己分庫分表來水平擴展咧?

回答:

1)分區表,分區鍵設計不太靈活,如果不走分區鍵,很容易出現全表鎖

2)一旦數據量併發量上來,如果在分區表實施關聯,就是一個災難

3)自己分庫分表,自己掌控業務場景與訪問模式,可控。分區表,研發寫了一個sql,都不確定mysql是怎麼玩的,不太可控

4)運維的坑,嘿嘿

5)…

 

文章很短,一分鐘搞定,希望大家有收穫,有任何疑問歡迎提出,我不懂的再去問DBA專家。如果大家有分區表的應用,踩了什麼坑,亦可回覆,我下一篇文章share出來。

 

埋坑:如何來進行水平切分,分庫分表?如果大伙感興趣,後續和大家聊更多的資料庫架構。

 

user(uid, name, passwd)

擴展到user(uid, name, passwd, age, sex)為例

 

基本原理是:

(1)先創建一個擴充欄位後的新表user_new(uid, name, passwd, age, sex)

(2)在原表user上創建三個觸發器,對原表user進行的所有insert/delete/update操作,都會對新表user_new進行相同的操作

(3)分批將原表user中的數據insert到新表user_new,直至數據遷移完成

(4)刪掉觸發器,把原表移走(預設是drop掉)

(5)把新表user_new重命名(rename)成原表user

擴充欄位完成。

 

優點:整個過程不需要鎖表,可以持續對外提供服務

 

操作過程中需要註意

(1)變更過程中,最重要的是衝突的處理,一條原則,以觸發器的新數據為準,這就要求被遷移的表必須有主鍵(這個要求基本都滿足)

(2)變更過程中,寫操作需要建立觸發器,所以如果原表已經有很多觸發器,方案就不行(互聯網大數據高併發的線上業務,一般都禁止使用觸發器)

(3)觸發器的建立,會影響原表的性能,所以這個操作建議在流量低峰期進行

 

pt-online-schema-change是DBA必備的利器,比較成熟,在互聯網公司使用廣泛。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一,效果圖。 二,工程圖。 三,代碼。 ViewController.m ...
  • 一、通過企業賬號申請證書 1 Certificate Signing Request (CSR)文件 在Mac系統中進入“鑰匙串訪問”,選擇“鑰匙串訪問”-“證書助理”-“從證書頒發機構請求證書…”,如圖1所示: 鑰匙串請求證書 —>填寫前兩項,並選擇“存儲到磁碟”,如圖2所示: 2 請求Certi ...
  • 摘自原文:http://www.jianshu.com/p/cea762105f7c 在上架App之前想要 真機測試的同學 請查看iOS- 最全的真機測試教程 裡面包含怎麼讓多臺電腦同時 上架App和同時真機調試。P12文件的使用詳解 因為最近更新了Xcode 8 ,證書的創建都大同小異,只是在Xc ...
  • ImageView顯示圖像控制項 一、簡介 1、 2、 ImageView,圖像視圖,直接繼承自View類,它的主要功能是用於顯示圖片,實際上它不僅僅可以用來顯示圖片,任何Drawable對象都可以使用ImageView來顯示。ImageView可以適用於任何佈局中,並且Android為其提供了縮放和 ...
  • SeekBar拖動條控制項 一、簡介 1、 二、SeekBar拖動條控制項使用方法 1、創建SeekBar控制項 2、添加setOnSeekBarChangeListener監聽 三、代碼實例 1、效果圖: 2、代碼 fry.Activity01 /SeekBarDemo1/res/layout/acti ...
  • 今天同事在主庫在給一個大表的欄位新加了一個索引,因為是大表,所以用了pt-osc工具,在添加完索引沒過多久,開發那邊反應丟數據了。 這個表以前是寫在主庫的,後來不知道是什麼原因改成了寫從庫,也就是說主庫有部分以前的歷史數據,但是新的數據都是寫在從庫上,同事用pt-osc加索引的時候是在主庫加的,於是 ...
  • tm 工具 資料庫 SQL MySQL MySQL ddl 的問題現狀 在 運維mySQL資料庫時,我們總會對數據表進行ddl 變更,修改添加欄位或者索引,對於mysql 而已,ddl 顯然是一個令所有MySQL DBA 詬病的一個功能,因為在MySQL中在對錶進行ddl時,會鎖表,當表比較小比如小 ...
  • 啟動hive:start-all.shhive 進入hive之後,創建一個hive資料庫庫:create database if not exists db; 創建一個新表,結構與其他一樣hive> create table new_table like records; 創建分區表:hive> c ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...