【实操】单表数据量 200 GB,PostgreSQL 怎么应对??

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 【实操】单表数据量 200 GB,PostgreSQL 怎么应对??

当前运行的 Oracle 数据库,有个大表数据量几百 GB,担心 PostgreSQL 应付不了?其实,不用担心,PostgreSQL 有各种应付大数据量存储的武器,比如:分区表。

为什么要对表进行分区?

表分区允许将一个大表拆分为多个小表,这样可以带来以下好处:

• 较小的表在读取和写入方面速度更快。

• 您可以非常高效地删除整个分区,而不是逐行删除数据。

• 由于 PostgreSQL 知道如何修剪未用到的分区,因此您可以将分区用作一种粗略索引。例如,通过按日期划分表,您可能不再需要日期字段上的索引,而是使用顺序扫描。

• 很少使用的分区可以移动到更便宜的存储中。

分区方式

假设我们有一个表:

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

您可以通过提供用作分区键的列,来对该表进行分区:

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

PostgreSQL 支持多种分区方式,这些方式的区别仅在于它们为分区键指定行值的方式。

按范围分区

按范围分区允许为分区指定一个值的范围,例如,我们可以将每个月的数据存储在一个单独的分区中:

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

按列表分区

列表分区允许为分区指定一个值列表,例如,我们可以将一小部分经常访问的数据存储在热分区中,并将其余的数据移动到冷分区:

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列,在分区之间移动行:

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

按哈希分区

按哈希分区允许将行均匀地分布到一组表中,例如,我们可以为表创建 3 个分区,并使用一种相除取余的哈希方法,为行选择一个分区:

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

由于使用了哈希,这些分区将会接收大致相同数量的行。

管理分区

PostgreSQL 允许分离和附加分区:

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

您可以使用这些命令对现有表进行分区,而无需移动任何数据:

复制  

-- 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');
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
Kubernetes Linux Windows
kubectl 本地远程链接k8s多个集群,远程管控多集群,查看日志 部署服务(windows版)
kubectl 本地远程链接k8s多个集群,远程管控多集群,查看日志 部署服务(windows版)
883 0
|
5月前
|
存储 Linux API
Proxmox VE 8.4 发布 - 开源虚拟化管理平台
Proxmox VE 8.4 发布 - 开源虚拟化管理平台
579 5
Proxmox VE 8.4 发布 - 开源虚拟化管理平台
|
5月前
|
缓存 边缘计算 网络协议
CDN加速网站的终极指南:关键策略与实战技巧
内容分发网络(CDN)是现代互联网基础设施的核心,通过全球分布式服务器网络加速内容交付。掌握CDN原理与实践,可显著提升网站速度、安全性和用户体验。本文详解CDN基础、优势、实施步骤及未来趋势,帮助您选择合适方案并优化配置,在数字时代中占据竞争优势。无论是高流量网站还是跨国企业,CDN都是不可或缺的技术工具。立即行动,让您的内容交付更高效!
|
Web App开发 关系型数据库 数据库
用PostgreSQL 做实时高效 搜索引擎 - 全文检索、模糊查询、正则查询、相似查询、ADHOC查询
用PostgreSQL 做实时高效 搜索引擎 - 全文检索、模糊查询、正则查询、相似查询、ADHOC查询作者digoal 日期2017-12-05 标签PostgreSQL , 搜索引擎 , GIN , ranking , high light , 全文检索 , 模糊查询 , 正则查询 , 相似查询 , ADHOC查询 背景字符串搜索是非常常见的业务需求,它包括: 1、前缀+模糊查询。
12223 1
|
3月前
|
存储 关系型数据库 测试技术
拯救海量数据:PostgreSQL分区表性能优化实战手册(附压测对比)
本文深入解析PostgreSQL分区表的核心原理与优化策略,涵盖性能痛点、实战案例及压测对比。首先阐述分区表作为继承表+路由规则的逻辑封装,分析分区裁剪失效、全局索引膨胀和VACUUM堆积三大性能杀手,并通过电商订单表崩溃事件说明旧分区维护的重要性。接着提出四维设计法优化分区策略,包括时间范围分区黄金法则与自动化维护体系。同时对比局部索引与全局索引性能,展示后者在特定场景下的优势。进一步探讨并行查询优化、冷热数据分层存储及故障复盘,解决分区锁竞争问题。
408 2
|
2月前
|
关系型数据库 MySQL Java
MySQL 分库分表 + 平滑扩容方案 (秒懂+史上最全)
MySQL 分库分表 + 平滑扩容方案 (秒懂+史上最全)
|
JSON API 数据格式
深入浅出:使用Python实现一个简单的RESTful API
【8月更文挑战第51天】本文将引导读者理解RESTful API的基本原理,并通过一个简易的实例展示如何利用Python的Flask框架快速搭建一个RESTful服务。文章以通俗易懂的语言,结合代码示例,逐步讲解API的设计、实现和测试过程,旨在帮助初学者掌握RESTful API的开发方法。
644 11
|
关系型数据库 Linux 数据库
PostgreSQL
PostgreSQL
295 3
|
11月前
|
数据采集 Web App开发 iOS开发
使用Selenium时,如何模拟正常用户行为?
使用Selenium时,如何模拟正常用户行为?
grep仅显示匹配行的文件名
grep仅显示匹配行的文件名
796 1