テーブルのパーティショニング

データベース設計

Lis Sulmont

Curriculum Manager

パーティション化する理由は?

テーブルが肥大する(100GB / TB)

問題: クエリ/更新が遅くなる

理由: インデックスがメモリに収まらないなど

解決策: テーブルをより小さな部分に分割する(= パーティショニング

Image of file archives by date

データベース設計

データモデリングの復習

1. 概念データモデル

2. 論理データモデル

パーティショニングは、論理データモデルと同じ

3. 物理データモデル

パーティショニングは物理データモデルの一部

データベース設計

垂直パーティショニング

Vertical partitioning

正規化済みでもテーブルを分割する

データベース設計

垂直パーティショニング:例

Vertical partitioning example

例: long_description をより低速の媒体に保存する

データベース設計

水平パーティショニング

Horizontal partitioning

データベース設計

水平パーティショニング:例

Horizontal partitioning: example table

データベース設計

水平パーティショニング:例

Horizontal partitioning: example

CREATE TABLE sales (
    ...
    timestamp DATE NOT NULL
)
PARTITION BY RANGE (timestamp);

CREATE TABLE sales_2019_q1 PARTITION OF sales FOR VALUES FROM ('2019-01-01') TO ('2019-03-31'); ... CREATE TABLE sales_2019_q4 PARTITION OF sales FOR VALUES FROM ('2019-10-01') TO ('2020-01-31');
CREATE INDEX ON sales ('timestamp');
データベース設計

水平パーティショニングの長所と短所

長所

  • 頻繁に使用されるパーティションのインデックスがメモリに収まる
  • 特定の媒体に移動させる: 低速 vs. 高速
  • OLAP と OLTP の両方に使用される

短所

  • 既存のテーブルのパーティションニングは面倒なことがある
  • 一部の制約は設定不可
データベース設計

シャーディングとの関係

Sharding

データベース設計

練習しましょう!

データベース設計

Preparing Video For Download...