1. 程式人生 > >決定分庫分表的原因有哪些?

決定分庫分表的原因有哪些?

寫在前面

前幾天樑大發表了mysql單表500w資料分表的鐵律,也參與了回覆,結果同一天隔壁組面試,正好問了下面試者這個問題,面試官想在多方面考察面試者技術紮實程度,結果面試者回答的不好,所以整理一篇,決定分庫分表的原因有哪些?

單表資料量角度

這是樑大文章中闡述的主要原因之一:

曾經在中國網際網路技術圈廣為流傳著這麼一個說法:MySQL 單表資料量大於 2000 萬行,效能會明顯下降。事實上,這個傳聞據說最早起源於百度。具體情況大概是這樣的,當年的 DBA 測試 MySQL效能時發現,當單表的量在 2000 萬行量級的時候,SQL 操作的效能急劇下降,因此,結論由此而來。然後又據說百度的工程師流動到業界的其它公司,也帶去了這個資訊,所以,就在業界流傳開這麼一個說法。

阿里巴巴《Java 開發手冊》提出單錶行數超過 500 萬行或者單表容量超過 2GB,才推薦進行分庫分表。對此,有阿里的黃金鐵律支撐,所以,很多人設計大資料儲存時,多會以此為標準,進行分表操作。

事實上,這個數值和實際記錄的條數無關,而與 MySQL 的配置以及機器的硬體有關。因為,MySQL 為了提高效能,會將表的索引裝載到記憶體中。InnoDB buffer size 足夠的情況下,其能完成全載入進記憶體,查詢不會有問題。但是,當單表資料庫到達某個量級的上限時,導致記憶體無法儲存其索引,使得之後的 SQL 查詢會產生磁碟 IO,從而導致效能下降。當然,這個還有具體的表結構的設計有關,最終導致的問題都是記憶體限制。這裡,增加硬體配置,可能會帶來立竿見影的效能提升哈。

單行資料特點角度

這是飛哥的觀點,分庫分表原因和每行記錄大小有關係,因為b+ tree索引葉子節點儲存真實記錄資料,每條記錄大小決定了每個葉子節點能儲存多少記錄,影響了b+tree索引樹的高度,從而影響了效能。

業務特點角度

春哥大魔王的角度是從業務角度切入,比如虛擬機器mysql例項的寫qps瓶頸大概在3k左右,物理機mysql例項的寫qps瓶頸大概可以摸高到1w,但是隨著業務場景發展,隨便搞個大促,或者推廣,整個系統的瓶頸就會暴露出來,所以需要提早做分庫分表了。

連線數角度

另一個角度可以是連線數,因為隨著單個mysql例項連線的下游服務越來越多,導致mysql和服務之間建立大量的長連線,連線數量是完全有上限的,可以通過讀寫分離,分庫分表等多個角度降低連線數造成的效能問題。

最後

所以分庫分表,資料量只是其中的因素之一,可以從機器配置,mysql原理,連線池,業務特點等多個角度考慮。

相關推薦

決定分庫原因哪些

寫在前面 前幾天樑大發表了mysql單表500w資料分表的鐵律,也參與了回覆,結果同一天隔壁組面試,正好問了下面試者這個問題,面試

MySQL分庫哪些成熟的中介軟體?不要破壞到原有程式設計的?

首先Mycat是一個開源的分散式資料庫系統,但是由於真正的資料庫需要儲存引擎的,而Mycat並沒有儲存引擎,所以並不是完全意義的分散式資料庫系統的。 Mycat: 資料庫中介軟體技術的: 這個前端使用中介軟體後端使用資料庫(mysql oracle)支援的,可以對資料

網際網路大廠哪些分庫的思路和技巧?

## 寫在前面 冰河曾經經歷過一個完整電商系統使用者從零到上億的研發過程,在業務的不斷髮展與變化過程中,演化出電商系統和基於大資料的商品精準實時推薦平臺,關於MySQL資料庫的架構演進,小夥伴們可以參考《[從零到千萬使用者,我是如何一步步優化MySQL資料庫的?](https://mp.weixin.qq.

MySQL分庫備份腳本

數據庫備份數據庫腳本[[email protected]/* */ script]# cat store_backup.sh #!/bin/shMYUSER=rootMYPASS=qwe123SOCKET=/data/3306/mysql.sockMYLOGIN="mysql -u$MYUSER

數據庫(分庫)中間件對比

系統瓶頸 地址 ring 缺點 無需 網絡io 數據遷移 用戶 osql 轉自:http://www.cnblogs.com/cangqiongbingchen/p/7094822.html 分區:對業務透明,分區只不過把存放數據的文件分成了許多小塊,例如mysql中的一張

架構師速成8.3-可用性之分庫

路由 運行 進行 一鍵 常量 popu 同步 width track 有狀態分布式,涉及的知識就比較多了,只是我們能夠拿幾個現實的樣例由淺入深的來理解。 數據庫的分庫分表 如果你是一個開發負責人,開始使用單機的數據庫,突然一天數據庫硬盤掛掉了。你沒有

16、MySQL數據庫分庫備份腳本

mysql數據庫分庫分表備份腳本MySQL數據庫分庫分表備份腳本===================學員分享分庫分表==========================腳本單雙引號的區別:單引號是強引用,強制輸出是所見即所得。雙引號是解析變量 和 多個字符串、數字等連接一個字符串條件1 || 條件2

MyBatis實現Mysql數據庫分庫操作和總結

用戶表 設計 行數 百萬 出現問題 網絡 自增 .html tro 閱讀目錄 前言 MyBatis實現分表最簡單步驟 分離的方式 分離的策略 分離的問題 分離的原則 實現分離的方式 總結 前言 作為一個數據庫,作為數據庫中的一張表,隨著用戶的增多隨著時間的推移,總有一

男性睪丸炎久治不愈的原因哪些?

男性睪丸炎久治不愈的原因男性睪丸炎久治不愈的原因有哪些?睪丸炎多是發生在尿道炎、前列腺炎或者是前列腺增生切除術後,患有這些疾病的細菌會直接的蔓延到睪丸,導致睪丸炎疾病。單一治療難以去除睪丸炎,因此會導致病情得不到好轉,從而導致睪丸炎久治不愈。 對於睪丸炎疾病,令很多男性朋友頭疼的不僅是其會危害和諧的性生

記錄一次經歷的數據庫從單庫到分庫的過程

人力 per 靠譜 img center 沒有 tdd 推出 數據 前言 目前所在的的項目組,由於項目正在處於一個業務爆發期,每天數據的增長量已經給我們數據庫乃至系統造成了很多不確定的因數,前期依靠優化業務和SQL等方式暫時還能夠支撐住。但是最近發現某些表數據達到50

MySQL 高可用:mysql+mycat實現數據庫分片(分庫

native 分布 for 成功 img 問題 represent apache 新一代 本文引用於http://blog.csdn.net/kk185800961/article/details/51147029 MySQL 高可用:mysql+mycat實現數據庫分片(

數據庫分庫

事務管理 mys cal 為什麽 分配 slaver 資源問題 時間流 1.7 1. 數據庫分庫分表 1.1. 前言 1.1.1. 名詞解釋 1.2. 數據庫架構演變 1.3. 分庫分表前的問題 1.3.1. 用戶請求量太大 1.3.2. 單庫太大 1.3.3

MySQL分庫方案

人員 有趣的 而不是 其他 代理 延時 分片 -o 得到 1. MySQL分庫分表方案 1.1. 問題: 1.2. 回答: 1.2.1. 最好的切分MySQL的方式就是:除非萬不得已,否則不要去幹它。 1.2.2. 你的SQL語句不再是聲明式的(declarativ

數據庫分庫中間件 Sharding-JDBC 源碼分析 —— SQL 解析(六)之刪除SQL

java 後端 架構 數據庫 中間件關註微信公眾號:【芋道源碼】有福利:RocketMQ / MyCAT / Sharding-JDBC 所有源碼分析文章列表RocketMQ / MyCAT / Sharding-JDBC 中文註釋源碼 GitHub 地址您對於源碼的疑問每條留言都將得到認真回復。甚至不知道如

數據庫分庫中間件 Sharding-JDBC 源碼分析 —— 布式主鍵

java 後端 架構 數據庫 中間件關註**微信公眾號:【芋道源碼】**有福利:RocketMQ / MyCAT / Sharding-JDBC 所有源碼分析文章列表RocketMQ / MyCAT / Sharding-JDBC 中文註釋源碼 GitHub 地址您對於源碼的疑問每條留言都將得到認真回復。甚至

MyCat:對MySQL數據庫進行分庫

文件 res names sel reg l數據庫 esp chan 規則 本篇前提: mycat配置正確,且能正常啟動。1、schema.xml<table>

mycat初次簡單配置分庫

join p12 tor 建立 total rac help show version 先規劃下數據庫的基礎架構,先來個最簡單基礎的。 三臺虛機,各安裝了mysql5.7 用mycat建立邏輯數據庫,建立5個表格,其中一個表格分庫,一個表格做全局表,剩余三個表格每個虛機的

MySQL主從(MySQL proxy Lua讀寫分離設置,一主多從同步配置,分庫方案)

否則 count user username 2個 ons 基礎 zxvf 路徑 Mysql Proxy Lua讀寫分離設置一.讀寫分離說明讀寫分離(Read/Write Splitting),基本的原理是讓主數據庫處理事務性增、改、刪操作(INSERT、UPDATE、DE

Python IOError錯誤異常原因哪些

Python編程Python IOErro錯誤主要是指要打開的文件不存在的錯誤提示,引起IOError錯誤的可能原因有很多,以下是最可能的原因!1. 文件確實不存在當錯誤的輸入了一個不存在的文件名,並試圖打開它的時候,程序會因為找不到這個文件名而引發IOError錯誤,這種情況就需要將輸入的文件名修改成正確的

Mycat 讀寫分離+分庫

BE IT 讀取 分離 取數據 常見 sele -i roo 上次進過GTID復制的學習記錄,已經搭建好了主從復制的服務器,現在利用現有的主從復制環境,加上正在研究的Mycat,實現了主流分布式數據庫的測試 Mycat就不用多介紹了,可以實現很多分布式數據庫的功能,極大的減