2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
kota2and3kan氏:それでは、「分散トランザクション in CockroachDB」というタイトルで私から話します。まず自己紹介ですが、こたつ&&みかん(@kota2and3kan)というアカウントで活動しています。ふだんはサポートの仕事をしていて、ポスグレやCockroachDBを中心に、データベース周りの技術に興味があります。
(スライドを示して)さっそく本題に入っていきますが、今日はこのような流れで話したいと思います。
まずCockroachDBの概要から話します。CockroachDBは分散SQLデータベースで、いわゆるRDBMS(Relational DataBase Management System)と呼ばれるものです。CockroachDBは分散DBなので、複数のNodeで構成されたクラスタとして動作します。
分散DBであるためデータが分散して格納され、また、すべてのNodeでトランザクションを実行できる特徴もあります。これについて1つずつ見ていきます。
まず、データが分散される部分です。データはRDBMSなので、ユーザーからはテーブルのようなかたちに見えます。そしてこのデータは内部的にKey−Value形式に変換され、Rangeと呼ばれる512メガ単位のデータに分割されます。そして、このRangeを各Nodeにいい感じに分散して格納します。さらにこのRangeは、Raftを使ってReplicaが作成される動作になります。
また、スケールアウトも可能です。先ほどの構成から2匹増えて全体で5匹構成のクラスタになった場合、このデータもいい感じに分散されます。また、スケールインも可能です。
次に、すべてのNodeでトランザクションを実行可能という部分について、話します。CockroachDBではクラスタ内のNode間に役割の差異はありません。いわゆるリーダーやプライマリと呼ばれるような役割の差はなく、すべてのNodeがCoordinatorとして振る舞えます。つまり、すべてのNodeでWriteもReadも実行できるということです。
また、CockroachDBでのCoordinator NodeのことをGateway Nodeと呼びますが、Gateway Nodeは処理対象のKeyを持っているNodeに対して、クエリをルーティングする機能を持っています。
(スライドを示して)例えば、Key15という値に対してWriteを実行しようとすると、実際にはNodeがクエリを受け取りますが、Node自体はデータを持っていないので、Key15という値が入ったデータを持っているNodeにクエリをルーティングして、データを持っているNodeがデータを処理する動きになります。
(スライドを示して)再掲ですが、CockroachDBは分散DBなので、この2つの特徴があります。他にもいろいろありますが、今日はこの2点を押さえてもらえるとよいと思います。
次に、課題について話します。先ほどのように、データが分散された状態でトランザクションを実行するために、いくつかの条件を満たす必要があります。これについても1つずつ見ていきます。
(スライドを示して)まずAtomicityに関してです。CockroachDBでは、先ほどのように分散してデータが格納されていますが、これに対する書き込みは、すべてCOMMITされるか、すべてABORTされるかのどちらかである必要があります。
例えば、トランザクションの中で3つのWriteが実行されると、これらのデータはそれぞれ別々のNodeに書き込まれることになりますが、1つのNodeだけデータが書き込めなかったという状態になることは許されません。
そのため、複数のNodeにまたいだWriteが、すべて一括でCOMMITされるかABORTされるか、Atomicityを満たす必要があります。
次に2つ目の課題です。これは、他のトランザクションの状態を判断する必要があるという内容です。(スライドを示して)例えば、Key15に対してWriteを実行するトランザクションがあります。その隣に、Key15に対してReadを実行するトランザクションがあります。
この2つのトランザクションが同時に実行されると、クエリ自体は真ん中のNodeにルーティングされて、データが書き込まれたり読み込まれたりする動きになります。ただ、Readを実行しているトランザクションがデータを読み込む時には、WriteのトランザクションがCOMMITしているかABORTしているかという情報を確認しないと、どのデータを読んでいいかがわからなくなってしまいます。そのため、トランザクションの状態を確認できるようにする必要があります。
最後に、トランザクションの順番を判断する必要があるという話です。先ほど話したように、CockroachDBでは複数のNodeで同時にトランザクションすることは実行可能です。実際には、複数のトランザクションが複数のNodeで同時に実行されることになります。
(スライドを示して)そうすると、いろいろなクエリが飛び交うことになります。クラスタ全体でクエリが飛び交っている状態で全体の一貫性を確保するために、トランザクションがどのような順番で実行されたかという情報を決める必要があります。これが課題3つ目である、トランザクションの順番を判断する必要がある、という部分です。
(スライドを示して)こちらも再掲ですが、CockroachDBではデータが分散された状態で、今話したような3つの条件を満たす必要があります。こちらも他にも条件などあるのですが、今日はこの3つを押さえておいてもらえると助かります。そしてこの課題を解決するために、分散トランザクションが必要です。
(次回に続く)
関連タグ:
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05