この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。今回は知識およびSQL(確認ドリル)について書く。(SQLはGoogle Big Queryに準拠)
知識(2相コミットメント)
トランザクションのACID特性(おさらい)
- トランザクションのACID特性について。
- atomicity(原子性)はall or nothing。半端な処理は非常にタチが悪い。たとえばaさんからbさんへの送金トランザクションで、aさんからの引き去りだけで処理が終わってしまうなど。コミットメント制御(commitかrollbackで終わる)が重要になる。
- consistansy(一貫性)は正当性。トランザクションが正しく完了するか。単体だけでなく複数のときも上手く動くよう、同時実行制御が重要になる。
- isolation(隔離性)は隔離水準の話。単体直列起動が手堅いが遅いので、どこまで基準を緩めるか。
- durability(耐久性)は障害への体制。障害の種類ごとに回復制御の手順があり、またレプリケーションなど被災の対応もある。
分散DBと2相コミットメント
- 上述のコミットメント制御の一つを紹介。
- 分散データベースとは、複数の拠点に分けてデータベースを置くもの。たとえば東京センタと大阪センタに、東日本と西日本のデータを管理するなど。
- たとえば東京倉庫(東京センタ)から大阪倉庫(大阪センタ)へ100個移送する場合。まず東京センタにマイナス100個のupdateを行い、commitする。次に大阪センタにプラス100個のupdatew行い、commitする。
- このとき、両方無事commitできれば問題ない。しかし、仮に大阪センタ側の処理がrollbackした場合、東京センタの方を元に戻す必要がある。(東京センタ側が自動で戻るわけではないから)
- 方法として、東京センタ側はすでにcommitして決着が付いているのでrollbackできない。よって大阪センタをrollbackするトランザクションで、東京センタ側を再commit(プラス100個)する必要がある。
- しかし、もし大阪センタがrollback後にトランザクション障害を起こしてしまうと、100個が戻らず大きな問題になってしまう。
- そこで、2相コミットメントという方法を取る。分散DBのそれぞれでまとめてcommitまたはrollbackする方法。
- 上の例であれば、東京センタ側のトランザクションはupdate後に”ok(acknowledgement(両方)の頭を取ってackとも言う)”としてセキュア状態(commitもrollbackもできる状態)にする。次に大阪センタ側も同様にする。こうして、両者ok(ack)となれば両者commitし、片方でもng(nack)となれば両者rollbackする。
- 2相コミットメント制御は午前問題で頻繁に出題されるので、しっかり内容を把握しておくこと。
9月22日復習時追記
- 2相コミットメントは、午前2では数問出題。TACテキストおよび過去5年分解いており、対策済。
問題091(SQL確認ドリル)
問題文
- salesテーブルから、商品ID(product_id)が14または15の商品の販売個数(quantity)の合計を求めてください。
- 結果テーブルのカラム名は「sum_qty_14_15」とします。
where 列名 in (リスト)のおさらい
- where 列名 in (リスト)は、リストに記述した内容でデータを絞り込める。
- 具体的には以下のとおり。
考察
- データベーススペシャリスト資格について。今回は知識(2相コミットメント)の復習を行い、分散DBのトランザクション処理の作法について学習した。また、SQLの確認ドリル(salesテーブルで商品IDが14または15の商品の販売個数の合計を求める)を解いた。
- 考察。菜根譚の「歩を退くるは、すなわち歩を進むるの張本(もと)なり」という考え方が好きだ。相手に対する親切は自分にとっても良く、親切にし合う関係ができるかもしれないからだ。たとえば狭い道で車がすれ違うとき、私は一時停車し相手に道を譲るようにしている。
考察のシンプル化と英訳(練習中)
- one step that I give others is like a step forward for myself.
- (私が他の人に与える一歩は、自分にとっての一歩のようなものだ)
参考資料
- 集中演習 SQL入門/木田和廣/株式会社インプレス
- 2022年度版 ALL IN ONE パーフェクトマスター データベーススペシャリスト/TAC
コメント