この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。今回は知識およびSQL(確認ドリル)について書く。(SQLはGoogle Big Queryに準拠)
知識(隔離性の水準)
隔離性とは
- トランザクションのACID特性のうちisolation(隔離性)について。
- トランザクションを安定して動かすには、究極的には一つずつ直列で動かせばよい。ただし処理効率は悪い。
- 反対に、処理効率を究極まで上げるなら、すべて並列で動かせばよい。ただし安定性は下がる。
- このように、安定性と処理効率はトレードオフの関係にある。システムの特性をふまえ、最適なバランスを見定める必要がある。
バランスの種類と困った現象
- 最も厳格なのがシリアライザブル(直列)。安定する代わりに遅い。
- 以降、厳格性を緩めて、安定性を下げる3つのレベル(隔離性の水準)がANSIにより定義されている。
- レベル3がシリアライザブル。直列処理しか許さない。最も厳格。
- レベル2がrepeatable read。並行処理は挿入を許容。このときはphantom readが発生する。
- レベル1がread committed。並行処理は挿入・更新・削除を許容。このときはphantom readに加えて、unrepeatable readが発生する。
- レベル0がread uncommitted。並行処理は上記に加えてコミット前の参照も許容。このときは上記2つに加えてdirty readも発生する。
phantom readについて
- あるトランザクションが処理している間、他のトランザクションにより挿入が行われ、突然データが幻のように現れる現象。
unrepeatable readについて
- 同一条件で検索しても異なった結果が返ってくること。
- たとえばDBの在庫数が3個のとき。
- トランザクション1(以下T1)がselect(参照)すると在庫数は3個と出てくる。
- このあとT1側で色々手続きを進めたとして、最後の決済前に在庫を再確認する必要がある。
- (例えれば、家電量販店で大人気商品について、店員さんと商談を進めていて、購入決定直前に念のため在庫を調べるようなもの)
- なぜなら、レベル1のread committedでは並列した他のトランザクションにおけるupdate,commitを許容しているから。
dirty readについて
- 未コミットのデータを参照すること。
- たとえばトムの口座残高が500,000円のとき。
- トランザクション1(以下T1)がselect(参照)し、100,000円加算してupdateしたとする。(commitはまだ)
- このあとトランザクション2(以下T2)がselectし、30,000円加算してupdateしたとする。
- ここがポイント。T1がupdate~commitの間に、先走って忙しなく参照しにいく。(T1がupdateするより前を参照するほどは先走らない。それをするとlost updateが起きてしまう)
- このあとT1がcommitするなら、何の問題もない。しかしもしT1がロールバックした場合、T2は正しく動作しない。(先走って600,000円の前提でDB参照してるが、実体は500,000円からスタートだから)
9月22日復習時追記
- 隔離性水準は、午前2では数問出題。TACテキストおよび過去5年分解いており、対策済。
- 午後については「同時実行制御」として過去問ベースで確認しており、対策済。
問題090(SQL確認ドリル)
問題文
- web_logテーブルに記録された「/prod/prod_id_8/」のページビュー数を求めてください。
- クエリパラメータ「?sys=abc123」の有無にかかわらずカウントします。
- 結果テーブルのカラム名は「pageviews_8」とします。
where 列名 like (“条件文”)のおさらい
- where 列名 like (“条件文”)は、条件文に記述した内容でデータを絞り込める。
- なお、条件文において%は任意の文字、_は任意の1文字を表す。
- 具体的には以下のとおり。
考察
- データベーススペシャリスト資格について。今回は知識(隔離性の水準)の復習を行い、処理効率と安定性はトレードオフであることを学習した。また、SQLの確認ドリル(web_logテーブル内の”/prod/prod_id_8/”のPV数)を解いた。
- 考察。「部下や年下の方と接するときは、傾聴や敬意をもって接する」という要旨の本を読んだ。確かに私が職場で「凄い」と思う上司は、これらがスムーズな印象を受ける。同じ仕事でも「あなたの意見は不要。指示通りやるように」か「あなたの意見と力をぜひ貸して欲しい」のどちらか良いかという話だ。
考察のシンプル化と英訳(練習中)
- I am careful not to be arrogant. Because there is much to learn from others.
- (私は傲慢にならないよう気を付けます。他者から学ぶことは多いからです)
参考資料
- 集中演習 SQL入門/木田和廣/株式会社インプレス
- 2022年度版 ALL IN ONE パーフェクトマスター データベーススペシャリスト/TAC
コメント