LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

單表數(shù)據(jù)量 200 GB,PostgreSQL 怎么應對?

admin
2024年7月18日 11:4 本文熱度 1108

導讀

當前運行的 Oracle 數(shù)據(jù)庫,有個大表數(shù)據(jù)量幾百 GB,擔心 PostgreSQL 應付不了?其實,不用擔心,PostgreSQL 有各種應付大數(shù)據(jù)量存儲的武器,比如:分區(qū)表。

為什么要對表進行分區(qū)?

表分區(qū)允許將一個大表拆分為多個小表,這樣可以帶來以下好處:

  • • 較小的表在讀取和寫入方面速度更快。

  • • 您可以非常高效地刪除整個分區(qū),而不是逐行刪除數(shù)據(jù)。

  • • 由于 PostgreSQL 知道如何修剪未用到的分區(qū),因此您可以將分區(qū)用作一種粗略索引。例如,通過按日期劃分表,您可能不再需要日期字段上的索引,而是使用順序掃描。

  • • 很少使用的分區(qū)可以移動到更便宜的存儲中。

分區(qū)方式

假設我們有一個表:

CREATE TABLE measurements (
  id int8 NOT NULL,
  value float8 NOT NULL,
  date timestamptz NOT NULL
);

您可以通過提供用作分區(qū)鍵的列,來對該表進行分區(qū):

CREATE TABLE measurements (
  id int8 NOT NULL,
  value float8 NOT NULL,
  date timestamptz NOT NULL
PARTITION BY RANGE (date);

PostgreSQL 支持多種分區(qū)方式,這些方式的區(qū)別僅在于它們?yōu)榉謪^(qū)鍵指定行值的方式。

按范圍分區(qū)

按范圍分區(qū)允許為分區(qū)指定一個值的范圍,例如,我們可以將每個月的數(shù)據(jù)存儲在一個單獨的分區(qū)中:

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

按列表分區(qū)

列表分區(qū)允許為分區(qū)指定一個值列表,例如,我們可以將一小部分經(jīng)常訪問的數(shù)據(jù)存儲在熱分區(qū)中,并將其余的數(shù)據(jù)移動到冷分區(qū):

CREATE TABLE measurements (
  id int8 PRIMARY KEY,
  value float8 NOT NULL,
  date timestamptz NOT NULL,
  hot boolean
PARTITION BY LIST (hot);

CREATE TABLE measurements_hot PARTITION OF measurements
FOR VALUES IN (TRUE);

CREATE TABLE measurements_cold PARTITION OF measurements
FOR VALUES IN (NULL);

然后,您可以通過更改hot列,在分區(qū)之間移動行:

-- Move rows to measurements_hot
UPDATE measurements SET hot = TRUE;

-- Move rows to measurements_cold
UPDATE measurements SET hot = NULL;

按哈希分區(qū)

按哈希分區(qū)允許將行均勻地分布到一組表中,例如,我們可以為表創(chuàng)建 3 個分區(qū),并使用一種相除取余的哈希方法,為行選擇一個分區(qū):

CREATE TABLE measurements (
  id int8 PRIMARY KEY,
  value float8 NOT NULL,
  date timestamptz NOT NULL
PARTITION BY HASH (id);

CREATE TABLE measurements_1 PARTITION OF measurements
FOR VALUES WITH (MODULUS 3, REMAINDER 0);

CREATE TABLE measurements_2 PARTITION OF measurements
FOR VALUES WITH (MODULUS 3, REMAINDER 1);

CREATE TABLE measurements_3 PARTITION OF measurements
FOR VALUES WITH (MODULUS 3, REMAINDER 2);

由于使用了哈希,這些分區(qū)將會接收大致相同數(shù)量的行。

管理分區(qū)

PostgreSQL 允許分離和附加分區(qū):

ALTER TABLE measurements DETACH PARTITION measurements_y2021m01;
ALTER TABLE measurements ATTACH PARTITION measurements_y2021m01
FOR VALUES FROM ('2021-01-01'TO ('2021-02-01');

您可以使用這些命令對現(xiàn)有表進行分區(qū),而無需移動任何數(shù)據(jù):

-- Use the existing table as a partition for the existing data.
ALTER TABLE measurements RENAME TO measurements_y2021m01;

-- Create the partitioned table.
CREATE TABLE measurements (LIKE measurements_y2021m01 INCLUDING DEFAULTS INCLUDING CONSTRAINTS)
PARTITION BY RANGE (date);

-- Attach the existing partition with open left constraint.
ALTER TABLE measurements ATTACH PARTITION measurements_y2021m01
FOR VALUES FROM ('0001-01-01'TO ('2021-02-01');

-- Use proper constraints for new partitions.
CREATE TABLE measurements_y2021m02 PARTITION OF measurements
FOR VALUES FROM ('2021-02-01'TO ('2021-03-01');

總結

本教程介紹了如何在 PostgreSQL 中,使用表分區(qū)將大型數(shù)據(jù)表拆分為較小的部分。


該文章在 2024/7/18 12:14:38 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲日韩欧美一区二区不卡 | 日韩精品动漫在线观看一区 | 一区二区日韩国产精品 | 中文乱码字幕国产中文乱设 | 日本最新精品视频在线播放 | 中文字幕视频二区 |