コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

楽観的ロックと悲観的ロックをざっくりまとめる

言葉としては認識しているが、どういう意図で使われるものかをざっくりまとめる。

そもそも使われる文脈

楽観的ロックと悲観的ロックはデータベースの文脈で使われる。複数人が疲れるときに同時更新に関して策を講じるかどうかの話で使われる。

このときに同時更新を防ぐために他の人の処理を防ぐ排他処理のことをロックと呼ばれ、そのロックの種類を示す。

悲観的ロック

悲観的ロックは別名「悲観的並行性制御(pessimistic concurrency control)」と呼ばれ、同時に更新することを前提した処理。

  • 処理の開始時に他の処理ができないようにする(≒ ロックする)
  • 処理が終わったら他の制御ができるようにする(≒ ロックを外す)

こうすることにより、ほかの作業をブロックするので競合することがない

楽観的ロック

対して楽観的ロックは別名「楽観的並行性制御(optimistic concurrency control)」と呼ばれ、同時に更新することは前提としない制御。

  • 処理の終了時に、他の処理がされたかを確認する
  • 他の処理がされていたら自分がやったことを破棄する

こうすることにより、更新されたもの勝ちとして、他の作業との整合性を担保する

参考リンク

律速という言葉はボトルネックと近い意味で使われる

カタカナ語と漢字のイメージがかけ離れ過ぎてて定着しないのでメモがてら

そもそものボトルネック

e-Wordの説明がキレイだったので引用すると

瓶(bottle)の首(neck)、隘路という意味の英単語。ガラス瓶の口に近い細くなっている部分のことで、液の流量(の最大値)は瓶の容量や他の部分の太さに関わらず、この部分の太さによって決まる。このことから、系全体の中で速度を律する、流れを最も妨げる要素を表す例えとして様々な分野で用いられる。- ボトルネック(ネック)とは - IT用語辞典 e-Words

砂時計のくびれの部分で流量が制限されるので、それで時間を図ることができる、のような意味。

律速ボトルネック

律速の元ネタは化学用語の「律速段階」

化学反応がいくつかの段階を経て進むとき、そのうちで変化速度が最も遅い反応段階。この反応速度で全体の反応速度が支配される。 - 律速段階(りっそくだんかい)とは - コトバンク

律速になる場所が「一番遅くなり、この場所にあわせて全体の速度が決まる」ということなので、ボトルネックとほぼ同じ意味になる。

参考リンク

ActiveRecordの find , find_by , where の使い分け

初学者にいい感じに説明できなかったので、SQLの概念抜きにしてまとめてみる

用途ベースの使い分け方

いずれもModel(ActiveRecord)からデータを取得するために使うものだが まずは大きく2つのうちどちらかになるかを考える

  1. 結果が単一になるものを取りたい
  2. 結果が複数になるものを取りたい

Aの場合、どのように絞り込みたいかによって代わり

  1. サロゲートキーであるID
  2. 複合した条件

の2つで分かれる。この結果を持って

  • A1が find
  • A2が find_by
  • Bが where

といういずれかの選択になる。

また、whereに関しては直接モデルのクラスではなく ActiveRecord::Relation になることも気をつけなければいけない

参考リンク

Gemfileのgemの取得先にGitを指定する場合、branchを指定することができる

雑なメモ

やり方

基本のやりかた

gitで書くときには以下のように書ける。

gem "rails", :git => "https://github.com/rails/rails.git"

branchを加えるやり方

gem "rails", :git => "https://github.com/rails/rails.git", :branch => "6-0-stable" 

補足

いまのbundlerだと :github という指定もできる。

参考リンク

「アクセスがスパイク」などのときに使う「スパイク」の意味

実は一般的な用語ではないということに気づいたのでメモ

意味

瞬間的に従来の量よりも増えることで、折れ線グラフにしたときに急激に数値があがる状態のことを指す

(おそらくの)語源

語源はスパイクノイズかと思われる

電子機器で、スイッチの開閉などに伴って出る、鋭い波形の騒音。 - スパイクノイズとは - コトバンク

この尖った波形と前述の折れ線グラフでの急増が重なった言葉だと思わる

同義の言葉

トラフィックスパイク(TrafficSpike)もほぼ同じ意味で、アクセストラフィックがスパイクするという意味の旨で使われる

関連リンク

サーバ通信におけるアウトバウンド/インバウンドの意味

どっちがどっちだっけ、となるので簡単に調べてみる

言葉の使い分け

アウトバウンド(外へ)

中から外への通信のことを指す、転じて自分から通信を始める通信に関してアウトバウンドという

インバウンド(中へ)

アウトバウンドに対して、外から中への通信を指し、転じて相手からの通信を受ける場合はインバウンドという

参考リンク

OAuthの話で出てくる「認証」と「認可」の違いをざっくりまとめる

よくわからなくなるのでざっと書いてみる

認証(Authentication)とは

認証とは問いかけたのシステムやサービスに対して「誰であるかを証明すること」

例えば

  • IDやパスワードを入力させてそのIDのユーザであることを証明する
  • 利用している端末などの情報を送ってユーザであることを証明する

など、利用しようとしているユーザであることを証明する仕組み。

認可(Authorization)とは

認可とは問いかけたシステムやサービスへ「リソースへのアクセス許可をすること」

Facebookなどがわかりやすく

  • メールアドレス
  • 性別
  • 年齢

などFacebookとして持っているユーザの情報ひとつひとつに対して、問いかけたシステムに関して良いか聞いてくる。

OAuth + OpenID Connectでは

俗に言うOAuthはあくまでも認証の仕組み。そのため、どの情報を与えていいかなどのコントロールは別の仕組みで実現する必要がある。そこでよく使われる仕組みがOpenID Connectのため、両者がセットで扱われる。

参考リンク