ヘッダーをスキップ
Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス
12c (12.1.2)
E48005-01
  目次へ移動
目次

前
 
次
 

@RangePartitioning

@RangePartitioningを使用して、オブジェクト(オブジェクトのID、場所、テナントなど)からのフィールド値によって、データベース・クラスタへのアクセスをパーティション化します。

Oracle TopLinkは、各サーバーに値の範囲を割り当てます。サーバーの値を持つオブジェクトに対するすべての書込みまたは読取り要求は、特定サーバーに送信されます。問合せにフィールドがパラメータとして含まれていない場合は、問合せをすべてのサーバーに送信して統合するか、セッションのデフォルトの動作のままにすることができます。

注釈要素

表2-58は、この注釈の要素を示しています。

表2-58 @RangePartitioningの注釈要素

注釈要素 説明 デフォルト

name

(必須)パーティション・ポリシーの名前。永続性ユニット内に対して一意である必要があります。


partitionColumn

(必須)問合せをパーティション化するためのデータベース列または問合せパラメータ。これは表列名であり、クラス属性名ではありません。列値は、問合せに含まれている必要があり、通常はオブジェクトIDの一部です。

これは、問合せパラメータの名前にもなります。問合せにフィールドが含まれていない場合、問合せはパーティション化されません。


partitions

(必須)パーティション化する接続プール名のリスト。


partitionValueType

開始値および終了値のタイプ。

String

unionunpartionableQueries

パーティション・フィールドを含まない問合せをすべてのデータベースに送信し、結果を統合するかどうかを定義します。

false


使用方法

エンティティ、リレーションシップ、問合せまたはセッション/永続性ユニットでパーティション化を有効にできます。

パーティション・ポリシーは、再利用できるようにグローバルに名付けられ、@Partitioned注釈を使用して設定される必要もあります。

永続性ユニット・プロパティは、読取り/書込み/シーケンスの既存の構成に加えて、名前付き接続プールの追加をサポートします。名前付き接続プールは、データベース・クラスタの各ノードに対して定義される必要があります。

トランザクションによって複数のパーティションからのデータが変更される場合、JTAを使用してデータの適切な2フェーズ・コミットを確認する必要があります。1つのトランザクションに1つのノードのみが使用されるように、EntityManagerで排他接続を構成することもできます。

例2-95に、@RangePartitioning注釈を使用する方法を示します。

例2-95 @RangePartitioning注釈の使用

@Entity
@Table(name="PART_PROJECT")
@RangePartitioning(
  name="RangePartitioningByPROJ_ID",
  partitionColumn=@Column(name="PROJ_ID"),
  partitionValueType=Integer.class,
  unionUnpartitionableQueries=true,
  partitions={
    @RangePartition(connectionPool="default", startValue="0", endValue="1000"),
    @RangePartition(connectionPool="node2", startValue="1000", endValue="2000"),
    @RangePartition(connectionPool="node3", startValue="2000")
  })
@Partitioned("RangePartitioningByPROJ_ID")
public class Project implements Serializable {
...
}

例2-95に、eclipselink-orm.xmlファイルの<range-partitioning>要素を使用する方法を示します。

例2-96 <range-partitioning> XMLの使用

<entity name="Project" class="Project" access="FIELD">
  <table name="PART_PROJECT"/>
  <range-partitioning name="RangePartitioningByPROJ_ID" partition-value-type="java.lang.Integer" union-unpartitionable-queries="true">
    <partition-column name="PROJ_ID"/>
    <partition connection-pool="default" start-value="0" end-value="1000"/>
    <partition connection-pool="node2" start-value="1000" end-value="2000"/>
    <partition connection-pool="node3" start-value="2000"/>
  </range-partitioning>
  <partitioned>RangePartitioningByPROJ_ID</partitioned>
</entity>

関連項目

詳細は、次を参照してください。