1. 程式人生 > >資料庫的分割槽分庫分表,水平切分與垂直切分

資料庫的分割槽分庫分表,水平切分與垂直切分

在整理專案的時候,突然發現對資料庫的水平切分與垂直切分比較模糊,特此學習!

參考:https://www.cnblogs.com/bluebluesky/articles/6413831.html

1、資料庫分割槽

  就是把同一個資料庫裡的表放到不同的伺服器上,負載均衡,但是在使用者上來看,只有一個伺服器

2、資料庫分表

    把一張表按照一定的規則分解成不同的實體表。比如垂直劃分和水平劃分

  2.1、垂直切分

    把不同功能,不同模組的資料分別放到不同的表中,但是如果同一個模組的資料量太大就會存在效能瓶頸

   2.2、水平切分

  垂直切分解決不了大表的瓶頸,如果同一個功能中表的資料量過大,就要對該表進行切分,為水平切分

通俗理解:垂直切分---分不同的模組表;水平切分---分同一個模組下的多個表

   2.3、二者的結合

  垂直切分可以使模組的劃分更清晰,分成功能不同的表;水平切分可以解決大資料下大表效能的瓶頸問題。

   2.4、案例

以mysql為例,簡單購物系統暫設涉及如下表:

  1.產品表(資料量10w,穩定)  2.訂單表(資料量200w,且有增長趨勢)  3.使用者表 (資料量100w,且有增長趨勢)  以mysql為例講述下水平拆分和垂直拆分,mysql能容忍的數量級在百萬靜態資料可以到千萬  垂直拆分:  解決問題:  表與表之間的io競爭  不解決問題:  單表中資料量增長出現的壓力  方案:  把產品表和使用者表放到一個server
上  訂單表單獨放到一個server上  水平拆分:  解決問題:  單表中資料量增長出現的壓力  不解決問題:  表與表之間的io爭奪  方案:  使用者表通過性別拆分為男使用者表和女使用者表  訂單表通過已完成和完成中拆分為已完成訂單和未完成訂單  產品表 未完成訂單放一個server上  已完成訂單表盒男使用者表放一個server上  女使用者表放一個server上(女的愛購物)

3、分庫

    將一堆資料放到不同的資料庫中儲存,上面說的都是在同一個資料庫上,分庫是分到不同的資料庫上

4、分割槽和分表的區別與聯絡

   1)分割槽和分表的目的都是減少資料庫的負擔,提高表的增刪改查效率

   2)分割槽知識一張表中的資料的儲存位置發生變化,還是在一張表中,分表是將一張表分成多張表

  3)當訪問量大,且表資料比較火時,兩種方式可以相互配合使用

  4)當訪問量不大,但表資料比較多時,可以只進行分割槽

5、分庫分表存在的問題:

  1)事務問題

   在執行分庫分表之後,由於資料儲存到了不同的庫上,資料庫事務管理出現了困難。如果依賴資料庫本身的分散式事務管理功能去執行事務,將付出昂貴的效能代價,如果由應用程式去協助控制,形成程式邏輯上的事務,又會造成程式設計方面的負擔。

 2)跨庫跨表的join問題

  在執行了分庫分表之後,難以避免會將原本邏輯關聯性很強的資料劃分到不同的表,不同的庫上,這是,標的關聯操作將會受到限制,我們無法join位於不同分庫的表,也無法join分表粒度不同的表,結果一次查詢能夠完成的業務,可能需要多次查詢才能完成

  3)額外的資料管理負擔和資料運算壓力

   額外的資料管理負擔,就是資料的定位問題和資料的增刪改查的重複執行問題,這些都可以通過應用程式解決,但必然會引起額外的邏輯運算,例如,對於一個記錄使用者乘積的使用者資料表userTable,業務要求查出成績最好的100位,在進行分表之前,只需要一個order by語句就可以搞定,但是在進行分表之後,將需要n個order by語句,分別查出每一個分表的前100名使用者資料,然後再對這些資料進行合併計算,才能得出結果

相關推薦

資料庫分割槽分庫水平切分垂直切分

在整理專案的時候,突然發現對資料庫的水平切分與垂直切分比較模糊,特此學習!參考:https://www.cnblogs.com/bluebluesky/articles/6413831.html1、資料庫分割槽  就是把同一個資料庫裡的表放到不同的伺服器上,負載均衡,但是在使

面試官系列深入資料庫分割槽分庫

一、為什麼要分庫分表 軟體時代,傳統應用都有這樣一個特點:訪問量、資料量都比較小,單庫單表都完全可以支撐整個業務。隨著網際網路的發展和使用者規模的迅速擴大,對系統的要求也越來越高。因此傳統的MySQL單庫單表架構的效能問題就暴露出來了。而有下面幾個因素會影響資料庫效能: 資料量 MySQL單庫資料量在50

mysql 分庫水平切割和垂直切割)

edi redis 就是 什麽 AR tail 創建 god 分割 分表是分散數據庫壓力的好方法。 分表,最直白的意思,就是將一個表結構分為多個表,然後,可以再同一個庫裏,也可以放到不同的庫。 當然,首先要知道什麽情況下,才需要分表。個人覺得單表記錄條數達到百萬到千萬級別時

資料庫分割槽分庫讀寫分離

分割槽就是把一張表的資料分成N個區塊,在邏輯上看最終只是一張表,但底層是由N個物理區塊組成的。分割槽的實現方式(簡單)mysql5 開始支援分割槽功能CREATE TABLE sales ( id INT AUTO_INCREMENT, amount DOUB

資料庫分割槽分庫、分片

一、分割槽的概念        資料分割槽是一種物理資料庫的設計技術,它的目的是為了在特定的SQL操作中減少資料讀寫的總量以縮減響應時間。        分割槽並不是生成新的資料表,而是將表的資料均衡分攤到不同的硬碟,系統或是不同伺服器儲存介子中,實際上還是一張表。另外,分割

資料庫分庫)中介軟體對比(轉)

轉載地址:https ://www.cnblogs.com/wangzhongqiu/p/7100332.html 分割槽:對業務透明,分割槽只不過把存放資料的檔案分成了許多小塊,例如mysql中的一張表對應三個檔案.MYD,MYI,frm。 根據一定的規則把資料檔案(MYD)和索引

MySQL優化分庫為什麼要以後如何進行排序查詢業務如何設計?

MySQL優化分庫分表,為什麼要分表,分表以後如何進行排序查詢,業務如何設計? 昨天面試新人的時候,遇到了這麼一個問題,按照自己的想法大體聊了一些,但大多是感性的,並沒有完整的瞭解why and how. 今天查了一些相關的資料,包括《MySQL效能調優與架構設計》、《高效能Mysql》,慢慢的整

【MyCat】通過mycat實現mysql資料庫分庫及sql防火牆配置

前言:隨著業務的不斷髮展,不論你怎麼優化程式碼和負載均衡,都不得不面對資料庫效能的瓶頸,為了讓資料庫的效能得到極大改善,除了優化Mysql本身的配置,以及SQL語句和索引等優化,更重要的就是對現有資料庫進行合理拆分,然後分佈在不同的伺服器上,以減輕單個伺服器的IO壓力,本篇就

分庫讀寫分離從理論到實戰

分庫分表,讀寫分離會帶來哪些問題? 前面一篇文章圖解分散式系統架構(看推薦閱讀)大概講了一下分庫分表,以及讀寫分離出現的場景,分庫分表為了解決高併發和海量資料的問題。 分庫後會出現新的問題 跨庫join問題 如有2個庫,訂單庫,使用者庫,要查詢買了某件商品的所有使用者

MYSQL效能優化之資料庫分庫

資料庫中的資料量不一定是可控的,在未進行分庫分表的情況下,隨著時間和業務的發展,庫中的表會越來越多,表中的資料量也會越來越大,相應地,資料操作,增刪改查的開銷也會越來越大;另外,由於無法進行分散式

MyCat:對MySQL資料庫進行分庫

本篇前提: mycat配置正確,且能正常啟動。 1、schema.xml <table>標籤: dataNode -- 分片節點指定(取值:dataNode中的name屬性值) rule ------ 分片規則選擇(取值:rule標籤中的

MySQL 分割槽分庫簡介

1.Mysql分割槽:     (1) 是什麼:如一張表的資料量太大,那麼myd,myi就會變的很大,查詢資料就會變的很慢,這個時候我們可以利用mysql的分割槽功能,在物理上將這一張表對應的三個檔案,分割成許多個小塊,這樣呢,我們查詢一條資料時,就不用全部查找了,只要知道這條資料在哪一塊,然後在那一塊找就

MySQL面試題(六)資料庫分庫原理詳解

對使用者而言,分割槽表是一個獨立的邏輯表,但是底層MySQL將其分成了多個物理子表,這對使用者來說是透明的,每一個分割槽表都會使用一個獨立的表文件。如圖所示:MySQL將表分成多個物理字表,客戶端並無感知,仍然認為操作的是一個表。建立表時使用partition by子句定義每個分割槽存放的資料,執行查詢時,優

資料庫分庫)中介軟體對比

轉自:http://www.cnblogs.com/cangqiongbingchen/p/7094822.html 分割槽:對業務透明,分割槽只不過把存放資料的檔案分成了許多小塊,例如mysql中的一張表對應三個檔案.MYD,MYI,frm。 根據一定的規則把資料檔案(MYD)和索引檔案(MYI)進

資料庫分庫的幾種方式及總結

分庫分表的幾種常見形式公司業務的發展過程中,提高系統的處理承載能力,在資料庫端通常都會選擇分庫分表。今天對資料庫的分庫分表進行了一次學習與總結。1、垂直分表垂直分表在日常開發和設計中比較常見,通俗的說法叫做“大表拆小表”,拆分是基於關係型資料庫中的“列”(欄位)進行的。通常情

資料來源管理 | 關係型分庫列式庫分散式計算

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、資料拆分概念 1、場景描述 隨著業務發展,資料量的越來越大,業務系統越來越複雜,拆分的概念邏輯就應運而生。資料層面的拆分,主要解決部分表資料過大,導致處理時間過長,長期佔用連結,甚至出現大量磁碟IO問題,嚴重影響效能;業務層面拆分,主要解決複雜

資料庫水平切分的實現原理解析——分庫主從叢集負載均衡器(轉)

第1章 引言 隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天幾十億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。通過資料切分來提高網站效能,橫向擴充套件資料層已經成為架構研發人員首選的方式。 水平切分資料庫:可

資料庫水平切分的實現原理解析---分庫主從叢集負載均衡器

一、負載均衡技術 負載均衡叢集是由一組相互獨立的計算機系統構成,通過常規網路或專用網路進行連線,由路由器銜接在一起,各節點相互協作、共同負載、均衡壓力,對客戶端來說,整個群集可以視為一臺具有超高效能的獨立伺服器。 1、實現原理 實現資料庫的負載均衡技術,首先要有一個可以控制連線資料庫的控制端。在這裡,它

資料庫水平切分的實現原理解析(分庫主從叢集負載均衡器)

原文地址:資料庫水平切分的實現原理解析---分庫,分表,主從,叢集,負載均衡器 作者:laoliulaoliu 文章來源:http://zhengdl126.iteye.com/blog/419850 此人的部落格有大量關於網站架構的文章可供參考。 分表:

資料庫水平切分的實現原理解析---分庫主從叢集負載均衡器 (轉載)...

第1章  引言 隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天幾十億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。通過資料切分來提高網站效能,橫向擴充套件資料層已經成為架構研發人員首選的方式。水平切分資料庫,可