@DbPartition
現時点では、Postgres 10
にのみ適用されます。
日、週、月、年などの一般的なパーティション範囲を指定できます。これにより、適切なDDLが生成され、パーティションの管理が容易になる一部のサポート機能が提供されます。
@DbPartition(mode = PartitionMode.MONTH, property = "whenOccurred")
@Entity
public class Event extends Model {
...
Postgres DDL
- テーブルDDLでは
partition by range
を使用します - Ebeanはパーティションを作成するためのヘルパー関数を提供します
- CREATE ALL DLLが実行されると(つまり、テスト)、Ebeanはパーティションをチェックし、存在しない場合はパーティションを作成します
create table event (
id bigserial not null,
name varchar(255) not null,
when_occurred timestamptz not null
...
) partition by range (when_occurred);
パーティションの作成
Ebeanは引き続きパーティションの作成を容易にするために、ヘルパー関数partition
およびpartition_init
をデフォルトで提供します。以下のステートメントは、イベントテーブルに週
のパーティションを作成します。id列に一意のインデックス、when_occurred列にインデックスを作成します。
select partition('week','event','id','when_occurred',3)
上記により、現在のパーティションと次の3つのパーティションが確実に作成されます。
初期パーティション
一般的に、初期パーティションを作成するためのDDLをextra-ddl.xml
で明示的に指定します。以下の例では、大きな初期パーティションを持つパーティションを作成するpartition_init
が使用されています。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<extra-ddl xmlns="http://ebean-orm.github.io/xml/ns/extraddl">
<ddl-script name="1 initial partitions" >
select partition_init(date '2015-01-01', 'week', 'event', 'id', 'when_occurred', 3);
select partition_init(date '2015-01-01', 'month', 'event_log', 'id', '', 2);
</ddl-script>
</extra-ddl>
初期パーティションを指定しない場合、Ebeanはパーティションが存在しないことを検出し、create all ddl
を実行するときにパーティションを作成します。この場合、以下のようなメッセージがログに表示されます。
12:18:47.711 [main] INFO i.e.dbmigration.DdlGenerator - No table partitions for table event
12:18:47.711 [main] INFO io.ebean.DDL - Executing initial table partitions - 1 statements
12:18:47.711 [main] DEBUG io.ebean.DDL - executing 1 of 1 select partition('week','event','id','when_occurred',1)
extra-ddl
で初期パーティションの作成方法を明示的に指定すると、Ebeanはこれらのパーティションを自動的に作成しなくなります。