大量のアクセス頻度の高いテーブルを別のデータベースに移動するのは良い考えですか?、私が投稿した質問に続き、 PostgreSQLでのデータベースのアーカイブに使用できるさまざまな手法/ソリューションを探します。
私が考えることができるいくつかの解決策は次のとおりです。
他の提案/ポインタ/解決策は本当に歓迎され、高く評価されています。
注:CentOS5.2でPostgreSQL v9.1.3を実行しています
アーカイブについての私の提案:
archive_tablespace
を作成します(必要に応じて、アーカイブ上のハードウェアを分離できます)テーブルを作成します。たとえば、テーブルの投稿をアーカイブしたいとします。
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(投稿と同じ列)ですべての投稿(アーカイブとプロダクション)をクエリし、public.posts_archiveですべてのアーカイブ投稿をクエリします。 Public.postsはposts_allを継承します。
posts_allにトリガーを記述して挿入をpostsテーブルにリダイレクトしない限り、挿入は古い方法で(テーブルpublic.postsに)進む必要があります。パーティショニングがある場合は、さらに複雑になります。動作するアプリケーションを使用していて、古いデータ移行の前に、このアプローチで動作するようにアプリケーションコードを変更する必要はありません。
論理的に分離するためのスキーマアーカイブを作成します。可能であれば、アーカイブデータを一定の期間(年または月)で区切ることをお勧めします(archive_2005)。
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;
その後、スキーマarchive_2005に新しいテーブルポストが作成され、postgresql planerはデータが設計された期間にのみ存在することを認識します。別の期間でクエリを実行すると、postgresqlはこのテーブルを検索しません。
関数/手順/トリガーを作成して、データをアーカイブテーブルに移動します。
実装されている場合:
archive_tablespace
に移動するか、posts_archiveから継承するように変更するだけです(これはテストしていません)。これは一般的な手法であり、ニーズに合わせて調整する必要があります。これを改善するための提案はありますか?
さらに読む: PostgreSQLの継承 、 パーティショニング