我正在尝试重新设计Pg数据库以获得更多性能.Db适用于ERP IS,它拥有更大的日期(四年).每年都在一个单独的数据库,这是一个糟糕的解决方案(构建报告是痛苦的??),所以我将所有四个数据库合并为一个...但是...有些表只是大的!为了获得一些性能,我决定在表格中划分数据.我有两种方法可以做到这一点.
首先:将表格分为"arch_table"和"working_table",并使用视图进行报告.
要么
第二:使用分区(比如每年分开分区).
所以,我的问题是哪种方式更好?分区还是一些归档系统?
PostgreSQL的分区实际上是一堆视图,它们使用检查约束来验证每个分区中只有正确的数据.将创建父表,并创建从主服务器继承的其他分区:
CREATE TABLE measurement (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
);
CREATE TABLE measurement_y2006m02 ( ) INHERITS (measurement);
CREATE TABLE measurement_y2006m03 ( ) INHERITS (measurement);
...
CREATE TABLE measurement_y2007m11 ( ) INHERITS (measurement);
CREATE TABLE measurement_y2007m12 ( ) INHERITS (measurement);
CREATE TABLE measurement_y2008m01 ( ) INHERITS (measurement);
Run Code Online (Sandbox Code Playgroud)
显然,我省略了一些代码,但你可以查看有关PostgreSQL表分区的文档.分区最重要的部分是确保构建自动脚本以在将来创建新分区以及合并旧分区.
在操作上,当PostgreSQL运行你的查询时,它会看到SELECT * FROM measurement WHERE logdate BETWEEN '2006-02-13' AND '2006-02-22';优化器会"AH HA!我知道这里有什么,有一个分区.我只看表measurement_y2006m02并撤回相应的数据."
当您对主分区中的数据进行老化时,您可以删除旧表,也可以将它们合并到存档分区中.这些工作大部分都可以通过脚本实现自动化 - 您真正需要做的就是编写一次脚本并对其进行测试.另一个好处是旧数据往往不会改变 - 许多分区不需要索引维护或抽真空.
请记住,分区主要是一种数据管理解决方案,可能无法提供您正在寻找的性能优势.调整查询,应用索引以及检查PostgreSQL配置(postgresql.conf,存储配置和操作系统配置)可能会带来更大的性能提升,从而对数据进行分区.
| 归档时间: |
|
| 查看次数: |
2059 次 |
| 最近记录: |