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