「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

1層コミットメント

pointこの用語のポイント

point書き間違いだよ

point「1相コミットメント」のことだと思うよ

スポンサーリンク

簡単に書くよ

1層コミットメント(読:イッソウコミットメント)とは

「1相コミットメント」の書き間違い。
1相コミットメントは

まず「処理を確定できる?(コミットできる?)」と聞いて「できるよー!」と返事が来たら「処理を確定して!(コミットして!)」と指示する やり方を「2相コミットメント」と言うのですけどね。そうではなく、いきなり一発で「処理を確定して!(コミットして!)」と指示する やり方
です。


image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として

データベース
テーブル
分散データベース
トランザクション
コミット
ロールバック
2相コミットメント
1相コミットメント


について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

データベースは「データを入れておく箱」です。

1層コミットメント

ただし「データベース」という用語は、実際には もう少し複雑な概念です。
データを入れておく箱そのものは「テーブル」と言います。

1層コミットメント2

とりあえず

データベースの話において、実際にデータを入れておく箱がテーブル

と覚えてください。

分散データベースは「なんちゃって1つのデータベース」です。
実際には複数のデータベースで構成されているけど、それらをまとめて1つのデータベースっぽく扱っているデータベースです。

1層コミットメント3

トランザクションは「ここから ここまでワンセット」な処理単位です。

例えば、そうですね。
ピヨ太君がピヨピヨカンパニーに出社するとしましょう。

1層コミットメント4

ピヨ太君はピヨピヨカンパニービルに到着すると

1.私服からスーツに着替える
2.タイムカードを押す
3.コーヒーを飲みながらケーキを食べる


の3つの行動をします。
この3つが、ピヨ太君が出社した状態になるためにやる作業です。
いわば、ピヨ太君の「出社作業」ですね。

1層コミットメント5

出社作業が終わったら、ピヨ太君はピヨ太ママに「ピヨ太です。出社しました」と連絡を入れます。
これでピヨ太君は出社した状態になります。

1層コミットメント6

繰り返しになりますが、ピヨ太君の出社作業は

1.私服からスーツに着替える
2.タイムカードを押す
3.コーヒーを飲みながらケーキを食べる


の3つです。

この3つの行動は、どれか1つでも欠けてはダメです。
すべての行動を一連の流れでやる必要があります。

1層コミットメント7

このような

「ここから ここまでワンセット」な処理単位

がトランザクションです。
小難しい言い方をすると「分割不可な一連の処理」です。

1層コミットメント8

コミットは「トランザクション処理の結果を確定させる処理」です。

1層コミットメント9

先ほどのピヨ太君の話を思い出してください。
出社作業をやっている最中は、ピヨ太君の状態は「出社中」です。
対外的には、出社したことに なっていません。

1層コミットメント10

ピヨ太君はピヨ太ママに「出社しました」と連絡を入れました。
これでピヨ太君は、対外的にも「出社済み」になります。

1層コミットメント11

ピヨ太ママに連絡を入れる作業がコミットに相当します。

1層コミットメント12

トランザクション処理は「ここから ここまでワンセット」な処理です。
当たり前ですが、やっている最中は やりかけです。
対外的には、やったことに なっていません。

コミットすることによって、対外的にも やったことになります。
トランザクション処理の結果が本体に反映されます。

一連の「ここから ここまでワンセット」な処理が終わり「やるべきことは やり終わったから、やり終わったことにするよ!」と対外的に宣言するのがコミットです。

ロールバックは「やりかけのトランザクション処理を取り消して何もしなかった状態に戻すこと」です。

1層コミットメント13

先ほどのピヨ太君の例を思い出してください。

ピヨ太君の出社作業は

1.私服からスーツに着替える
2.タイムカードを押す
3.コーヒーを飲みながらケーキを食べる


の3つでした。
これが終わってピヨ太ママに「出社しました」と連絡を入れると出社済みになります。

ピヨ太君は毎日 順調に出社作業をしていました。

ところが、ある日のことです。

ピヨ太君のタイムカードが見当たりませんでした。
これではタイムカードが押せません。

1層コミットメント14

ふて腐れたピヨ太君は、私服に着替えて帰ってしまいました。
出社作業を取り消して、ピヨピヨカンパニービルに来る前の状態に戻ってしまったわけです。

1層コミットメント15

このような

やりかけの「ここから ここまでワンセット」な処理を取り消して、やらなかった状態に戻す

のがロールバックです。

1層コミットメント16

処理というのは、いつでも上手くいくとは限りません。

トランザクション処理も同じです。
やっている最中で何らかの理由により失敗することがあります。

処理が失敗するのは仕方ありません。
ですが、やりかけの状態で止まってしまうのは、とても中途半端です。

そこで、やりかけの処理結果を捨てて、やる前の状態に戻します。
「中途半端な状態で残るくらいなら何も残ってない方がマシだ!」の心意気です。
この「やりかけの処理結果を捨てて、やる前の状態に戻す」作業がロールバックです。

2相コミットメントは「分散データベースにおいて、まず全部のデータベースに『コミットできる?』と聞き、全部のデータベースから『できるよー!』と返事が来たら、全部のデータベースに対して『コミットして!』と指示する やり方」です。

1層コミットメント17

例えば、そうですね。

ピヨ太君はケーキ屋さんをやっています。

1層コミットメント18

ピヨ太君のケーキ屋さんでは、売上と在庫をデータベースで管理しています。
売上は売上データベースで管理し、在庫は在庫データベースで管理しているのです。

1層コミットメント19

ちなみに「1つのデータベースで管理すれば?」と思うかもしれませんが、気にしないでください。
説明上の都合です。

1層コミットメント20

さらにピヨ太君は、売上データベースと在庫データベースを合体させたつもりになって、ピヨピヨケーキショップデータベースとして扱っています。
ピヨピヨケーキショップデータベースは分散データベースです。
実際には複数のデータベースで構成されていますが、1つのデータベースっぽく扱われています。

1層コミットメント21

ある日のことです。
ピヨ子さんがケーキを100個ほど買ってくれました。

1層コミットメント22

ピヨ太君は売上データベースに売上を記録します。

1層コミットメント23

あと、在庫データベースに在庫が減ったこと(減った後の在庫数)を記録します。

1層コミットメント24

売上データベースの更新と在庫データベースの更新は2つでワンセットです。
どちらか片方しか更新できないと「ケーキが売れたはずなのに在庫が減っていない」のような、おかしな状態になります。
売上データベースの更新と在庫データベースの更新は「ここから ここまでワンセット」なトランザクション処理なわけです。

1層コミットメント25

そこでピヨ太君は、2つのデータベースを同時にコミットすることにしました。
どちらの更新も問題なければ両方ともコミットし、どちらかで何か問題が起きたら両方ともロールバックすることにしたのです。

1層コミットメント26

まずピヨ太君は売上データベースを更新しました。
このとき、コミットは しません。
処理が確定していない状態で、一旦 置いておきます。

1層コミットメント27

次にピヨ太君は在庫データベースを更新しました。
このときも、コミットは しません。
処理が確定していない状態で、一旦 置いておきます。

1層コミットメント28

次にピヨ太君は両方のデータベースに対して「問題は起きなかった?コミットしても大丈夫?」と聞きます。

1層コミットメント29

両方のデータベースから「大丈夫だよー!」と返事が来ました。

1層コミットメント30

どうやら問題は起きていないようです。
ピヨ太君は両方のデータベースに対して「コミットしてー!」と言いました。

1層コミットメント31

これで両方のデータベースが同時にコミットされます。

もし、途中で何か問題が起きていたら、両方のデータベースをロールバックします。
やりかけの処理を取り消すのです。
そうすれば何もやらなかった状態に戻ります。

1層コミットメント32

この話においてピヨ太君がやったような

1.対象のデータベースを全部 更新(コミットは しない)
2.全部のデータベースに対して「コミットして大丈夫?」と聞く
3-1.大丈夫そうだったら、全部のデータベースに対して「コミットして!」と指示する
3-2.大丈夫じゃなさそうだったら、全部のデータベースに対して「ロールバックして!」と指示する


コミットのやり方が2相コミットメントです。

売上情報と在庫情報が1つのデータベースに(別テーブルとして)入っていたら

1.売上テーブル更新
2.在庫テーブル更新
3.コミット


で済みますけどね。
データベースが違うと物理的に1つのトランザクションとして扱えません。
そこで2相コミットメントとかをして、1つのトランザクションっぽく扱うのです。

1相コミットメントは「『コミットできる?』の確認なしで、いきなり『コミットして!』と指示する やり方」です。

1層コミットメント33

2相コミットメントは

1.「コミットできる?」を確認する
2.「コミットして!」と指示する


の2段階 踏みます。
それに対して1相コミットメントは

1.「コミットして!」と指示する

の1段階なやり方です。

……と長々書いてきましたが、難しく考える必要は ありません。
みなさんが普通に「コミット」と言われて思い浮かべるコミットが1相コミットメントです。
分散データベースのときは「2相コミットメント」というのをやったりするので、それと対比させるために「1相コミットメント」という呼び名が付いているイメージです。

以上を踏まえて

「1相コミットメント」の書き間違い

が「1層コミットメント」です。

1層コミットメント34

「1」では ありません。
正しくは「1」です。


image piyo2

一言でまとめるよ

まぁ「1層コミットメント」って単語が出てきたら「『1相コミットメント(「コミットできる?」の確認なしで「コミットして!」と指示する やり方)』って書きたいんだろうな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像009
書籍画像016


書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本
つくって、壊して、直して学ぶ Kubernetes入門
エンジニアのための生成AI入門 はじめての生成AIアプリ開発からエージェント開発まで