データベーススペシャリスト資格|2022年10月挑戦ログ 8月9日|DB基礎知識(2相コミットメント)|SQL(確認ドリル)

高度IT・基礎知識

この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。今回は知識および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

コメント

タイトルとURLをコピーしました