1. 程式人生 > >資料庫分庫分表學習整理

資料庫分庫分表學習整理

關於資料庫的學習,一個繞不過的東西就是資料庫的分庫分表,還是有必要總結一下,以後工作的時候會用到,面試的時候也會用到的。

1. 什麼是資料庫分表

關於分庫分表字面理解就把原本儲存在一個庫一個表中的資料分儲到多個表或者多個庫上

2. 為什麼要分庫分表

資料庫中的資料量不一定是可控的,隨著時間和業務的發展,庫中的表會越來越多,表中的資料量會越來越大,相應的,資料操作,增刪改查的效率會降低、開銷會越來越大,另外無法進行分散式部署,而一臺伺服器的資源是有限的,最終資料庫所能承載的資料量、資料處理能力都將遇到瓶頸,通過分庫分表可以針對性的解決一下瓶頸,但也是會遇到響應的一些問題。

3. 分庫分表有哪些方式

1.垂直分表
垂直分表在日常開發和設計中比較常見,通俗的說法叫做“大表拆小表”,拆分是基於關係型資料庫中的列進行的,通常情況某個表中欄位較多,可以新建一張擴充套件表,將不經常用的或者長度較大的欄位拆分出來放到“擴充套件表”中。
拆分欄位的操作建議在資料庫設計階段就做好,如果發展過程中拆分,則需要改寫以前的查詢語句,會帶來一定的成本和風險
圖片
2.垂直分庫
垂直分庫在“微服務”盛行的今天已經非常普及了,基本思路是按照業務模組劃分不同的資料庫,而不是像早起一樣將所有的資料庫表都放到同一個庫中
圖片
3.水平分表
水平分表也稱為橫向分表,比較容易理解,就是將表中不同的資料按照一定規律分佈到不通的資料庫表中,這樣來降低單表的資料量,優化查詢效能,水平分表能降低單表資料量,一定程度上可以緩解查詢效能的瓶頸,但本質上這些表儲存在同一個庫中,所以庫級別還是會有io瓶頸
4.水平分庫分表


水平分庫分表與上面講到的水平分表思路相同,唯一不同就是將這些拆分出來的表儲存在不同的資料庫中。
圖片

4. 分庫分表有哪些問題

分庫分錶帶來的效能優化非常客觀,同時帶來的問題也很有挑戰,主要問題如下:
1.事務問題:
在執行分庫分表之後,由於資料儲存到了不同的庫上,資料庫事務管理出現了困難,如果依賴資料庫本身的分散式事務管理功能去執行事務,將付出高昂的效能代價,如果由應用程式去協助控制,形成程式邏輯上的事務,又會造成程式設計方面的負擔
2.跨庫join問題:
在執行分庫分表之後,難免會將原來邏輯性很強的資料劃分到不通的表,不同的庫上,這時,表的關聯操作將收到限制,無法join操作,結果原來一次查詢能夠完成的業務,可能需要多次查詢才能完成
3.額外的資料管理負擔和資料運算壓力:


額外的資料管理負擔,最顯而易見的就是資料定位問題和資料的增刪改查的重複執行問題,這些都可以通過應用程式解決,但必然引起額外的邏輯運算

相關推薦

資料庫分庫學習整理

關於資料庫的學習,一個繞不過的東西就是資料庫的分庫分表,還是有必要總結一下,以後工作的時候會用到,面試的時候也會用到的。 1. 什麼是資料庫分表 關於分庫分表字面理解就把原本儲存在一個庫一個表中的資料分儲到多個表或者多個庫上 2. 為什麼要分庫分表

day81_淘淘商城專案_14_專案釋出 + Linux下安裝mysql + tomcat熱部署 + 資料庫分庫 + Mycat學習_匠心筆記

第十四天: 1、Linux上mysql的安裝 2、系統的部署 3、mycat的介紹 4、專案總結 5、面試中的問題 1、開發流程淺解 2、專案釋出前的準備 1、測試  a) 本地單元測試  b) 測試環境測試(1,2,3,4,5)  c) 使用

day81_淘淘商城專案_14_專案釋出 + Linux下安裝mysql + tomcat熱部署 + 反向代理的配置 + 資料庫分庫 + Mycat學習_匠心筆記

淘淘商城專案_14 1、開發流程淺解 2、專案釋出前的準備 3、專案部署 3.1、Linux下安裝mysql 3.2、專案架構講解 3.3、系統功能介紹 3.4、網路拓撲圖 3.5

分庫學習總結(2)——資料庫中介軟體MyCat學習總結之MyCat-Web原理介紹

Mycat是一個分庫分表的基於java開發的資料庫中介軟體,使用過程中需要有一個監控系統,mycat-web應運而生。mycat-web是一個使用SpringMVC + Mybatis的監控平臺,使用常用的監控系統協議SNMP-簡單網路管理協議(Simple Network

Mycat 資料庫分庫中介軟體學習指南

對於分庫分表的資料庫設計很多情況下還是需要的,我們就此作為學習的起點,一起來看下前世來自阿里的Cobar而今的Mycat。 Mycat是什麼 一個徹底開源的,面向企業應用開發的大資料庫叢集 支援事務、ACID、可以替代MySQL的加強版資料庫 一個可以視為MySQL叢

資料庫分庫(sharding)系列(五) 一種支援自由規劃無須資料遷移和修改路由程式碼的Sharding擴容方案(轉)...

作為一種資料儲存層面上的水平伸縮解決方案,資料庫Sharding技術由來已久,很多海量資料系統在其發展演進的歷程中都曾經歷過分庫分表的Sharding改造階段。簡單地說,Sharding就是將原來單一資料庫按照一定的規則進行切分,把資料分散到多臺物理機(我們稱之為Shard)上儲存,從

阿里P8架構師談:資料庫分庫、讀寫分離的原理實現,使用場景

為什麼要分庫分表和讀寫分離?   類似淘寶網這樣的網站,海量資料的儲存和訪問成為了系統設計的瓶頸問題,日益增長的業務資料,無疑對資料庫造成了相當大的負載,同時對於系統的穩定性和擴充套件性提出很高的要求。隨著時間和業務的發展,資料庫中的表會越來越多,表中的資料量也會越來越大,相應地,

資料庫分庫 sharding 系列 四 多資料來源的事務處理

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

資料庫分庫 sharding 系列 五 一種支援自由規劃無須資料遷移和修改路由程式碼的Sharding擴容方案

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

資料庫分庫存在的問題及解決方案

讀寫分離分散了資料庫讀寫操作的壓力,但是沒有分散儲存壓力,當資料庫的資料量達到千萬甚至上億條的時候,單臺數據庫伺服器的儲存能力就會達到瓶頸,主要體現在以下幾個方面: 資料量太大,讀寫效能會下降,即使有索引,索引也會變得很大,效能同樣會下降 資料檔案會變得很大,資料庫備份和恢復需要消耗更長的時間

資料庫分庫分表(sharding)系列(三) 關於使用框架還是自主開發以及sharding實現層面的考量 資料庫分庫分表(sharding)系列(二) 全域性主鍵生成策略 資料庫分庫分表(sharding)系列(一) 拆分實施策略和示例演示

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

資料庫分庫——擴容無須資料遷移的分片演算法

擴容無須資料遷移的分片演算法 常見的分庫分表方案大都用主鍵mod一個數(如分為8個庫,則 id % 8 根據餘數決定落到哪個分片)。此種方案中,如果要拓展資料庫將是十分複雜的事情(例如拓展為10個,則程式碼需要改為 id % 10 之前的舊資料也要做遷移)。我們希望有一種支援自由規劃無須資料遷移和修

資料庫分庫思路及案例分析

一. 資料切分 關係型資料庫本身比較容易成為系統瓶頸,單機儲存容量、連線數、處理能力都有限。當單表的資料量達到 1000W 或 100G 以後,由於查詢維度較多,即使新增從庫、優化索引,做很多操作時效能仍下降嚴重。此時就要考慮對其進行切分了,切分的目的就在於減少資料庫的負擔,縮短查詢時間

資料庫分庫(持續更新中)

今天學習了資料庫分表分庫,感覺記錄下一些東西以便以後的檢視。 1、資料庫建立索引,可以加快表資料的查詢,但是過多的索引,會佔用大量的記憶體,維護難度較大,因為索引底層的演算法是B-tree,樹的特點就是查詢資料快按時資料增刪改比較慢。 2、資料庫的表拆分,分為水平拆分,垂直拆分,水平垂直拆分(自定義的)。

資料庫分庫、讀寫分離的實現原理及使用場景

為什麼要分庫分表和讀寫分離? 類似淘寶網這樣的網站,海量資料的儲存和訪問成為了系統設計的瓶頸問題,日益增長的業務資料,無疑對資料庫造成了相當大的負載,同時對於系統的穩定性和擴充套件性提出很高的要求。隨著時間和業務的發展,資料庫中的表會越來越多,表中的資料量也會越來越

mysql資料庫分庫

一、分庫分表前的問題 1、使用者請求量太大 因為單伺服器TPS,記憶體,IO都是有限的。 解決方法:分散請求到多個伺服器上; 其實使用者請求和執行一個sql查詢是本質是一樣的,都是請求一個資源,只是使用者請求還會經過閘道器,路由,http伺服器等。 2、單庫太大 單個

資料庫分庫的應用場景及解決方案

現實業務場景中,為了保障客戶體驗並滿足業務的線性增長。會對資料量巨大,且業務會始終進行的產品進行分表分庫策略。但是如何合理的根據業務採取爭取的分表分庫策略至關重要。下面以具體例項來進行分析。 場景一:使用者中心資料庫切分架構實踐|場景介紹     使用者中心是一個十分常見

資料庫分庫後,如何部署上線?

1. 引言 我們先來講一個段子 面試官:“有併發的經驗沒?” 應聘者:“有一點。” 面試官:“那你們為了處理併發,做了哪些優化?” 應聘者:“前後端分離啊,限流啊,分庫分表啊。。” 面試官:"談談分庫分表吧?" 應聘者:“bala。bala。bala

資料庫分庫 sharding 系列 三 關於使用框架還是自主開發以及sharding實現層面的考量

                當團隊對系統業務和資料庫進行了細緻的梳理,確定了切分方案後,接下來的問題就是如何去實現切分方案了,目前在sharding方面有不少的開源框架和產品可供參考,同時很多團隊也會選擇自主開發實現,而不管是選擇框架還是自主開發,都會面臨一個在哪一層上實現sharding邏輯的問題,本文

基於代理的資料庫分庫框架 Mycat實踐

文章共 1796字,閱讀大約需要 4分鐘 ! 概 述 在如今海量資料充斥的網際網路環境下,分庫分表的意義我想在此處就不用贅述了。而分庫分表目前流行的方案最起碼有兩種: 方案一:基於應用層的分片,即應用層程式碼直接完成分片邏輯 方案二:基於代理層的分片,即在應用程式碼和底層資料庫中