衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

數據庫分區、分庫和分表

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-09-30 11:24 ? 次閱讀

今天先說說數據庫的數據分區,分庫以及分表的內容吧!

數據庫分區、分庫和分表

數據庫分區、分庫和分表是針對大型數據庫系統的優化策略。它們的主要目的是提高數據庫的性能和可靠性,以滿足不斷增長的數據存儲需求。

數據庫分區

將一個大型數據庫分成多個邏輯部分,每個部分被稱為一個分區。每個分區可以獨立進行管理和維護,使得數據庫系統的可擴展性和可用性得到了提高。

水平分區和垂直分區是數據庫分區的兩種主要方式,其主要存在如下的區別:

  • 水平分區是將一個大表按照某個條件(如按照時間、地理位置等)分成多個小表,每個小表中包含相同的列,但是行數不同。在選擇水平分區的分區鍵時,需要考慮數據的訪問模式和數據的增長模式。例如按照時間分區可以提高歷史數據的查詢效率,按照地理位置分區可以提高地理數據的查詢效率。水平分區的優點是可以提高數據的查詢效率和并發處理能力,缺點是可能會導致數據的冗余和數據的一致性問題。
  • 垂直分區是將一個大表按照列的不同將其分成多個小表,每個小表中包含相同的行,但是列數不同。選擇垂直分區的分區鍵時,可將經常一起查詢的列分到同一個分區中可以提高查詢效率,將經常被更新的列分到單獨的分區中也可以提高更新效率。垂直分區的優點是可以減少數據的冗余,提高數據的查詢效率,也可能會導致數據的一致性問題。

水平分區栗子:

CREATE TABLE mytable (
  id SERIAL PRIMARY KEY,
  data TEXT,
  created_at TIMESTAMP WITH TIME ZONE
)
PARTITION BY RANGE (created_at);

CREATE TABLE mytable_2021_01 PARTITION OF mytable
  FOR VALUES FROM ('2021-01-01') TO ('2021-02-01');

CREATE TABLE mytable_2021_02 PARTITION OF mytable
  FOR VALUES FROM ('2021-02-01') TO ('2021-03-01');

CREATE TABLE mytable_2021_03 PARTITION OF mytable
  FOR VALUES FROM ('2021-03-01') TO ('2021-04-01');

-- 創建更多的分區表,每個表代表一個月份

垂直分區栗子:

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  gender VARCHAR(10) NOT NULL,
  age INTEGER NOT NULL,
  address VARCHAR(200) NOT NULL,
  phone VARCHAR(20) NOT NULL
);

CREATE TABLE users_name_gender (
  id INTEGER PRIMARY KEY REFERENCES users(id),
  name VARCHAR(50) NOT NULL,
  gender VARCHAR(10) NOT NULL
);

CREATE VIEW users_info AS
SELECT users.id, users_name_gender.name, users_name_gender.gender, users.age, users.address, users.phone
FROM users
JOIN users_name_gender ON users.id = users_name_gender.id;

數據庫分表

將一個大型表分成多個小型表,每個表被稱為一個分表。每個分表可以獨立進行管理和維護,使得數據庫系統的可擴展性和可用性得到了提高。同時,分表還可以提高數據庫系統的查詢速度和并發處理能力,降低數據沖突和死鎖的發生概率。

分表的復雜性就比分區大多了,需要業務邏輯的配合才可以。

數據庫分表的方式有以下幾種:

  1. 垂直分表:按照列的業務邏輯將表拆分成多個表,每個表包含一部分列。這種方式適用于表中某些列的訪問頻率較低,或者某些列的數據量較大,可以將這些列獨立成一個表,從而提高查詢性能和并發能力。
  2. 水平分表:按照行的業務邏輯將表拆分成多個表,每個表包含部分行數據。這種方式適用于表中數據量較大,或者訪問頻率較高的行可以分散到多個表中,從而減少單個表的數據量,提高查詢性能和并發能力。
  3. 分區表:按照某個特定的規則將表分成多個邏輯上的部分,每個部分稱為一個分區。分區可以按照時間、范圍、哈希等方式進行劃分。這種方式適用于表中數據量較大,或者訪問頻率較高的數據可以按照某個規則分散到多個分區中,從而提高查詢性能和并發能力。
  4. 組合分表:將垂直分表、水平分表和分區表結合起來使用,可以根據具體的業務需求和數據特點進行靈活的組合,從而達到最優的性能和可擴展性。
舉栗子:

假設有一個訂單表,包含訂單號、用戶ID、下單時間、訂單金額等字段,數據量較大,需要進行分表操作。

  1. 垂直分表:將訂單表按照列的業務邏輯進行拆分,可以將訂單金額獨立成一個表,每個表包含訂單號、用戶ID、下單時間和訂單金額。
  2. 水平分表:將訂單表按照行的業務邏輯進行拆分,可以按照用戶ID進行拆分,將同一個用戶的訂單分散到多個表中,每個表包含訂單號、下單時間和訂單金額。
  3. 分區表:將訂單表按照時間進行分區,可以按照下單時間的年份、月份或日期進行分區,每個分區包含一段時間內的訂單數據。
  4. 組合分表:可以將垂直分表、水平分表和分區表結合起來使用,例如按照用戶ID進行水平分表,再按照下單時間進行分區,每個分區包含一個用戶在一段時間內的訂單數據

數據庫分庫

將一個大型數據庫分成多個小型數據庫,每個數據庫被稱為一個分庫。每個分庫可以獨立進行管理和維護,使得數據庫系統的可擴展性和可用性得到了提高。同時,分庫還可以提高數據庫系統的并發處理能力,降低數據沖突和死鎖的發生概率。

  • 垂直分庫:

垂直分庫是指將一張表按照列的業務邏輯劃分成多個表,每個表只包含部分列。這種方式適用于某些列經常被查詢,而其他列很少被查詢的情況。垂直分庫的優點是可以將數據分散到不同的物理節點上,從而提高查詢效率和可用性。在 PostgreSQL 中,可以使用視圖或表繼承來實現垂直分庫。

  • 水平分庫:

水平分庫是指將一張表按照行的業務邏輯劃分成多個表,每個表包含部分行。這種方式適用于數據量很大,單個節點無法存儲全部數據的情況。水平分庫的優點是可以將數據分散到多個物理節點上,從而提高查詢效率和可用性。在實現水平分庫時,可以使用分片鍵將數據分散到不同的節點上,同時需要考慮數據的一致性和事務處理等問題。

分庫的常見實現方式
  1. 數據庫代理:通過在客戶端和數據庫之間插入代理層,將請求分發到不同的數據庫節點上。
  2. 分布式事務協議:通過協議實現分布式事務的一致性,保證數據的正確性。
  3. 分片鍵路由:通過分片鍵將數據分散到不同的節點上,同時需要考慮數據的一致性和事務處理等問題。
  4. 數據庫復制:將數據復制到多個節點上,提高查詢效率和可用性。
什么時候分庫
  • 單臺DB的存儲空間不夠時。
  • 隨著查詢量的增加單臺數據庫服務器已經沒辦法支撐業務擴展。

總的來說,數據庫分區、分庫和分表的目的都是為了提高數據庫系統的性能和可靠性,使得它能夠更好地應對不斷增長的數據存儲需求。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲
    +關注

    關注

    13

    文章

    4353

    瀏覽量

    86165
  • 服務器
    +關注

    關注

    12

    文章

    9303

    瀏覽量

    86059
  • 數據庫
    +關注

    關注

    7

    文章

    3846

    瀏覽量

    64685
  • 視圖
    +關注

    關注

    0

    文章

    140

    瀏覽量

    6615
收藏 人收藏

    評論

    相關推薦

    談分布式數據庫中間件之分庫   

        在分布式數據庫中,可以通過分庫存儲方式,輕松解決大數據量單容量達到單機
    發表于 08-02 20:19

    分庫是什么?怎么實現?

    數據庫分庫、讀寫分離的原理實現,使用場景
    發表于 10-25 17:24

    基于聚類分析分庫策略的社交網絡數據庫查詢性能與數據遷移

    了基于聚類分析的社交網絡數據庫分庫策略。將社交網絡主體的特征標量進行聚類,使得聚集程度高的主體盡量分割到一個或盡可能少的幾個分庫中去,從而提高事件的查詢效率,并在此基礎上兼顧負載均衡與大數據
    發表于 12-05 14:13 ?2次下載

    數據庫分庫基礎和實踐

    的分布式數據庫中間件產品,實現了讀寫分離和數據分片功能,使用DDM來分庫,應用0改動,對應用完全透明。?  
    發表于 09-05 16:40 ?268次閱讀

    數據庫瓶頸及分庫表示例

    就可以想象了吧(并發量、吞吐量、崩潰)。 1、IO瓶頸 第一種:磁盤讀IO瓶頸,熱點數據太多,數據庫緩存放不下,每次查詢時會產生大量的IO,降低查詢速度 -分庫和垂直
    的頭像 發表于 09-24 15:52 ?1968次閱讀
    <b class='flag-5'>數據庫</b>瓶頸及<b class='flag-5'>分庫</b><b class='flag-5'>分</b>表示例

    你們知道為什么要分庫

    ? 這些問題你都搞清楚了嗎?相信看完這篇文章會有答案。 為什么要分庫? 首先回答一下為什么要分庫
    的頭像 發表于 08-16 10:37 ?1571次閱讀

    優化MySQL數據庫中樸實無華的和花里胡哨的分庫

    4、水平分庫 總結 首先我們要知道分庫都是干啥的,本文主角還是我們的MySQL為第一視角。首先從字面意思來看: 分庫:由單個
    的頭像 發表于 08-26 16:33 ?1290次閱讀

    什么是分庫?為什么分庫?什么情況下會用分庫呢?

    分庫是由分庫這兩個獨立概念組成的,只不過通常分庫
    的頭像 發表于 11-30 09:37 ?7615次閱讀

    MySQL數據庫性能優化的意義及其措施

    數據庫性能優化的常見手段有很多,比如添加索引、分庫、優化連接池等
    的頭像 發表于 02-03 14:12 ?1345次閱讀

    數據庫優化最有效的方式是什么?

    隨著業務數據量和網站QPS日益增高,對數據庫壓力也越來越大,單機版數據庫很快會到達存儲和并發瓶頸,就需要做數據庫性能方面的優化,分庫
    的頭像 發表于 02-28 09:46 ?744次閱讀

    數據庫數據恢復-數據庫文件被刪除/分區被格式化的SQL SERVER數據恢復方案

    數據庫數據恢復-數據庫文件被刪除/分區被格式化的SQL SERVER數據恢復方案
    的頭像 發表于 09-21 14:34 ?898次閱讀

    oracle數據庫分區有哪些

    Oracle數據庫分區是指將或索引的數據劃分為不同的部分,使得數據存儲和查詢變得更加高效。分區
    的頭像 發表于 12-05 16:18 ?2171次閱讀

    分庫后復雜查詢的應對之道:基于DTS實時性ES寬構建技術實踐

    1 問題域 業務發展的初期,我們的數據庫架構往往是單,外加讀寫分離來快速的支撐業務,隨著用戶量和訂單量的增加,數據庫的計算和存儲往往會成為我們系統的瓶頸,業界的實踐多數采用分而治
    的頭像 發表于 06-25 18:30 ?910次閱讀
    <b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>后復雜查詢的應對之道:基于DTS實時性ES寬<b class='flag-5'>表</b>構建技術實踐

    數據庫數據恢復—SQL Server數據庫所在分區空間不足報錯的數據恢復案例

    SQL Server數據庫數據恢復環境: 某品牌服務器存儲中有兩組raid5磁盤陣列。操作系統層面跑著SQL Server數據庫,SQL Server數據庫存放在D盤
    的頭像 發表于 07-10 13:54 ?576次閱讀

    軟件系統數據庫分庫設計

    軟件系統數據庫分庫設計 系統讀寫分離、分庫
    的頭像 發表于 08-22 11:39 ?366次閱讀
    軟件系統<b class='flag-5'>數據庫</b>的<b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>設計
    丽景湾百家乐的玩法技巧和规则| 百家乐官网路书| 大发888大发888官网| 三合四局24向黄泉| 蒙城县| 百家乐娱乐平台网| 至尊百家乐官网下载| 威尼斯人娱乐城地图| 老k百家乐官网的玩法技巧和规则| 太阳城娱乐网| 新天地百家乐的玩法技巧和规则| 百家乐官网娱乐平台备用网址| 全讯网址| 百家乐在线娱乐网| 蓝盾百家乐官网打法| 新世纪娱乐城官方网站| 太阳城百家乐下载网址| 百家乐官网澳门路规则算法| 大发888bet游戏平台| 适合做生意的开运方法| 金都百家乐官网现金网| 申博太阳城官网| 娱乐城百家乐论坛| 百家乐官网电话投注多少| 皇冠足球比分| 金矿百家乐的玩法技巧和规则| 网络百家乐官网开户网| 百家乐官网中B是什么| 大发888手机版官网| 百家乐游戏打水方法| 送彩金百家乐官网平台| 皇冠网社区| 麻将二八杠游戏| 大玩家百家乐游戏| 百家乐官网单人操作扫描道具| 长武县| 大发888 casino exe| 澳门百家乐官网心理| 大发888国际赌场娱乐网规则| 广州百家乐筹码| 百家乐官网具体怎么收费的|