アルゴリズムの概念は、9世紀のペルシアで活躍した科学者のムハンマド・イブン・ムーサー・アル・フワーリズミーが発明したと考えられています。アル・フワーリズミーは西暦780年から850年まで生きたイスラム科学の学者で、「代数学の父」または「コンピューターサイエンスの祖父」とも呼ばれることがあります。
アルゴリズムというワードが「演算の繰り返しを頻繁に伴う、有限数のステップで数学的問題を解く手順」または「問題を解決したり、何らかの目的を達成したりするための段階的な手順」という現在の定義になったのは、これらの概念が提案・証明された20世紀初頭のこと。有名なものでは、「コンピュータ科学の父」と呼ばれるアラン・チューリングが提案したチューリングマシンがあります。チューリングマシンは実際の機械ではなく抽象理論ですが、まさしく現在のアルゴリズムを実際的に取り扱った計算モデルで、コンピュータの誕生に重要な役割を果たしました。
⇧ 用語の語源、初出って特定が無理ゲーなのが多い印象なのよね、特にIT業界...
RDBMS(Relatinal DataBase Management System)における排他制御
とりあえず、Spring Data JPA を利用するプロジェクトということで、「RDBMS(Relatinal DataBase Management System)」における排他制御の話になるのかと。
(はいたせいぎょ)とは、コンピュータ・プログラムの実行において、複数のプロセスが利用出来る共有資源に対し、複数のプロセスからの同時アクセスにより競合が発生する場合に、あるプロセスに資源を独占的に利用させている間は、他のプロセスが利用できないようにする事で整合性を保つ処理の事をいう。相互排除または相互排他(mutual exclusion)ともいう。最大k個のプロセスが共有資源にアクセスして良い場合を k-相互排除という。
換言すれば1つのクリティカルセクションに複数のプロセス(またはスレッド)が同時に入ることを防ぐことである。クリティカルセクションとは、プロセスが共有メモリなどの共有資源にアクセスしている期間を指す。排他制御の問題は1965年、エドガー・ダイクストラが並行プログラミング制御における問題の解法に付いて扱った論文で扱ったのが最初である。
という説明となっていますと。
で、肝心の「RDBMS(Relatinal DataBase Management System)」における排他制御についてはというと、今のところ、Wikipediaの「排他制御」の説明には出て来ないと...
ネット上の情報が正しいと仮定して、
⇧ 上記サイト様によりますと、「RDBMS(Relatinal DataBase Management System)」における「排他制御」を実現するには、大きく分けて、
の2つの方式がありますと。
他のサイト様の情報を見た感じでは、
⇧ 概ね、「RDBMS(Relatinal DataBase Management System)」における「排他制御」について大きく分けて、
の2つの方式があるという話は、変わらない模様。
で、ややこしいのが、「RDBMS(Relatinal DataBase Management System)」によって異なるのかどうかが分からないのだけど、
- SELECT ~ FOR UPDATE
について、「楽観ロック(楽観的排他制御)」と言う人もおれば、「悲観ロック(悲観的排他制御)」と言う人もおり、カオスであると...
まぁ、具体的な実装の段階で検証するしか無いのかも知らんけど...
Spring Data JPAによる排他制御についてはどうなっているのか
で、Spring Data JPA において、「RDBMS(Relatinal DataBase Management System)」における「排他制御」について具体的に実現するとなった場合はどうなるのか?
ネット上の情報を漁っていて、
⇧ 上記サイト様によりますと、
の2つの方式の話が軸になっていますと。
まぁ、「RDBMS(Relatinal DataBase Management System)」における「排他制御」について、ネット上の多くの情報で上記の2つの方式でしか語られていないですからな...
Spring Data JPAにおいて、具体的には、リポジトリのインタフェイスで定義しているメソッドにアノテーションを付与することで、「楽観ロック(楽観的排他制御)」、「悲観ロック(悲観的排他制御)」を実現するということのよう。
ちなみに、Spring Data JPA
⇧ 罠が多いイメージ...
Spring Data JPAの公式のドキュメントが、
⇧ ほとんど説明が無いのに等しいってのが辛い...
JPAのドキュメント読めってことだとしたら、辛過ぎるんだが...
とりあえず、
⇧ 上記サイト様がまとめてくださっている模様。Hibernate特有の話が多そうではありますが...
いまいち、どのライブラリがどこまでを良しなに面倒を見てくれるのかが分かり辛過ぎるんよな...
毎度モヤモヤ感が半端ない…
今回はこのへんで。