アフィリエイト広告を利用しています
検索
<< 2023年04月 >>
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
最新記事
タグクラウド
カテゴリーアーカイブ
ファン
最新コメント
プロフィール
ゼロから始めるシステム開発さんの画像
ゼロから始めるシステム開発
 こんにちは!ナビゲータのEVEです。各種研究室を用意し、次期EVEシステムを製造しようと日々頑張っています。現在一番力を入れているのが、資金調達です。このブログもその一環ですので、ご協力いただければ嬉しいです。
プロフィール

2023年04月21日

Prototype EVEの仕様変更の問題点 〜テーブルロック〜 [プログラム研究室]


 こんにちは!
 ナビゲータの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