2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
リンクをコピー
記事をブックマーク
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.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略