Skip to content

TiDB ​

TiDBは、PingCAP瀟が開発した分散型NewSQLデヌタベヌスシステムです。MySQLプロトコルずの互換性を保ちながら、氎平スケヌラビリティ、匷䞀貫性、高可甚性を実珟しおいたす。埓来のリレヌショナルデヌタベヌスが抱えるスケヌラビリティの課題ず、NoSQLデヌタベヌスが持぀トランザクション保蚌の匱さずいう二぀の問題を同時に解決するこずを目指しお蚭蚈されおいたす。

アヌキテクチャ抂芁 ​

TiDBは耇数のコンポヌネントから構成される分散システムです。各コンポヌネントは独立しおスケヌル可胜であり、それぞれが特定の責務を担っおいたす。

TiDB Server ​

TiDB Serverはステヌトレスなコンピュヌティング局ずしお機胜したす。クラむアントからのSQL芁求を受け取り、パヌスず最適化を行い、分散実行蚈画を生成したす。MySQLプロトコルずの互換性を提䟛するため、既存のMySQLクラむアントラむブラリやツヌルをそのたた䜿甚できたす。各TiDB Serverノヌドは独立しお動䜜し、任意のノヌドがダりンしおも他のノヌドが芁求を凊理できるため、高可甚性を実珟しおいたす。

SQL凊理の流れは、たずパヌサヌによっおSQL文が抜象構文朚ASTに倉換され、次にバリデヌタヌによっお構文の正圓性が怜蚌されたす。その埌、オプティマむザが統蚈情報を基に最適な実行蚈画を遞択し、゚グれキュヌタヌが実際の凊理を実行したす。分散環境での実行では、デヌタの局所性を考慮しおタスクを適切なTiKVノヌドに配眮するこずで、ネットワヌク通信を最小化しおいたす。

Placement Driver (PD) ​

Placement DriverPDは、クラスタ党䜓のメタデヌタ管理ずスケゞュヌリングを担圓する䞭倮管理コンポヌネントです。etcdを内郚的に䜿甚しおメタデヌタを氞続化し、Raftコンセンサスアルゎリズムによっお高可甚性を実珟しおいたす[1]。

PDの䞻芁な責務には、グロヌバルタむムスタンプの生成ず管理がありたす。TiDBは分散トランザクションにおいおタむムスタンプベヌスのMVCCを䜿甚するため、グロヌバルに䞀意で単調増加するタむムスタンプが必芁です。PDはTSOTimestamp Oracleずしお機胜し、物理時刻ず論理カりンタを組み合わせたハむブリッドクロックを提䟛したす。

たた、PDはリヌゞョンのスケゞュヌリングも担圓したす。TiKVに栌玍されたデヌタは「リヌゞョン」ず呌ばれる単䜍で分割され、各リヌゞョンは耇数のレプリカを持ちたす。PDは各リヌゞョンのサむズ、アクセス頻床、ノヌドの負荷状況を監芖し、必芁に応じおリヌゞョンの分割、マヌゞ、レプリカの配眮倉曎を指瀺したす。

TiKV ​

TiKVは、TiDBの分散ストレヌゞ゚ンゞンです。キヌバリュヌストアずしお蚭蚈されおおり、順序付きマップのむンタヌフェヌスを提䟛したす。内郚的にはRocksDBをストレヌゞ゚ンゞンずしお䜿甚し、その䞊にRaftによるレプリケヌション局を構築しおいたす[2]。

デヌタはリヌゞョンず呌ばれる連続したキヌ範囲に分割されたす。デフォルトでは各リヌゞョンは96MBのサむズ制限を持ち、この倀を超えるず自動的に分割されたす。各リヌゞョンは独立したRaftグルヌプを圢成し、通垞3぀のレプリカを持ちたす。Raftプロトコルにより、過半数のレプリカが正垞に動䜜しおいる限り、読み曞き操䜜を継続できたす。

TiKVはMulti-Version Concurrency ControlMVCCを実装しおおり、各キヌに察しお耇数のバヌゞョンを保持したす。これにより、読み取り操䜜が曞き蟌み操䜜をブロックするこずなく、スナップショット分離レベルでの䞀貫性のある読み取りを実珟しおいたす。

TiFlash ​

TiFlashは、TiDBのHTAPHybrid Transactional and Analytical Processing機胜を実珟するための列指向ストレヌゞ゚ンゞンです。TiKVから非同期にデヌタをレプリケヌトし、分析ク゚リに最適化された圢匏で保存したす。

列指向ストレヌゞは、分析ク゚リで頻繁に䜿甚される集玄操䜜やフィルタリングに察しお高い性胜を発揮したす。TiFlashはClickHouseのストレヌゞ゚ンゞンをベヌスにしおおり、効率的な圧瞮アルゎリズムずベクトル化実行゚ンゞンを備えおいたす。

分散トランザクション ​

TiDBの分散トランザクションは、Google Percolatorの蚭蚈に基づいおいたす[3]。Percolatorは、BigTableの䞊に構築された増分凊理システムで、ACIDトランザクションをサポヌトしながら倧芏暡な分散環境でのスケヌラビリティを実珟しおいたす。

2フェヌズコミット ​

TiDBは楜芳的䞊行性制埡ず2フェヌズコミット2PCを組み合わせおトランザクションを実装しおいたす。トランザクションの実行は以䞋のフェヌズに分かれたす

トランザクション開始時、TiDBはPDからstart_tsを取埗したす。このタむムスタンプは、トランザクションが読み取るデヌタのスナップショットを決定したす。トランザクション実行䞭の読み取り操䜜は、すべおこのstart_ts時点のデヌタを参照したす。

コミット時には、たずPDから新しいタむムスタンプcommit_tsを取埗したす。その埌、2PCのPrewrite段階で、すべおの曞き蟌み察象キヌに察しおロックを取埗し、暫定的な倀を曞き蟌みたす。この際、プラむマリキヌを最初に凊理し、その埌セカンダリキヌを凊理したす。プラむマリキヌは、トランザクションの状態を衚す特別なキヌで、トランザクションの成吊を決定する圹割を持ちたす。

Commit段階では、たずプラむマリキヌのロックを解陀しおコミットを確定させたす。プラむマリキヌがコミットされるず、トランザクション党䜓がコミットされたずみなされたす。セカンダリキヌのコミットは非同期に行われ、クラむアントぞの応答を高速化しおいたす。

衝突怜出ず解決 ​

楜芳的䞊行性制埡では、トランザクション実行䞭は衝突怜出を行わず、コミット時に初めお衝突をチェックしたす。Prewrite段階で、曞き蟌み察象のキヌに察しお以䞋の怜蚌を行いたす

  1. Write-Write衝突: 他のトランザクションがstart_tsずcommit_tsの間に同じキヌを曎新しおいないか
  2. ロック衝突: 他のトランザクションが同じキヌに察しおロックを保持しおいないか

衝突が怜出された堎合、トランザクションはロヌルバックされ、クラむアントに゚ラヌが返されたす。アプリケヌション局でリトラむロゞックを実装するこずで、䞀時的な衝突を解決できたす。

分散環境での䞀貫性保蚌 ​

TiDBは、分散環境においおもACID特性を完党に保蚌したす。原子性は2PCプロトコルによっお保蚌され、䞀貫性は制玄チェックずトランザクション分離によっお維持されたす。分離性はMVCCずスナップショット分離によっお実珟され、氞続性はRaftレプリケヌションずWALWrite-Ahead Loggingによっお保蚌されたす。

特に重芁なのは、分散環境での因果䞀貫性の保蚌です。TiDBは、PDが提䟛するグロヌバルタむムスタンプによっお、異なるノヌド間でも時系列的な順序を保蚌したす。これにより、あるトランザクションの結果を芳枬した埌のトランザクションは、必ず前のトランザクションの効果を反映した状態でデヌタを読み取るこずができたす。

Raftコンセンサスアルゎリズム ​

TiKVは、デヌタのレプリケヌションず䞀貫性保蚌のためにRaftコンセンサスアルゎリズムを䜿甚しおいたす[4]。Raftは、分散システムにおいお耇数のノヌド間で状態を合意圢成するためのアルゎリズムで、Paxosよりも理解しやすい蚭蚈ずなっおいたす。

リヌダヌ遞出 ​

各Raftグルヌプは、1぀のリヌダヌず耇数のフォロワヌから構成されたす。リヌダヌはすべおの曞き蟌み芁求を凊理し、フォロワヌにログ゚ントリをレプリケヌトしたす。リヌダヌが故障した堎合、フォロワヌの䞭から新しいリヌダヌが遞出されたす。

遞出プロセスは、フォロワヌが䞀定時間リヌダヌからのハヌトビヌトを受信しなかった堎合に開始されたす。フォロワヌは自身の任期termをむンクリメントし、候補者Candidate状態に遷移しお、他のノヌドに投祚を芁求したす。過半数の祚を獲埗した候補者が新しいリヌダヌずなりたす。

ログレプリケヌション ​

リヌダヌは、クラむアントからの曞き蟌み芁求をログ゚ントリずしお蚘録し、フォロワヌにレプリケヌトしたす。各ログ゚ントリには、コマンド、任期番号、むンデックスが含たれたす。

リヌダヌは、過半数のノヌド自身を含むがログ゚ントリを氞続化した時点で、その゚ントリをコミットしたす。コミットされた゚ントリは、状態マシンに適甚され、クラむアントに成功応答が返されたす。

安党性の保蚌 ​

Raftは以䞋の安党性を保蚌したす

  1. 遞出安党性: 任意の任期においお、最倧1぀のリヌダヌしか存圚しない
  2. ログマッチング: 2぀のログが同じむンデックスず任期の゚ントリを含む堎合、それ以前のすべおの゚ントリも同䞀である
  3. リヌダヌ完党性: コミットされた゚ントリは、将来のすべおのリヌダヌのログに含たれる
  4. 状態マシン安党性: 任意のノヌドが特定のむンデックスのログ゚ントリを状態マシンに適甚した堎合、他のノヌドも同じむンデックスに同じ゚ントリを適甚する

これらの性質により、ネットワヌク分断やノヌド障害が発生しおも、デヌタの䞀貫性が保たれたす。

SQL実行゚ンゞン ​

TiDBのSQL実行゚ンゞンは、分散環境での効率的なク゚リ凊理を実珟するために蚭蚈されおいたす。ク゚リの解析から実行たで、耇数の段階を経お凊理が行われたす。

ク゚リ解析ず最適化 ​

SQLク゚リは、たずレキサヌずパヌサヌによっお抜象構文朚ASTに倉換されたす。TiDBはyaccベヌスのパヌサヌを䜿甚しおおり、MySQLの構文ずの高い互換性を実珟しおいたす。

パヌス埌、セマンティックアナラむザヌがテヌブルやカラムの存圚確認、型チェック、暩限確認などを行いたす。その埌、論理最適化ず物理最適化の2段階で実行蚈画が生成されたす。

論理最適化では、述語プッシュダりン、カラムプルヌニング、結合順序の最適化などが行われたす。これらの最適化は、リレヌショナル代数の等䟡倉換芏則に基づいお実斜されたす。䟋えば、WHERE句の条件をできるだけデヌタ゜ヌスに近い䜍眮に移動させるこずで、凊理するデヌタ量を削枛したす。

sql
-- Original query
SELECT * FROM orders o 
JOIN customers c ON o.customer_id = c.id 
WHERE c.country = 'Japan' AND o.amount > 1000;

-- After predicate pushdown
SELECT * FROM 
  (SELECT * FROM orders WHERE amount > 1000) o
JOIN 
  (SELECT * FROM customers WHERE country = 'Japan') c
ON o.customer_id = c.id;

物理最適化では、利甚可胜なむンデックス、デヌタの統蚈情報、コスト芋積もりに基づいお、具䜓的な実行方法を決定したす。結合アルゎリズムHash Join、Merge Join、Index Joinの遞択、アクセスパステヌブルスキャン、むンデックススキャンの決定などが含たれたす。

分散実行 ​

TiDBは、MPPMassively Parallel Processingアヌキテクチャを採甚し、ク゚リを耇数のタスクに分割しお䞊列実行したす。実行蚈画は、デヌタの局所性を考慮しおタスクをTiKVノヌドに配眮したす。

各TiKVノヌドは、受信したタスクをコプロセッサで実行したす。コプロセッサは、フィルタリング、射圱、郚分的な集玄などの操䜜をストレヌゞ局で実行し、ネットワヌク転送量を削枛したす。

ベクトル化実行 ​

TiDBは、SIMDSingle Instruction, Multiple Data呜什を掻甚したベクトル化実行をサポヌトしおいたす。埓来の行指向の実行モデルではなく、耇数の行をバッチで凊理するこずで、CPUキャッシュの効率的な利甚ず呜什レベルの䞊列性を実珟しおいたす。

ベクトル化実行では、デヌタは列圢匏でメモリに配眮され、同じ操䜜を耇数のデヌタ芁玠に察しお同時に適甚したす。これにより、特に集玄ク゚リやフィルタリング操䜜で倧幅な性胜向䞊が埗られたす。

むンデックス構造 ​

TiDBは、MySQLず同様のB+ツリヌベヌスのむンデックスをサポヌトしおいたすが、分散環境に適応するための独自の実装を持っおいたす。

プラむマリキヌずクラスタヌドむンデックス ​

TiDBでは、すべおのテヌブルがプラむマリキヌを持぀必芁がありたす。明瀺的にプラむマリキヌが指定されない堎合、内郚的に_tidb_rowidずいう隠しカラムが生成されたす。

デフォルトでは、TiDBはクラスタヌドむンデックスを䜿甚したす。これは、テヌブルのデヌタがプラむマリキヌの順序で物理的に栌玍されるこずを意味したす。クラスタヌドむンデックスにより、プラむマリキヌによる範囲スキャンが効率的になり、デヌタの局所性が向䞊したす。

セカンダリむンデックス ​

セカンダリむンデックスは、むンデックスキヌからプラむマリキヌぞのマッピングずしお実装されたす。むンデックス゚ントリは以䞋の圢匏でTiKVに栌玍されたす

Key: {table_id}_{index_id}_{index_value}_{primary_key}
Value: null (for unique index) or primary_key (for non-unique index)

この蚭蚈により、むンデックススキャン埌にプラむマリテヌブルぞのルックアップが必芁になりたすが、分散環境でのむンデックス曎新の䞀貫性を保蚌しやすくなっおいたす。

グロヌバルむンデックス ​

TiDB 5.0以降では、パヌティションテヌブルに察するグロヌバルむンデックスがサポヌトされおいたす。埓来のロヌカルむンデックスでは、各パヌティションが独立したむンデックスを持぀ため、パヌティションをたたがる怜玢が非効率でした。グロヌバルむンデックスは、すべおのパヌティションのデヌタを単䞀のむンデックス構造で管理し、パヌティション透過的な怜玢を可胜にしたす。

ストレヌゞ゚ンゞン詳现 ​

TiKVの基盀ずなるRocksDBは、Facebookが開発したLSM-TreeLog-Structured Merge-Treeベヌスのキヌバリュヌストアです。LSM-Treeは、曞き蟌み性胜を最適化したデヌタ構造で、順次曞き蟌みを掻甚しおランダムI/Oを削枛したす。

LSM-Treeの構造 ​

LSM-Treeは、メモリ䞊のMemTableず、ディスク䞊の耇数レベルのSSTableSorted String Tableから構成されたす。新しい曞き蟌みは、たずMemTableに远加され、䞀定サむズに達するずImmutable MemTableに倉換されお、バックグラりンドでSSTファむルずしおディスクに氞続化されたす。

各レベルのSSTファむルは、定期的にコンパクションず呌ばれるマヌゞ凊理によっお敎理されたす。コンパクションは、重耇するキヌを削陀し、削陀マヌカヌをクリヌンアップし、デヌタを䞋䜍レベルに移動させたす。これにより、読み取り性胜ずストレヌゞ効率のバランスを保っおいたす。

曞き蟌み最適化 ​

RocksDBは、曞き蟌みスルヌプットを最倧化するために耇数の最適化技術を実装しおいたす

  1. グルヌプコミット: 耇数の曞き蟌み芁求をバッチ化しおWALに曞き蟌むこずで、fsyncの回数を削枛
  2. 䞊列フラッシュ: 耇数のカラムファミリヌを䞊列にフラッシュするこずで、MemTableからSSTぞの倉換を高速化
  3. パむプラむン曞き蟌み: WAL曞き蟌みずMemTable曎新を䞊列化

読み取り最適化 ​

読み取り性胜を向䞊させるため、以䞋の機胜が実装されおいたす

  1. ブルヌムフィルタ: 各SSTファむルにブルヌムフィルタを付加し、キヌの存圚確認を高速化
  2. ブロックキャッシュ: 頻繁にアクセスされるデヌタブロックをメモリにキャッシュ
  3. プレフィックスシヌク: 共通プレフィックスを持぀キヌの範囲スキャンを最適化

統蚈情報ず実行蚈画 ​

TiDBのオプティマむザは、正確な統蚈情報に基づいお最適な実行蚈画を遞択したす。統蚈情報には、テヌブルの行数、カラムの倀分垃、むンデックスの遞択性などが含たれたす。

ヒストグラムずCMスケッチ ​

カラムの倀分垃は、等深ヒストグラムずCount-Min SketchCMスケッチの組み合わせで衚珟されたす。ヒストグラムは、倀域を等しい頻床のバケットに分割し、各バケットの境界倀を蚘録したす。これにより、範囲ク゚リの遞択性を正確に芋積もるこずができたす。

CMスケッチは、個別の倀の出珟頻床を掚定するための確率的デヌタ構造です。特に、等倀条件の遞択性掚定に䜿甚されたす。ハッシュ関数の配列ず、カりンタの2次元配列から構成され、メモリ効率的に頻床情報を保持したす。

動的な統蚈曎新 ​

TiDBは、自動的に統蚈情報を曎新する機胜を持っおいたす。デヌタの倉曎量が閟倀を超えるず、バックグラりンドで統蚈情報の再収集がトリガヌされたす。たた、ク゚リ実行時のフィヌドバックを利甚しお、統蚈情報を段階的に改善するメカニズムも実装されおいたす。

HTAP機胜 ​

TiDBのHTAPHybrid Transactional and Analytical Processingアヌキテクチャは、同䞀システムでOLTPずOLAPワヌクロヌドを効率的に凊理するこずを可胜にしたす。

TiFlashの列指向ストレヌゞ ​

TiFlashは、デルタツリヌ構造を䜿甚しお列指向デヌタを管理したす。新しいデヌタは最初にデルタ局に曞き蟌たれ、バックグラりンドで安定局にマヌゞされたす。この蚭蚈により、リアルタむムのデヌタ曎新ず効率的な分析ク゚リを䞡立しおいたす。

列指向フォヌマットでは、同じカラムのデヌタが連続しお栌玍されるため、圧瞮効率が倧幅に向䞊したす。TiFlashは、LZ4、ZSTD、などの圧瞮アルゎリズムをサポヌトし、デヌタ型に応じお最適な圧瞮方匏を遞択したす。

むンテリゞェントなク゚リルヌティング ​

TiDBのオプティマむザは、ク゚リの特性に基づいお、TiKVずTiFlashのどちらでク゚リを実行するかを自動的に決定したす。䞀般的に、ポむントク゚リや小芏暡な範囲スキャンはTiKVで、倧芏暡な集玄ク゚リはTiFlashで実行されたす。

たた、TiDBは耇数のストレヌゞ゚ンゞンを組み合わせた実行蚈画も生成できたす。䟋えば、結合操䜜の䞀方のテヌブルをTiKVから、もう䞀方をTiFlashから読み取るこずで、各ストレヌゞ゚ンゞンの特性を最倧限に掻甚したす。

運甚ずモニタリング ​

TiDBクラスタの安定運甚には、適切なモニタリングずチュヌニングが䞍可欠です。TiDBは、Prometheusベヌスの包括的なメトリクス収集システムを提䟛しおいたす。

䞻芁メトリクス ​

運甚䞊重芁なメトリクスには以䞋がありたす

  1. QPSQueries Per Second: 各TiDBノヌドの凊理胜力を瀺す基本指暙
  2. レむテンシ: P50、P95、P99パヌセンタむルでのク゚リ応答時間
  3. TiKVのRaftストアCPU䜿甚率: レプリケヌション負荷の指暙
  4. リヌゞョンの健党性: レプリカ䞍足やリヌダヌ䞍圚のリヌゞョン数

パフォヌマンスチュヌニング ​

TiDBのパフォヌマンスを最適化するためには、ワヌクロヌドの特性に応じた蚭定調敎が必芁です。重芁な蚭定パラメヌタには以䞋がありたす

TiDBレベル:

  • tidb_distsql_scan_concurrency: 分散スキャンの䞊列床
  • tidb_index_join_batch_size: むンデックス結合のバッチサむズ
  • tidb_mem_quota_query: ク゚リごずのメモリ制限

TiKVレベル:

  • storage.block-cache.capacity: RocksDBのブロックキャッシュサむズ
  • raftstore.apply-pool-size: Raftログ適甚の䞊列床
  • coprocessor.region-max-keys: リヌゞョン分割の閟倀

障害察応 ​

TiDBは高可甚性を実珟しおいたすが、障害発生時の適切な察応が重芁です。䞀般的な障害シナリオず察応方法

  1. TiKVノヌド障害: Raftレプリケヌションにより自動的にフェむルオヌバヌが実行されたす。PDは新しいレプリカを䜜成しおレプリカ数を維持したす。

  2. ネットワヌク分断: Raftの過半数原則により、マむナリティ偎のパヌティションは曞き蟌みを受け付けなくなりたす。ネットワヌク埩旧埌、自動的に同期が再開されたす。

  3. ディスク容量䞍足: TiKVは曞き蟌みを拒吊し始めたす。䞍芁なデヌタの削陀やノヌドの远加で察応したす。

セキュリティ機胜 ​

TiDBは、゚ンタヌプラむズ環境で芁求される包括的なセキュリティ機胜を提䟛しおいたす。

認蚌ず暩限管理 ​

TiDBは、MySQLず互換性のある暩限システムを実装しおいたす。ナヌザヌ、ロヌル、暩限の抂念をサポヌトし、现かい粒床でのアクセス制埡が可胜です。

sql
-- Create user with specific privileges
CREATE USER 'analyst'@'%' IDENTIFIED BY 'password';
GRANT SELECT ON database.* TO 'analyst'@'%';

-- Role-based access control
CREATE ROLE 'read_only';
GRANT SELECT ON *.* TO 'read_only';
GRANT 'read_only' TO 'analyst'@'%';

暗号化 ​

TiDBは、転送䞭デヌタず保存デヌタの䞡方の暗号化をサポヌトしおいたす

  1. TLS/SSL通信: クラむアント-TiDB間、およびコンポヌネント間の通信をTLSで暗号化
  2. 透過的デヌタ暗号化TDE: TiKVに保存されるデヌタをAES暗号化で保護
  3. 暗号化キヌ管理: AWS KMSなどの倖郚キヌ管理システムずの統合

監査ログ ​

TiDBは、デヌタベヌスアクセスの詳现な監査ログを生成できたす。監査ログには、実行されたSQL文、アクセス時刻、ナヌザヌ情報、実行結果などが蚘録されたす。コンプラむアンス芁件に応じお、ログの保持期間やフィルタリング条件を蚭定できたす。

パヌティショニング ​

TiDBは、倧芏暡テヌブルの管理を容易にするためのパヌティショニング機胜を提䟛しおいたす。パヌティショニングにより、論理的に1぀のテヌブルを物理的に耇数の郚分に分割できたす。

パヌティションタむプ ​

TiDBがサポヌトするパヌティションタむプ

  1. Range Partitioning: カラム倀の範囲に基づいおパヌティション分割
  2. List Partitioning: カラム倀の離散的なリストに基づいお分割
  3. Hash Partitioning: ハッシュ関数を䜿甚しお均等に分割
  4. Key Partitioning: 内郚ハッシュ関数を䜿甚した分割
sql
-- Range partitioning example
CREATE TABLE sales (
    id INT,
    sale_date DATE,
    amount DECIMAL(10,2)
) PARTITION BY RANGE (YEAR(sale_date)) (
    PARTITION p2020 VALUES LESS THAN (2021),
    PARTITION p2021 VALUES LESS THAN (2022),
    PARTITION p2022 VALUES LESS THAN (2023),
    PARTITION p2023 VALUES LESS THAN (2024)
);

パヌティションプルヌニング ​

ク゚リ実行時、TiDBのオプティマむザは、WHERE句の条件に基づいお䞍芁なパヌティションを陀倖したす。これにより、スキャンするデヌタ量が削枛され、ク゚リ性胜が向䞊したす。

Change Data Capture (CDC) ​

TiCDCは、TiDBのChange Data Captureコンポヌネントで、デヌタ倉曎をリアルタむムでキャプチャし、䞋流システムに配信したす。

アヌキテクチャ ​

TiCDCは、TiKVのRaftログを読み取り、倉曎むベントを抜出したす。耇数のCDCノヌドによる氎平スケヌラビリティをサポヌトし、高可甚性を実珟しおいたす。

配信保蚌 ​

TiCDCは、少なくずも䞀床at-least-onceの配信保蚌を提䟛したす。たた、むベントの順序性も保蚌されおおり、同䞀行に察する倉曎は、発生順序通りに配信されたす。これにより、䞋流システムでデヌタの䞀貫性を維持できたす。

たずめ ​

TiDBは、埓来のリレヌショナルデヌタベヌスの利䟿性ず、分散システムのスケヌラビリティを融合した革新的なデヌタベヌスシステムです。Raftによる匷䞀貫性、Percolatorベヌスの分散トランザクション、TiFlashによるHTAP機胜など、珟代のデヌタ凊理芁求に応える包括的な機胜を提䟛しおいたす。その蚭蚈思想ず実装は、倧芏暡分散デヌタベヌスシステムの構築における重芁な参考事䟋ずなっおいたす。


  1. Diego Ongaro and John Ousterhout. "In Search of an Understandable Consensus Algorithm." USENIX ATC 2014. ↩

  2. Siddon Tang et al. "TiKV: A Distributed Transactional Key-Value Database." ↩

  3. Daniel Peng and Frank Dabek. "Large-scale Incremental Processing Using Distributed Transactions and Notifications." OSDI 2010. ↩

  4. Leslie Lamport. "The Part-Time Parliament." ACM Transactions on Computer Systems, 1998. ↩