元ドキュメント: 同期テーブル
同期テーブル
概要
同期テーブルは、読み取りが多く書き込みが少ないワークロードにおいて、低レイテンシ読み取りと強整合性を両立するために設計された特殊なテーブルタイプです。
全 Region が特殊な Replication Group(RG)を共有し、データ書き込み時には複数の Follower レプリカへの強同期が完了してからトランザクションを確定します。これにより、複数の Follower レプリカが強整合性のある読み取りサービスを提供できます。

動作原理
リース機構
同期テーブルは有効な Follower の一覧を維持するためにリース機構を採用しています。
書き込みプロセス
- 通常のトランザクションと同様にデータを Write Batch に格納
- コミットフェーズで Leader が Raft ログを伝播し、全有効 Follower のログ受領確認を待機してからクライアントに応答
- 分散トランザクションの場合、Leader は全有効レプリカが Prepare ログの再生を完了したことを確認してから応答
読み取りプロセス
- Follower が読み取り前にリース検証(可読性チェック)を実行
- 検証成功後、バージョン番号に基づいて RocksDB から直接読み取り
- 読み取りリクエストはローカルノードを優先し、ローカル読み取りが失敗した場合のみ Leader にフォールバック
リース管理
- Follower が定期的に Leader にリースを申請
- Leader はログ再生の遅延が大きくない Follower にのみリースを付与
- リースの更新に失敗した Follower は有効リストから除外され、強整合性読み取りサービスを停止
ユースケース
同期テーブルは以下の用途に最適です。
- システムパラメータテーブル
- グローバル設定テーブル
- データウェアハウスのディメンションテーブル(例: TPC-C のアイテムテーブル)
使用方法
同期テーブルを作成するには、sync_level と distribution に node(all) を指定します。
sql
CREATE TABLE test_sync_table(
c1 INT PRIMARY KEY,
c2 INT,
c3 INT,
INDEX idx(c2)
) SYNC_LEVEL = NODE(ALL) DISTRIBUTION = NODE(ALL);制限事項
- 形式: 現在はブロードキャストテーブルとしてのみ機能
- パーティション: パーティションテーブルとしての使用不可
- 属性変換: 同期テーブルと非同期テーブル間の切り替え不可
- リソース使用: 全同期テーブルを削除しても、ブロードキャスト同期ログストリームは維持される
- パフォーマンスへの影響:
- 全有効 Follower へのデータ同期が必要なため、書き込みレイテンシが増加
- いずれかの Follower レプリカに障害が発生した場合、リース期間中は書き込みリクエストが停止する可能性あり
- レプリカ数が多すぎると書き込みパフォーマンスが低下する可能性あり
設定パラメータ
| パラメータ名 | デフォルト | 説明 |
|---|---|---|
tdstore_sync_table_max_allowed_log_lag | 1024 | Follower にリースを付与する際の最大ログ再生遅延 |
tdstore_sync_table_lease_interval_ms | 2000 | Follower がリースを要求する間隔(ミリ秒) |
tdstore_sync_table_log_interval_ms | 1000 | Leader が Raft リースログを同期する間隔(ミリ秒) |
tdstore_sync_table_lease_len_us | 10000000 | Leader が付与するリースの有効期間(マイクロ秒) |