データベースにパーティショニングを実装する際に、ベンダーはどのようなアプローチをとっていますか?
これは、marc_s のコメントへの回答です。
受け入れられた良い本へのリンクの形での回答:)
私はSQL Serverについてしか話せません:
すべてのパーティションは、内部的に新しい B ツリーです。クエリ プロセッサは、1 つの巨大なテーブルがあるように錯覚させます。パーティション分割自体はオプティマイザに対してほとんど透過的であるため、テーブルがパーティション分割されていることを考慮した最適化はほとんどありません。クラスタリング キー (P、A、B)。これは、シークとスキャンに当てはまります。
パーティションを新しい内部テーブルにすることで、パーティション全体に対する一括操作が簡単になります。パーティションを削除するか、新しいパーティションを作成するだけです。スキーマが完全に同一であれば、無関係なテーブルとパーティションを交換することもできます! (ALTER TABLE SWITCH PARTITION)
パーティションを B ツリーにすることは、メンテナンスに影響します。個々のパーティションを異なるドライブに配置したり、読み取り専用にしてバックアップから除外したりできます。
以下を使用して、パーティショニングを模倣できます。
このアプローチは ORACLE 7.2 で使用されており (バージョンが間違っている可能性があり、何年も前から使用されていました)、ビューをサポートする任意のデータベースに実装できます。ビューが存在しない場合は、アプリケーション内にビューの動作を模倣する特別な関数/クラスを作成できます。
それでも、ストレージ レイアウトはデータベースの外部に表示されるため、非常に複雑でエラーが発生しやすいアプローチです。したがって、可能であれば、ネイティブまたは分離されたパーティショニングを選択してください。
ORACLE は、第 8 バージョンの時点でデータベース レベルでのパーティショニングをサポートしており、ストレージ レイアウトをデータベースの外に完全に隠すことができます。
PostgreSQL には組み込みのパーティショニング サポートはまだありませんが、これは現在進行中の作業です。また、PostgreSQL には、データベースのみのパーティショニングを可能にし、外部ユーザーから実装を隠すことを可能にする一連の便利な機能が既に備わっています。詳細はこちらで確認できます。