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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
5月前
|
存储 关系型数据库 分布式数据库
PolarDB产品使用问题之在处理超过5000万条记录的查询时,性能表现如何
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
6月前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
JSON NoSQL MongoDB
MongoDB数据库查询性能提高40倍
MongoDB数据库查询性能提高40倍
MongoDB数据库查询性能提高40倍
|
SQL 关系型数据库 MySQL
10倍性能提升!一文读懂AnalyticDB MySQL秒级漏斗分析函数
营销域中的洞察分析/智能圈人/经营报表等场景是OLAP分析型数据库的重要应用场景,云原生数据仓库AnalyticDB MySQL在淘宝、饿了么、菜鸟、优酷、盒马等业务的营销场景有比较长时间的积累和沉淀,我们将通过一系列文章来介绍AnalyticDB MySQL在营销域数据产品中的落地与应用,本文主要介绍“漏斗分析”的实现与应用。
|
6月前
|
缓存 NoSQL MongoDB
MongoDB数据库查询性能提高40倍?
MongoDB数据库查询性能提高40倍?
182 0
|
存储 缓存 关系型数据库
更快的查询 | MySQL百万数据优化(索引调优)
mysql百万数据查询优化, 索引调优, 索引失效等问题 , 这篇文章来为你解答
326 0
|
SQL 并行计算 关系型数据库
惊天性能!单实例RDS PostgreSQL 支撑 2000亿 实时标签透视案例
标签 PostgreSQL , varbitx , 标签 , 任意圈选 , 阿里云 , RDS , bitmap , 分段 , 并行计算 , 异步调用 , dblink , 异步dblink , 游标 背景 20亿用户,每个用户1000个标签,基于任意标签组合圈选、透视(业务上的需求是一次最多计算100个标签的组合)。
3651 0
|
SQL 存储 关系型数据库
PostgreSQL表的查询(难度适中)
PostgreSQL表的查询(难度适中)
231 0
PostgreSQL表的查询(难度适中)
|
SQL 关系型数据库 OLAP
【实操系列】AnalyticDB PostgreSQL 万倍查询加速——使用实时物化视图加速带可变参数的查询
以TPCH Q1为例,介绍一个优化案例,使用AnalyticDB PostgreSQL的实时物化视图+自动查询改写,近万倍优化带可变参数的OLAP查询
692 1
【实操系列】AnalyticDB PostgreSQL 万倍查询加速——使用实时物化视图加速带可变参数的查询
|
SQL NoSQL 关系型数据库
数据库sql优化总结之1-百万级数据库优化方案+案例分析
数据库sql优化总结之1-百万级数据库优化方案+案例分析
180 0
数据库sql优化总结之1-百万级数据库优化方案+案例分析
下一篇
无影云桌面