Hitachi

Hitachi Advanced Data Binder システム構築・運用ガイド


2.21.2 Amazon S3にDBエリアのデータを格納する場合(クラウドストレージ機能を使用する場合)

AWSのAmazon S3にDBエリアのデータを格納できます。この場合,HADBオプションをインストールして,クラウドストレージ機能を使用できるようにする必要があります。

〈この項の構成〉

(1) クラウドストレージ機能とは

クラウドストレージ機能とは,クラウドベンダが提供しているオブジェクトストレージのオブジェクトにDBエリアのデータを格納できるようにする機能です。クラウドストレージ機能を使用すると,AWSのAmazon S3に次のDBエリアのデータを格納できます。

AWSのAmazon S3などのオブジェクトストレージを使用すると,AWSのEBSなどのブロックストレージを使用するときに比べて,クラウドサービスの利用コストを低減できます。

クラウドストレージ機能を使用してAmazon S3にDBエリアのデータを格納する場合の例を次の図に示します。

図2‒82 クラウドストレージ機能を使用してAmazon S3にDBエリアのデータを格納する場合の例

[図データ]

[説明]
  • オブジェクトストレージであるAmazon S3にDBエリア(作業表用DBエリアを除く)のデータを格納します。

  • 作業表用DBエリアのデータは,性能面を考慮してAmazon S3ではなくAWSのブロックストレージであるEBSに格納します。作業表用DBエリアのデータは,Amazon S3には格納されません。

メモ
  • クラウドストレージ機能を使用する場合,DBエリア(作業表用DBエリアを除く)のデータをレギュラーファイルまたはブロックスペシャルファイルに格納することはできません。

  • 作業表用DBエリアについては,作業表用DBエリアファイルをレギュラーファイルまたはブロックスペシャルファイルのどちらかに割り当てる必要があります。

HADBオプションとは

クラウドストレージ機能を使用する場合,HADBオプションをインストールする必要があります。HADBオプションをインストールすると,クラウドストレージ機能で使用する次に示すクラウドストレージ機能用ライブラリがインストールされます。

  • libadbcldstge-aws.so(Amazon S3用ライブラリ)

  • libaws-cpp-sdk-s3-crt.so(AWS SDK for C++ ランタイムライブラリ)

  • libaws-cpp-sdk-core.so(AWS SDK for C++ コアライブラリ)

クラウドストレージ機能用ライブラリとは,上記の3つのライブラリの総称です。

メモ

(2) S3バケットおよびS3オブジェクト

クラウドストレージ機能を使用する場合,次のDBエリアのデータはAmazon S3のS3バケット内のS3オブジェクトに格納されます。

メモ

HADBのマニュアルでは,Amazon S3のバケットをS3バケット,オブジェクトをS3オブジェクトと表記しています。

DBエリアのデータの格納形式の概要を次の図に示します。

図2‒83 DBエリアのデータの格納形式の概要

[図データ]

[説明]
  • 各DBエリアのデータが,複数のS3オブジェクトに分割して格納されます。1セグメントのデータが,1つのS3オブジェクトに格納されます。

  • ユーザは,S3オブジェクトを格納するS3バケットだけを作成します。S3バケットに格納されるS3オブジェクトはHADBサーバが作成します。また,どのDBエリアのデータが,どのS3オブジェクトに格納されているかをユーザが意識する必要はありません。

仮想DBエリアファイルとは

仮想DBエリアファイルとは,各DBエリア(作業表用DBエリアを除く)のデータを格納しているS3オブジェクト群を格納する概念的なDBエリアファイルのことです。クラウドストレージ機能を使用する場合,DBエリアファイルは物理的には作成されませんが,各DBエリアのデータを格納するS3オブジェクト群は,概念的なDBエリアファイルである仮想DBエリアファイルに格納されます。

メモ
  • adbinitコマンドでデータベースを初期設定すると,各DBエリアに1個の仮想DBエリアファイルが作成されます。DBエリアごとに仮想DBエリアファイルの容量が次のように異なります。

    ・データ用DBエリア:約1ペタバイト

    ・マスタディレクトリ用DBエリア:約1テラバイト

    ・ディクショナリ用DBエリア:約16テラバイト

    ・システム表用DBエリア:約16テラバイト

    したがって,上記の図のデータ用DBエリア1の容量は約1ペタバイト,データ用DBエリア2の容量は約3ペタバイトになります。

  • adbmodareaコマンドでデータ用DBエリアを追加すると,そのデータ用DBエリアに1個の仮想DBエリアファイル(約1ペタバイト)が作成されます。

  • adbmodareaコマンドでデータ用DBエリアを拡張すると,拡張したデータ用DBエリアに仮想DBエリアファイル(約1ペタバイト)が1個追加されます。上記の図のデータ用DBエリア2は,仮想DBエリアファイルが3つあるため,DBエリアの拡張を2回実行しています。

(3) キャッシュファイル

キャッシュファイルとは,S3バケット内の一部のS3オブジェクトのデータを格納するファイルです。1つのキャッシュファイルには,1つのS3オブジェクトのデータが格納されます。対応するキャッシュファイルとS3オブジェクトには,同じデータが格納されます。キャッシュファイルは,HADBサーバによってEBSまたはインスタンスストア上のレギュラーファイルとして作成されます。

HADBサーバがデータを検索する際,検索に必要なデータがキャッシュファイル中にある場合は,キャッシュファイルのデータにアクセスします。検索に必要なデータがキャッシュファイル中にない場合は,検索に必要なデータを格納しているS3オブジェクトにアクセスし,そのS3オブジェクトのデータを格納したキャッシュファイルを新たに作成します。HADBサーバは,新たに作成したキャッシュファイルのデータにアクセスします。

キャッシュファイルの概要を次の図に示します。

図2‒84 キャッシュファイルの概要

[図データ]

[説明]
  • キャッシュファイルは,グローバルバッファとオブジェクトストレージであるAmazon S3の間に位置するファイルになります。S3バケット内の一部のS3オブジェクトのデータを格納します。

  • ユーザは,キャッシュファイルをEBSまたはインスタンスストアのどちらに作成するかを決定し,キャッシュファイルを格納するディレクトリパスを次のオペランドに指定します。

    • adbinitコマンドでデータベースを初期設定する際に指定する初期設定オプションのadb_init_cld_cache_pathオペランド

    • サーバ定義のadb_sys_cld_cache_pathオペランド

  • キャッシュファイルの総容量の上限をサーバ定義のadb_sys_cld_cache_total_sizeオペランドに指定します。キャッシュファイルの総容量が上限値を超えた場合,最後にアクセスした時間がいちばん古いキャッシュファイルを削除したあとに新しいキャッシュファイルを作成することで,キャッシュファイルの総容量の上限を超えないようにします。

  • データインポートなどでDBエリアにデータを格納する場合は,キャッシュファイルにデータをいったん格納し,コミットが完了するまでの間にS3バケットにデータを格納します。

メモ

EBSまたはインスタンスストアにキャッシュファイルを作成することによって,Amazon S3 へのアクセス回数を削減できるため,次のメリットがあります。

  • クラウドサービスの利用コストの低減が見込まれる

  • 性能向上が見込まれる

(4) 制限事項および留意事項

クラウドストレージ機能を使用する場合,次に示す制限事項と留意事項があります。

制限事項

クラウドストレージ機能を使用する場合,次に示すことができません

  • 加モードでのデータインポート(adbimportコマンド)

  • アーカイブマルチチャンク表の定義

  • テキストインデクスの定義

  • 同義語検索

留意事項
  • クラウドストレージ機能を使用した場合,クラウドストレージ機能を使用しない場合に比べて,SQL文やコマンドを実行して表のデータを操作する時間が掛かることがあります。

  • クラウドストレージ機能を使用した場合,SQL文やコマンドをキャンセルしたり,SQL文やコマンドにエラーが発生したりすると,ロールバック処理に時間が掛かることがあります。

  • データ用DBエリア数が増えるに従って,HADBサーバの開始,adbdbstatusコマンドの実行,およびチャンクの更新または削除などの各種の処理時間が長くなるおそれがあります。そのため,「5.6 データ用DBエリアの設計」を参照して,データ用DBエリアは必要な数だけ作成するようにしてください。

  • クラウドストレージ機能を使用する場合,データ用DBエリアのページサイズは32キロバイト固定になります。また,1セグメントの容量も32メガバイト固定になります。

INSERT文,UPDATE文,およびDELETE文を実行する場合の留意事項

クラウドストレージ機能を使用する場合,次の点に留意してください。

  • INSERT文,UPDATE文,およびDELETE文をなるべく実行しない運用にしてください。

    クラウドストレージ機能を使用する場合,これらのSQL文を実行する際にS3オブジェクト単位(1つのS3オブジェクトには,1セグメントのデータが格納されている)の操作が発生します。クラウドストレージ機能を使用しない場合にこれらのSQL文を実行する際は,ページ単位のI/Oの発生だけで済みますが,クラウドストレージ機能を使用する場合はさらにセグメント単位のI/Oと通信が発生します。そのため,INSERT文,UPDATE文,およびDELETE文の実行性能が低下することがあり,特に少量のデータを更新する運用には適していません。

  • INSERT文,UPDATE文,およびDELETE文の実行対象となる表は,B-treeインデクスおよびレンジインデクスの定義数をなるべく少なくしてください。

    B-treeインデクスやレンジインデクスの定義数が多くなるほど,INSERT文,UPDATE文,およびDELETE文の実行性能が低下します。

INSERT文,UPDATE文,およびDELETE文の実行回数を少なくできない場合は,「2.21.3 EBSにDBエリアのデータを格納する場合(クラウドストレージ機能を使用しない場合)」で説明するクラウドストレージ機能を使用しないクラウド環境でHADBサーバを使用することを検討してください。

(5) HADBのマニュアルを読む際の留意事項

クラウドストレージ機能を使用する場合,DBエリア(作業表用DBエリアを除く)のDBエリアファイルは作成されません。代わりに,仮想DBエリアファイルが作成されます。それに伴い,HADBのマニュアルを読む際の留意事項を次に示します。