OceanBaseデータベースは、従来のデータベースのパーティションテーブルの概念を参考に、テーブルのデータを複数のパーティション(Partition)に分割します。V4.xバージョンでは、パーティションはユーザーが作成する論理オブジェクトであり、テーブルデータを分割および管理する仕組みです。
各パーティションには対応するデータ格納オブジェクトがあり、これをTabletと呼びます。Tabletはデータを格納する能力を持ち、マシン間での移行(transfer)をサポートしており、データ均等化の最小単位です。Tabletはパーティションと一対一で対応し、単一パーティションテーブルは1つのTabletを作成し、複数パーティションテーブルは各パーティションごとに1つのTabletを作成します。
ログストリームは、OceanBaseデータベースが自動的に作成および管理するエンティティであり、複数のTabletと順序付けられたRedoログストリームを含む一連のデータの集合を表します。Paxosプロトコルを通じてマルチレプリカのログ同期を実現し、レプリカ間のデータ一貫性を保証することで、データの高可用性を実現しています。
分散環境下では、データの読み書きサービスの高可用性を保証するため、OceanBaseデータベースは同一のログストリームのデータを複数のマシンにコピーします。異なるマシン上の同一ログストリームのデータコピーをレプリカ(Replica)と呼びます。同一ログストリームの複数のレプリカはPaxos一貫性プロトコルを用いてレプリカの強整合性を保証し、各ログストリームとそのレプリカは独立したPaxosグループを構成します。そのうち1つのログストリームがリーダーレプリカ(Leader)となり、他のログストリームはフォロワーレプリカ(Follower)となります。リーダーレプリカは強整合性の読み取りおよび書き込み機能を備え、フォロワーレプリカは弱整合性の読み取り機能を備えています。
Location Cache
OceanBaseデータベースは、ログストリームとシャードに基づいてユーザーデータを組織し、各ログストリームには複数のレプリカがあり、災害復旧に利用されます。そのため、SQLリクエストの実行過程では、パーティションデータの位置情報を把握する必要があります。これは、特定のマシンにルーティングして対応するレプリカのデータを読み書きするために使用されます。このパーティションデータの位置情報をLocationと呼び、各observerプロセスには、ローカルマシンで必要なパーティションのLocation情報を更新およびキャッシュするサービスが存在します。このサービスをLocation Cacheサービスと呼びます。
V4.0.0バージョンではログストリームとシャードの概念が導入されました。パーティションデータのLocation情報を取得するには、パーティションが対応するシャード、シャードとログストリームのマッピング関係、およびログストリームレプリカの位置情報を把握する必要があります。これらは以下のシステムテナントのデータディクショナリから取得できます:
oceanbase.CDB_OBJECTS:OBJECT_TYPEをTABLE、TABLE PARTITION、またはTABLE SUBPARTITIONに指定することで、対応するパーティションのDATA_OBJECT_ID、すなわちTABLET_ID(テナント内のシャードの一意の識別子)を取得できます。oceanbase.CDB_OB_TABLET_TO_LS:シャードが属するログストリームを取得します。ログストリームはテナント内でLS_IDによって一意に識別されます。oceanbase.CDB_OB_LS_LOCATIONS:ログストリームのレプリカタイプと位置を取得します。
レプリカタイプ
ログストリームレプリカが保存するデータ種類の違いに基づき、レプリカは異なるタイプに分類されます。これにより、データの安全性、パフォーマンスのスケーラビリティ、可用性、コストなど、さまざまなビジネスニーズに対応できます。
OceanBaseデータベースは以下のタイプのレプリカをサポートしています:
フル機能レプリカ(FULL/F)
フル機能レプリカはPaxosレプリカと呼ばれ、対応するレプリカはPaxosメンバーグループを構成し、選挙投票に参加できます。
読み取り専用レプリカ(READONLY/R)
V4.x系では、OceanBaseデータベースはV4.2.0バージョンから読み取り専用レプリカをサポートしています。読み取り専用レプリカは非Paxosレプリカであり、対応するレプリカはPaxosメンバーグループを構成できず、選挙投票にも参加しません。
カラムストアレプリカ(COLUMNSTORE/C)
V4.x系では、OceanBaseデータベースはV4.3.3バージョンからカラムストアレプリカをサポートしています。カラムストアレプリカは読み取り専用レプリカと同様に非Paxosレプリカであり、対応するレプリカはPaxosメンバーグループを構成できず、選挙投票にも参加しません。
分散型一貫性プロトコル
OceanBaseデータベースは、同一ログストリームの各レプリカ間でトランザクションログを同期するためにPaxosプロトコルを使用します。多数派が正常に同期した場合にのみコミットが可能です。デフォルトでは、読み書き操作はプライマリレプリカ上で強い一貫性を保証します。セカンダリレプリカは弱い一貫性の読み取りをサポートし、やや古いバージョンのデータを読み取ることを許可します。
さらに、V4.3.x系では、OceanBaseデータベースはV4.3.1バージョンからRレプリカのRegion連携をサポートしています。RegionをまたいでデプロイされたRレプリカは、自動的にツリー状の連携構造を形成してログを同期し、Regionをまたぐネットワークトラフィックの消費を削減できます。
データの均等化
OceanBaseデータベースは、Root Serviceを通じてテナント内の各リソースユニット間のロードバランシングを管理します。異なるタイプのレプリカはそれぞれ異なるリソース要件を持つため、Root Serviceがバランシング操作を実行する際には、各リソースユニットのCPU、ディスク使用量、メモリ使用量、IOPSの使用状況などの要素を考慮する必要があります。ロードバランシングを経て、最終的にはすべてのマシンの各種リソース使用量が比較的均等な状態になり、各マシンの全リソースが最大限に活用されます。
Root Serviceは主に以下の2つの方法でデータの均等化を実現します:
レプリカの均等化
Root Serviceは、Unitの移行、ログストリームレプリカの複製または移行により、テナントの各マシン上のリソース使用状況を調整します。
Leaderの均等化
レプリカの均等化を基盤として、Root ServiceはテナントのPrimary Zoneなどの要因に基づき、各マシンのログストリームのLeader数を自動的に作成・均等化します。ログストリームLeaderの均等化に関する詳細は、テナント内の均等化を参照してください。