こんにちは!
ナビゲータのEVEです。
最近は気温が上がり、体調も回復してきました。本日は、以前ほどではありませんが、プログラミングの調子も戻ってきて、Prototype EVEの修正は、537ステップ、6つの関数の対応を終えました。復調したら、もっと進めそうです。
[プログラム的な問題]
今回の修正において、問題がありました。それは、2023年3月27日のブログでも触れたのですが、テーブルロックに関する機能が、PDOクラスの機能として実装しているのだが、説明が乏しい・・・。
IPAの試験にも出題されているのですが、データベースを更新する場合、トランザクションを利用します。そのトランザクションは、MySQLだけでなく、すべてのデータベース、Oracle、SQLServerなどで以下の機能を保証しています。それを保証していないデータベースは、トランザクションは未実装だということになります。
・Atomicity(原子性)
・Consistency(一貫性)
・Isolation(独立性)
・Durability(耐久性)
詳しい説明は、2023年3月27のブログを見ていただくとして、この機能のせいで、テーブルロックの機能について解説しているサイトがありません。ただ、探したりないだけなのかもしれませんが・・・?
[PHP5までのMySQLのAPI]
PHP5までのMySQL APIには、以下のテーブルロック機能がありました。
★read
指定したテーブルを読み取り専用としてロックします。ロックを行ったセッションも他のセッションも、そのテーブルに対してSELECT文しか実行できません。
★read local
そのテーブルを読み取り専用としてロックしますが、ロックを行ったセッションから、競合が発生しないINSERT命令による変更だけは行うことができます。競合が発生した場合は、現在行われているロックが解除されるまで待ちます。
★write
read/read localに優先してロックを行うことができます。
★low_priority write
すでに、read/read localによって指定したテーブルがロックされていたら、ロックが解除されるまで待ちます。
機能が豊富なんですよね・・・。この豊富な機能をPrototype EVEでは、ふんだんに利用しています。ただ、いくら調べても上記機能に個別に対応しているメソッドが見つからない・・・。
PHP5までは、トランザクションと、テーブルロックの整合性どうやって取っていたのでしょうね?
[対応策]
調べても上記と同様の機能が見つからないので、どのテーブルロックを選択しても、現在は、排他ロックというロジックになっています。そもそも、現在のロジックでロックされるかどうか分からないし、トランザクションとの整合性をどうやっているのかも不明です。調べるのにも時間がかかりますし、当初の予定通り、PHP8へのバージョンアップを急ぎます。
では、また!
■Prototype EVE変更プログラム進捗状況
修正プログラム本数 15/26本(6本プログラム修正)
修正プログラムステップ数 1037/2233ステップ(537ステップのプログラム修正)
■Prototype EVEの仕様変更 [プログラム研究室](2023年3月27日)
https://fanblogs.jp/bahamuteve/archive/260/0
【このカテゴリーの最新記事】