2024.10.21
お互い疑心暗鬼になりがちな、経営企画と事業部の壁 組織に「分断」が生まれる要因と打開策
リンクをコピー
記事をブックマーク
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.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.21
40代〜50代の管理職が「部下を承認する」のに苦戦するわけ 職場での「傷つき」をこじらせた世代に必要なこと
2024.11.20
成果が目立つ「攻めのタイプ」ばかり採用しがちな職場 「優秀な人材」を求める人がスルーしているもの
2024.11.20
「元エースの管理職」が若手営業を育てる時に陥りがちな罠 順調なチーム・苦戦するチームの違いから見る、育成のポイント
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.19
がんばっているのに伸び悩む営業・成果を出す営業の違い 『無敗営業』著者が教える、つい陥りがちな「思い込み」の罠
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.15
好きなことで起業、赤字を膨らませても引くに引けない理由 倒産リスクが一気に高まる、起業でありがちな失敗