OceanBaseデータベースV4.Xでは、パーティションとログストリームが分離され、1つのテナントUnit内のすべてのパーティションのトランザクションログを1つのログストリームに記録できるようになりました。そのため、ログストリームの数は相対的に減少しましたが、1つのログストリームには大量のテーブルデータが含まれる可能性があり、obcdcがすべてのログストリームデータを取得する必要が生じる場合があります。
OceanBaseデータベースV4.Xでは、デフォルトの最小データ同期レベルはテナントレベルです。しかし、一部のユーザーにとって、テナントレベルの同期粒度は大きすぎ、下流の消費負荷が高くなる可能性があります。この問題を解決するため、obcdcはOceanBaseデータベースV4.Xでテーブルレベルのアローリストおよびブロックリスト機能を導入し、無駄なデータストレージを削減します。同時に、obcdcはOceanBaseデータベースV4.Xで無制限のアローリストおよびブロックリスト設定をサポートしており、構成パラメータのサイズを現在の64KB制限を超えて設定できます。
さらに、obcdcのアローリストおよびブロックリスト機能は、OceanBaseデータベースV4.Xでテーブルの名前変更(rename table)もサポートしています。つまり、アローリストにあるテーブルをDDLで名前変更してブロックリストに追加することができ、その場合そのテーブルは同期されなくなります。これにより、アローリストやブロックリストの設定を再度変更することなく、即座に反映されます。
obcdcのホワイトリスト・ブラックリスト構成パラメータについて
obcdcはOceanBaseデータベースV3.Xのホワイトリスト・ブラックリスト機能に対応しており、同期粒度はテナント、データベース、テーブルをサポートします。obcdcには以下の3つの構成パラメータがあります:
パラメータ |
説明 |
デフォルト値 |
動的変更は可能か |
備考 |
|---|---|---|---|---|
tb_white_list |
同期対象のテーブルのホワイトリスト | *.*.* |
いいえ | トリプレット形式:テナント名.データベース名.テーブル名。デフォルトの *.*.* はクラスタ全体の同期を意味します。複数のトリプレットは | で区切り、各トリプレットは正規表現に対応しています。 |
tb_black_list |
同期対象のテーブルのブラックリスト | | | いいえ | トリプレット形式:テナント名.データベース名.テーブル名。デフォルトの *.*.* はクラスタ全体の同期を意味します。複数のトリプレットは | で区切り、各トリプレットは正規表現に対応しています。 |
enable_white_black_list |
ホワイトリストとブラックリストを有効にするかどうか | 1 |
いいえ | なし |
使用例
ホワイトリストを例に説明します:
mytenant1テナントのdb1データベースのtb1テーブルとmytenant2テナントのdb2データベースのすべてのテーブルを同期します:
mytenant1.db1.tb1|mytenant2.db2.*
mytenant1テナントのdb1データベースのtb1テーブルとtb2テーブルを同期します:
mytenant1.db1.tb1|mytenant1.db1.tb2
mytenant1テナントのdb1データベースで、プレフィックスがtbのテーブルを同期します:
mytenant1.db1.tb*
説明
- 同期可能なのは、ホワイトリストに含まれ、かつブラックリストに含まれていないテーブルのみです。ホワイトリストにはデフォルトですべてのテナントのすべてのテーブルが含まれ、ブラックリストはデフォルトで空です。
- 設定方法は正規表現(fnmatch)をサポートしており、デフォルトでは大文字小文字を区別しません。
enable_oracle_mode_match_case_sensitive=1を設定すると、Oracleモードのテナントでは大文字小文字が区別されます。
obcdcがサポートする正規表現には、*、?、[seq]、[!seq] が含まれます。
使用方法
obcdcの初期バージョンでは、単一の構成パラメータのサイズ上限が64KBに制限されていましたが、現在ではホワイトリスト・ブラックリスト関連の構成パラメータはこの制限を受けません。libobcdc.conf でホワイトリスト・ブラックリストを設定できます。
######### [working_mode] #########
#working_mode=memory
meta_data_refresh_mode=data_dict
#meta_data_refresh_mode=online
######### [synchronous information] #########
tb_white_list=*.*.*
#tb_white_list=sys.oblog*.*|oblog_tt.*.*
tb_black_list=t1.d1.t1
instance_index=0
instance_num=1
設定後はobcdcホストプロセスを再起動する必要があります。例えば、以下のコマンドを使用して起動します:
./obcdc_tailf -V -f libobcdc.conf -T $TIMESTAMP
また、obcdcではホワイトリスト・ブラックリストを有効にするかどうかを制御する構成パラメータもサポートしています。そのパラメータは enable_white_black_list で、デフォルト値は 1 であり、ホワイトリスト・ブラックリストが有効であることを示します。
#libobcdc.conf
enable_white_black_list=0