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データベースは、ログストリームとTabletに基づいてユーザーデータを組織し、各ログストリームには災害復旧のために複数のレプリカが存在します。そのため、SQLリクエストの実行過程では、特定のマシンにルーティングして対応するレプリカのデータを読み書きするために、パーティションデータの位置情報を把握する必要があります。このパーティションデータの位置情報をLocationと呼び、各observerプロセスには、ローカルマシンが必要とするパーティションのLocation情報を更新およびキャッシュするサービスが存在します。このサービスをLocation Cacheサービスと呼びます。
V4.0.0バージョンではログストリームとTabletの概念が導入されました。パーティションデータのLocation情報を取得するには、パーティションが対応するTablet、Tabletとログストリームのマッピング関係、およびログストリームレプリカの位置情報を把握する必要があります。これらの情報は、以下のシステムテナントのデータディクショナリから取得できます:
oceanbase.CDB_OBJECTS:OBJECT_TYPEをTABLE、TABLE PARTITION、またはTABLE SUBPARTITIONに指定することで、対応するパーティションのDATA_OBJECT_ID、すなわちTABLET_ID(テナント内のTabletの一意の識別子)を取得できます。oceanbase.CDB_OB_TABLET_TO_LS:Tabletが属するログストリームを取得します。ログストリームはテナント内で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レプリカのリージョン連携をサポートしています。リージョンをまたいで展開されたRレプリカは、自動的にツリー状の連携構造を形成してログを同期し、リージョンをまたいだネットワークトラフィックの消費を削減します。
データの均等化
OceanBaseデータベースは、Root Serviceを通じてテナント内の各リソースユニット間のロードバランシングを管理します。異なるタイプのレプリカはそれぞれ異なるリソース要件を持つため、Root Serviceがバランシング操作を実行する際には、各リソースユニットのCPU、ディスク使用量、メモリ使用量、IOPSの使用状況などの要素を考慮する必要があります。ロードバランシングを経て、最終的にはすべてのマシンの各種リソース使用量が比較的均等な状態になり、各マシンの全リソースが最大限に活用されます。
Root Serviceは主に以下の2つの方法でデータの均等化を実現します:
レプリカの均等化
Root Serviceは、Unitの移行、ログストリームレプリカの複製または移行により、テナントの各マシン上のリソース使用状況を調整します。
Leaderの均等化
レプリカの均等化を基盤として、Root ServiceはテナントのPrimary Zoneなどの要因に基づき、各マシンのログストリームLeaderの数を自動的に作成・均等化します。ログストリームLeaderの均等化の詳細については、テナント内の均等化を参照してください。