数据库存档解决方案


18

继续我提出的一个问题,将高容量和高访问量的表移至单独的数据库是否是一个好主意?,我正在寻找可用于PostgreSQL中数据库归档的不同技术/解决方案。

我能想到的解决方案很少:

  1. 表分区
  2. 单独的表空间和/或架构
  3. 将存档的记录/表移动到其他硬盘

任何其他建议/指针/解决方案都将受到欢迎和赞赏。

注意:我们在CentOS5.2上运行PostgreSQL v9.1.3

Answers:


13

我对归档的建议:

  1. 创建archive_tablespace(如果需要,可以在存档中分离硬件)
  2. 创建表。例如,我们要存档表帖子。

    create table  posts_all ( LIKE public.posts)  ;
    create table  posts_archive () inherits  ( public.posts_all)  ;
    alter table  public.posts  inherits ( public.posts_all ) ;

    之后,我们将有2个新表:public.posts_all(具有与post中相同的列)以查询所有帖子(归档和生产)和public.posts_archive以查询所有归档帖子。Public.posts将继承自posts_all。
    除非您将在posts_all上编写触发器以将插入重定向到posts表,否则插入应该以旧的方式(到表public.posts)去。如果进行分区,它将更加复杂。在正常工作的应用程序中以及在进行旧数据迁移之前,您无需更改应用程序代码中的任何内容即可使用此方法。

  3. 创建模式存档以进行逻辑分离。我的建议是,如果可能的话,请按一定时间段(年或月)将归档数据分开(archive_2005)。

  4. 在archive_year模式中创建存档表

    create table archive_2005.posts (
      check(record_date >= '2005-01-01 00:00:00'::timestamp 
        and record_date <  '2006-01-01 00:00:00'::timestamp)
    ) inherits (posts_archive) tablespace archive_tablesapce;

    之后,您将在schema archive_2005中有新的表发布,并且postgresql Planer将知道那里的数据仅在设计的时间段内。如果您在另一个时间段查询,postgresql将不在此表中搜索。

  5. 创建函数/过程/触发器以将数据移至存档表。

  6. 存档一段时间(此处为年份)一次并清理旧表,或通过触发器自动存档(自动真空处理较重)。两种技术都有许多优点和缺点。

如果实施:

  1. 可以分别查询存档(从posts_archive选择*),全部(从posts_all选择*)和生产(从public.posts选择*)数据
  2. 可以单独转储存档架构,并以简单的方式对其进行级联。pg_dump -s archive_2005 datase_name删除模式archive_2005级联;-请小心,因为它会删除所有相关表
  3. 旧数据在物理上由表空间分隔,在逻辑上由模式分隔。
  4. 相当复杂的结构来管理归档过程
  5. 可以在生产表和归档表上创建不同的索引,以优化对两个表的查询(较小和专用的索引=更快的查询和更少的空间)
  6. 如果您已对表进行了分区(按年或月划分),则存档过程将只是将整个表移至表archive_tablespace或将其更改为从posts_archive继承(我没有对此进行测试)
  7. 如果您不想访问旧的(存档的)数据,则无需在应用程序中进行任何更改。

这是通用技术,您应该根据需要进行调整。有什么建议可以改善吗?

进一步阅读:PostgreSQL继承分区


我无法清楚地理解第二步Create tables (table posts example):。您能解释一下总共有多少个表以及表之间的继承如何相互关联的特定步骤吗?
加纳南(Gnanam)2012年

编辑答案。我希望了解并实施归档就足够了。
2012年

在实时应用程序中,将有多个与父/主表连接/相关的从属/子表。因此,这里概述的步骤也自动适用于其所有从属/子表吗?我的理解正确吗?
Gnanam

是。这只是一个表示例。我已经在100GB数据库中实现了此功能,但仅适用于少数几个最大的表。
2012年

所以在这种情况下,该表将通常是空的(postsposts-allposts-archive),存在只是为了代表整个数据集?
加纳南姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.