OceanBase
English日本語简体中文
ドキュメントホーム
製品
エコシステム
リリース

データベース

OceanBase CloudOceanBaseデータベース

データベース

OceanBase CloudOceanBaseデータベース
OceanBase CloudOceanBaseデータベース

OceanBaseデータベース

KV - V4.4.2
  • OBKVの概要
  • OBKVのアーキテクチャ
  • OBKV-Table
    • OBKV-Table概要
      • OBKV-Tableの概要
      • OBKV-Tableのコア機能
      • OBKV-Tableデプロイの概要
    • シンプルなKey-Valueストレージのクイックスタート(Java)
    • OBKV-Table Javaクライアントを使ったアプリケーション開発
      • OBKV-Table Java開発ガイド
      • OBKV-Table開発の準備
      • OBKV-Table Javaクライアントを使用してクラスタに接続する
      • OBKV-Table操作例
        • OBKV-Tableへのデータ書き込み
        • OBKV-Tableによるデータのクエリ
        • OBKV-Tableでのデータ更新
        • OBKV-Tableによるデータの削除
      • OBKV-Table Javaクライアントのパラメータ設定
    • OBKV-Table管理
      • OBKV-Table管理の概要
      • OBKV-Tableの高可用性
      • OBKV-Tableのセキュリティ権限
      • OBKV-Tableモニタリングメトリクス
    • OBKV-Tableリファレンス
      • OBKV-Tableのデータモデル
      • OBKV-Tableの操作タイプ
      • OBKV-Tableがサポートするデータ型
      • OBKV-Table全文インデックス
      • OBKV-Tableのグローバルインデックスの使用範囲と例
      • OBKV-Tableの期限切れデータ削除
      • OBKV-Tableのグループコミット
      • OBKV-Tableの弱い整合性読み取りと最寄りデータセンターからの読み取り
      • OBKV-Table関連ビュー
    • OBKV-Table よくある質問
  • OBKV-HBase
    • OBKV-HBaseの概要
    • OBKV-HBaseのコア機能
    • OBKV-HBaseのデプロイ
    • OBKV-HBaseによるアプリケーション開発
      • OBKV-HBase アプリケーション開発の概要
      • OBKV-HBase Javaクライアントを使用したクラスタへの接続
      • HBaseの業務コードをOBKV-HBaseに移行する
      • OBKV-HBase データ操作の例
    • OBKV-HBase 移行ガイド
    • OBKV-HBase管理
      • OBKV-HBase管理の概要
      • OBKV-HBaseの高可用性
      • OBKV-HBaseのセキュリティ権限
      • OBKV-HBaseモニタリングメトリクス
    • OBKV-HBaseクエリの最適化
    • OBKV-HBaseの性能テスト
    • OBKV-HBaseリファレンス
      • OBKV-HBaseデータモデル
      • OBKV-HBaseのデータスキーマ
      • HBaseとの互換インターフェース
      • HBaseと互換性のあるフィルター
      • OBKV-HBaseの自動パーティション分割
      • OBKV-HBaseにおける期限切れデータの削除
      • OBKV-HBaseの弱い整合性読み取りと最寄りデータセンターからの読み取り
      • OBKV-HBase関連ビュー
    • OBKV-HBaseエコシステム統合
      • Flink連携
        • Flinkコネクタを使用してOBKV-HBaseにデータを同期する
        • ネイティブFlinkによるOBKV-HBaseへのアクセス
      • HiveによるOBKV-HBaseへのアクセス
      • SparkによるOBKV-HBaseへのアクセス
  • OBKVリリースノート
    • OBKV Enterprise版

PDF をダウンロード

ドキュメントフィードバック
  1. ドキュメントセンター
  2. OceanBaseデータベース
  3. KV
  4. V4.4.2

OBKV-Tableの弱い整合性読み取りと最寄りデータセンターからの読み取り

最終更新:2026-09-30 06:35:08

原理
サポートされているバージョン
直接接続モードの使用手順
ステップ1:OceanBaseクラスタのIDCを設定する
ステップ2:クライアントの弱い整合性読み取りパラメータを設定する
ODPモードの使用手順
ステップ1:OceanBaseクラスタのIDCを設定する
ステップ2:ODPの弱い整合性読み取りパラメータを設定する
ステップ3:クライアントの弱い整合性読み取りパラメータを設定する

OBKV-Tableは弱い整合性読み取りと最寄りデータセンターからの読み取り機能をサポートしています。このドキュメントでは、弱い整合性読み取りと最寄りデータセンターからの読み取りの仕組み、対応バージョン、ルーティングポリシー、使用方法について説明します。

従来の強い整合性読み取りでは、同時実行数が多い場合や低レイテンシが求められる場合に、性能がボトルネックになることがあります。OBKV-Tableは、弱い整合性読み取り(Weak Read)と最寄りデータセンターからの読み取り(Near Read)を提供し、データ整合性とアクセス効率のバランスを調整できるようにしています。

原理

データベースを複数のデータセンター(例えば北京、上海、広州)にデプロイし、データのレプリカを配置した構成を考えます。

従来の強い整合性読み取りモードでは、クライアントは読み取りを行う際にリーダーレプリカ(Leader)を優先的に選択します。これにより、次の2つの問題が生じます:

  • リーダーの負荷が高くなり、パフォーマンスのボトルネックになりやすいです。また、リーダーに障害が発生した場合、そのデータセンター全体が使用不能になります。
  • 広州や上海のユーザーがデータを読み取る際にも、北京のデータセンターを経由するため、ネットワーク遅延が増加します。

この問題を解決するために、弱い整合性読み取りと最寄りデータセンターからの読み取りの方式を導入しました:

  • 弱い整合性読み取り:フォロアーレプリカなど、リーダーレプリカ以外からもデータを読み取ります。読み取るデータへの更新の反映には多少の遅れが生じますが、読み取り性能と可用性を高められます。
  • 最寄りデータセンターからの読み取り:クライアントは、自身の地理的位置またはネットワーク距離が最も近いデータセンターのレプリカを優先的に選択してデータを読み取り、ネットワーク遅延を低減し、アクセス速度とユーザーエクスペリエンスを向上させます。

サポートされているバージョン

この機能を使用するには、OceanBaseクラスタ、ODP、およびOBKV-Table Javaクライアントのバージョン要件を満たす必要があります。

コンポーネント
サポートバージョン
ObServer 4.4.2.0以降
ODP 4.3.6.2
OBKV-Table 2.3.0

直接接続モードの使用手順

ステップ1:OceanBaseクラスタのIDCを設定する

root@sysでOceanBaseクラスタにログインし、以下の手順でOceanBaseクラスタのデータセンター情報を設定します。クラスタには3つのZoneが含まれ、各Zoneに1つのOBServerノードがあると仮定します。例では、各ZoneのIPアドレスはそれぞれ10.0.0.1、10.0.0.2、10.0.0.3です。

  1. z1のリージョンを設定します。REGIONパラメータはZoneが属する地域情報を指定するために使用されます。都市名の使用を推奨します(大文字小文字を区別します)。

    ALTER SYSTEM MODIFY ZONE "z1" SET REGION = "SHANGHAI";
    
  2. z1のデータセンターを設定します。IDCパラメータはZoneが属するデータセンター情報を指定するために使用されます。データセンター名の使用を推奨します(小文字のみ使用)。

    ALTER SYSTEM MODIFY ZONE "z1" SET IDC = "zue";
    

完了後のクラスタのデプロイ状況は次の表のとおりです:

OBServerノードIPアドレス
Zone
IDC
Region
10.0.0.1 z1 zue SHANGHAI
10.0.0.2 z2 xue SHANGHAI
10.0.0.3 z3 yue HANGZHOU

ステップ2:クライアントの弱い整合性読み取りパラメータを設定する

インターフェースとパラメータの説明

インターフェース
パラメータ説明
大小文字区別
値の範囲
機能説明
public void setReadConsistency(ObReadConsistency readConsistency) readConsistency:整合性レベル いいえ
  • ObReadConsistency.STRONG
  • ObReadConsistency.WEAK
弱い整合性読み取りを有効にするかどうかを制御する整合性レベル。
  • パラメータ値が ObReadConsistency.WEAK の場合、弱い整合性読み取りが有効になります。
  • 弱い整合性読み取りは、get(list<get>を含む)、scanなどの読み取りインターフェースにのみ適用され、データの挿入、更新、削除などには適用されません。
public void setCurrentIDC(String idc) idc:クライアントの所在地のデータセンター名 いいえ 実際のデータセンター名 クライアントが存在するデータセンター名。
  • ODPモードではこのパラメータの設定は不要です
  • クライアントのデータセンターを設定した場合、弱い整合性読み取りによるレプリカの選択優先順位は以下のとおりです:同じデータセンター > 同じリージョン > 他のリージョン
public void setRoutePolicy(ObRoutePolicy policy) policy:ルーティングポリシー いいえ
  • ObRoutePolicy.FOLLOWER_FIRST
  • ObRoutePolicy.FOLLOWER_ONLY
ルーティングポリシー。
  • ODPモードではこのパラメータの設定は不要です
  • ObRoutePolicy.FOLLOWER_FIRST:読み取り時にはフォロアーを優先的に選択します。フォロアーから読み取りができない場合は、リーダーを選択して読み取ります。
  • ObRoutePolicy.FOLLOWER_ONLY:読み取り時には常にフォロアーのみを選択します。フォロアーから読み取りができない場合は、例外をスローします。

OBKV-Tableでは、クライアント全体に適用するグローバルパラメータと、個々の操作に適用するステートメントレベルのパラメータを設定できます。ステートメントレベルの設定がグローバル設定より優先されます。以下に設定例を示します。

ObTableClientで弱い整合性読み取りのグローバルパラメータを設定する

以下の例は、ObTableClientで弱い整合性読み取り関連のパラメータを設定する方法を示しています。一貫性レベルをObReadConsistency.WEAKに設定し、クライアントの現在のデータセンターを「idc1」と指定し、ObRoutePolicy.FOLLOWER_FIRSTルーティングポリシーを選択します。設定完了後、クエリ操作は「idc1」データセンターのフォロアーレプリカに優先的にルーティングされ、パフォーマンス向上と遅延低減が実現されます。

ObTableClient client = new ObTableClient();
... // その他の接続パラメータの設定
client.setCurrentIDC("idc1");
client.setReadConsistency(ObReadConsistency.WEAK);
client.setRoutePolicy(ObRoutePolicy.FOLLOWER_FIRST);
client.init();

クエリでステートメントレベルの弱い整合性読み取りパラメータを設定する

getの例
batch getの例
queryの例

例では、ObTableClientでクライアントの現在のIDCを「idc1」に設定し、ルーティングポリシーをObRoutePolicy.FOLLOWER_FIRSTに設定します。また、get操作で一貫性レベルをObReadConsistency.WEAKに設定します。これにより、get操作時には「idc1」IDCのフォロアーレプリカに優先的にルーティングされます。

ObTableClient client = new ObTableClient();
... // その他の接続パラメータの設定
client.setCurrentIDC("idc1"); // 現在のIDCを設定
client.setRoutePolicy(ObRoutePolicy.FOLLOWER_FIRST); // ルーティングポリシーを設定
client.init();

String tableName = "test";
String rowkey = "key";
Map<String, Object> result = client.get(tableName).setRowKey(row(colVal("c1", rowkey)))
            .setReadConsistency(ObReadConsistency.WEAK) // 弱い整合性読み取りを設定
            .select("c2").execute();

例では、ObTableClient のクライアントの現在のデータセンターを "idc1" に設定し、ルーティングポリシーを ObRoutePolicy.FOLLOWER_FIRST に設定します。また、BatchOperation インターフェースで一貫性レベルを ObReadConsistency.WEAK に設定します。これにより、バッチ get 操作を実行する際には、"idc1" データセンターのフォロアーレプリカに優先的にルーティングされます。

ObTableClient client = new ObTableClient();
... // その他の接続パラメータの設定
client.setCurrentIDC("idc1"); // 現在のIDCを設定
client.setRoutePolicy(ObRoutePolicy.FOLLOWER_FIRST); // ルーティングポリシーを設定
client.init();

String tableName = "test";
String rowkey1 = "key1";
String rowkey2 = "key2";
BatchOperation batch = client.batchOperation(tableName);
batch.setReadConsistency(ObReadConsistency.WEAK); // 弱い整合性読み取りを設定します。注意:同一バッチ内のget操作では、すべてについて弱い整合性読み取りを設定する必要があります。部分的な設定はサポートされません。
Get get1 = client.get(tableName).setRowKey(row(colVal("c1", rowkey1)))
    .select("c2");
Get get2 = client.get(tableName).setRowKey(row(colVal("c1", rowkey2)))
    .select("c2");
batch.addOperation(get1, get2);
BatchOperationResult res = batch.execute();

例では、ObTableClient でクライアントの現在のデータセンターを "idc1"、ルーティングポリシーを ObRoutePolicy.FOLLOWER_FIRST に設定します。また、query操作で一貫性レベルを ObReadConsistency.WEAK に設定します。これにより、query操作を実行する際には、"idc1" データセンターのフォロアーレプリカに優先的にルーティングされます。

ObTableClient client = new ObTableClient();
... // その他の接続パラメータの設定
client.setCurrentIDC("idc1"); // 現在のIDCを設定
client.setRoutePolicy(ObRoutePolicy.FOLLOWER_FIRST); // ルーティングポリシーを設定
client.init();

String tableName = "test";
String startRowkey = "key1";
String endRowkey = "key5";
QueryResultSet res = client.query(tableName)
            .addScanRange(new Object[] { startRowkey }, new Object[] { endRowkey })
            .setScanRangeColumns("c1")
            .setReadConsistency(ObReadConsistency.WEAK)
            .select("c2")
            .execute();
while (res.next()) {
    Map<String, Object> valueMap = res.getRow();
    System.out.println(valueMap.get("c2"));
}

ODPモードの使用手順

ステップ1:OceanBaseクラスタのIDCを設定する

root@sys でOceanBaseクラスタにログインし、以下の手順でクラスタのデータセンターとリージョン情報を設定します。クラスタが3つのZoneを含み、各Zoneに1つのOBServerノードがある場合を想定し、以下ではz1の設定を例に示します。

  1. z1のリージョンを設定します。REGIONパラメータはZoneが属する地域情報を指定するために使用され、都市名(大文字小文字を区別)に設定することを推奨します。

    ALTER SYSTEM MODIFY ZONE "z1" SET REGION = "SHANGHAI";
    
  2. z1のデータセンターを設定します。IDCパラメータはZoneが属するデータセンター情報を指定するために使用され、データセンターの実際の名前(小文字)に設定することを推奨します。

    ALTER SYSTEM MODIFY ZONE "z1" SET IDC = "zue";
    

完了後、クラスタのデプロイメント情報は次の表のとおりです:

OBServerノードIPアドレス
Zone
IDC
Region
10.0.0.1 z1 zue SHANGHAI
10.0.0.2 z2 xue SHANGHAI
10.0.0.3 z3 yue HANGZHOU

ステップ2:ODPの弱い整合性読み取りパラメータを設定する

  1. proxy_idc_nameパラメータを設定することで、ODPがLDC体系内で属するデータセンターを指定できます。実際のデプロイメントに合わせて、弱い整合性読み取りトラフィックを対応するデータセンターのレプリカにより適切にルーティングできます。例えば、すべての弱い整合性読み取りリクエストを優先的にz1があるデータセンターにルーティングする場合、以下の設定を参照できます:

    ALTER PROXYCONFIG SET proxy_idc_name = 'zue';
    
  2. proxy_route_policyパラメータを設定することで、レプリカのルーティングポリシーをさらに指定できます。以下の例は、Followerレプリカの読み取りを優先するものです:

    ALTER PROXYCONFIG SET proxy_route_policy = 'follower_first';
    

ステップ3:クライアントの弱い整合性読み取りパラメータを設定する

「直接接続モードの使用手順」の「ステップ2:クライアントの弱い整合性読み取りパラメータを設定する」の例を参照してください。

前のトピック

OBKV-Tableのグループコミット
前へ

次のトピック

OBKV-Table関連ビュー
次へ
このページの内容
原理
サポートされているバージョン
直接接続モードの使用手順
ステップ1:OceanBaseクラスタのIDCを設定する
ステップ2:クライアントの弱い整合性読み取りパラメータを設定する
ODPモードの使用手順
ステップ1:OceanBaseクラスタのIDCを設定する
ステップ2:ODPの弱い整合性読み取りパラメータを設定する
ステップ3:クライアントの弱い整合性読み取りパラメータを設定する