精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)庫分區(qū)、分庫和分表

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

今天先說說數(shù)據(jù)庫的數(shù)據(jù)分區(qū),分庫以及分表的內(nèi)容吧!

數(shù)據(jù)庫分區(qū)、分庫和分表

數(shù)據(jù)庫分區(qū)、分庫和分表是針對大型數(shù)據(jù)庫系統(tǒng)的優(yōu)化策略。它們的主要目的是提高數(shù)據(jù)庫的性能和可靠性,以滿足不斷增長的數(shù)據(jù)存儲需求。

數(shù)據(jù)庫分區(qū)

將一個大型數(shù)據(jù)庫分成多個邏輯部分,每個部分被稱為一個分區(qū)。每個分區(qū)可以獨(dú)立進(jìn)行管理和維護(hù),使得數(shù)據(jù)庫系統(tǒng)的可擴(kuò)展性和可用性得到了提高。

水平分區(qū)和垂直分區(qū)是數(shù)據(jù)庫分區(qū)的兩種主要方式,其主要存在如下的區(qū)別:

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

水平分區(qū)栗子:

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');

-- 創(chuàng)建更多的分區(qū)表,每個表代表一個月份

垂直分區(qū)栗子:

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;

數(shù)據(jù)庫分表

將一個大型表分成多個小型表,每個表被稱為一個分表。每個分表可以獨(dú)立進(jìn)行管理和維護(hù),使得數(shù)據(jù)庫系統(tǒng)的可擴(kuò)展性和可用性得到了提高。同時(shí),分表還可以提高數(shù)據(jù)庫系統(tǒng)的查詢速度和并發(fā)處理能力,降低數(shù)據(jù)沖突和死鎖的發(fā)生概率。

分表的復(fù)雜性就比分區(qū)大多了,需要業(yè)務(wù)邏輯的配合才可以。

數(shù)據(jù)庫分表的方式有以下幾種:

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

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

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

數(shù)據(jù)庫分庫

將一個大型數(shù)據(jù)庫分成多個小型數(shù)據(jù)庫,每個數(shù)據(jù)庫被稱為一個分庫。每個分庫可以獨(dú)立進(jìn)行管理和維護(hù),使得數(shù)據(jù)庫系統(tǒng)的可擴(kuò)展性和可用性得到了提高。同時(shí),分庫還可以提高數(shù)據(jù)庫系統(tǒng)的并發(fā)處理能力,降低數(shù)據(jù)沖突和死鎖的發(fā)生概率。

  • 垂直分庫:

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

  • 水平分庫:

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

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

總的來說,數(shù)據(jù)庫分區(qū)、分庫和分表的目的都是為了提高數(shù)據(jù)庫系統(tǒng)的性能和可靠性,使得它能夠更好地應(yīng)對不斷增長的數(shù)據(jù)存儲需求。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲
    +關(guān)注

    關(guān)注

    13

    文章

    4117

    瀏覽量

    85266
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8688

    瀏覽量

    84515
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3707

    瀏覽量

    64014
  • 視圖
    +關(guān)注

    關(guān)注

    0

    文章

    140

    瀏覽量

    6539
收藏 人收藏

    評論

    相關(guān)推薦

    談分布式數(shù)據(jù)庫中間件之分庫   

        在分布式數(shù)據(jù)庫中,可以通過分庫存儲方式,輕松解決大數(shù)據(jù)量單容量達(dá)到單機(jī)
    發(fā)表于 08-02 20:19

    分庫是什么?怎么實(shí)現(xiàn)?

    數(shù)據(jù)庫分庫、讀寫分離的原理實(shí)現(xiàn),使用場景
    發(fā)表于 10-25 17:24

    基于聚類分析分庫策略的社交網(wǎng)絡(luò)數(shù)據(jù)庫查詢性能與數(shù)據(jù)遷移

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

    數(shù)據(jù)庫分庫基礎(chǔ)和實(shí)踐

    的分布式數(shù)據(jù)庫中間件產(chǎn)品,實(shí)現(xiàn)了讀寫分離和數(shù)據(jù)分片功能,使用DDM來分庫,應(yīng)用0改動,對應(yīng)用完全透明。?  
    發(fā)表于 09-05 16:40 ?227次閱讀

    數(shù)據(jù)庫瓶頸及分庫表示例

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

    你們知道為什么要分庫

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

    優(yōu)化MySQL數(shù)據(jù)庫中樸實(shí)無華的和花里胡哨的分庫

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

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

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

    MySQL數(shù)據(jù)庫性能優(yōu)化的意義及其措施

    數(shù)據(jù)庫性能優(yōu)化的常見手段有很多,比如添加索引、分庫、優(yōu)化連接池等
    的頭像 發(fā)表于 02-03 14:12 ?1144次閱讀

    數(shù)據(jù)庫優(yōu)化最有效的方式是什么?

    隨著業(yè)務(wù)數(shù)據(jù)量和網(wǎng)站QPS日益增高,對數(shù)據(jù)庫壓力也越來越大,單機(jī)版數(shù)據(jù)庫很快會到達(dá)存儲和并發(fā)瓶頸,就需要做數(shù)據(jù)庫性能方面的優(yōu)化,分庫
    的頭像 發(fā)表于 02-28 09:46 ?588次閱讀

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)-數(shù)據(jù)庫文件被刪除/分區(qū)被格式化的SQL SERVER數(shù)據(jù)恢復(fù)方案

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)-數(shù)據(jù)庫文件被刪除/分區(qū)被格式化的SQL SERVER數(shù)據(jù)恢復(fù)方案
    的頭像 發(fā)表于 09-21 14:34 ?715次閱讀

    oracle數(shù)據(jù)庫分區(qū)有哪些

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

    分庫后復(fù)雜查詢的應(yīng)對之道:基于DTS實(shí)時(shí)性ES寬構(gòu)建技術(shù)實(shí)踐

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

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫所在分區(qū)空間不足報(bào)錯的數(shù)據(jù)恢復(fù)案例

    SQL Server數(shù)據(jù)庫數(shù)據(jù)恢復(fù)環(huán)境: 某品牌服務(wù)器存儲中有兩組raid5磁盤陣列。操作系統(tǒng)層面跑著SQL Server數(shù)據(jù)庫,SQL Server數(shù)據(jù)庫存放在D盤
    的頭像 發(fā)表于 07-10 13:54 ?292次閱讀

    軟件系統(tǒng)數(shù)據(jù)庫分庫設(shè)計(jì)

    軟件系統(tǒng)數(shù)據(jù)庫分庫設(shè)計(jì) 系統(tǒng)讀寫分離、分庫
    的頭像 發(fā)表于 08-22 11:39 ?205次閱讀
    軟件系統(tǒng)<b class='flag-5'>數(shù)據(jù)庫</b>的<b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>設(shè)計(jì)