[過去ログ] スレ立てるまでもない質問はここで 163匹目 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
724
(2): (オイコラミネオ MM91-4mn0) 2023/02/24(金)11:22 ID:62b5PWzyM(1/7) AAS
お話中、失礼します。
RDBMS ほどではないにしろ簡単なデータベースを普通のファイルを使って自作する
場合、もし、ディスクに flush されるまえに OS がダウンしてしまった場合に備える
アルゴリズムはどんなものが考えられるでしょうか?
ファイルは、上書きしなければ、ストレージが壊れるまではそのまま壊れないと仮定してよいと
思うのですが、問題は追加したり、途中を部分的に変更するために、同じファイルに書き込む
時だと思うんです。
726
(1): (オイコラミネオ MM91-4mn0) 2023/02/24(金)11:28 ID:62b5PWzyM(2/7) AAS
>>724
[案1]
・mkdir "X" 法で排他制御を開始する。他のcgiのインスタンスが処理中は待機する。
・今までのデータファイルAには上書きせずに、ファイルAをメモリーに全部
 読み込んでから、一部だけを修正し、新しいファイルBを作成して全部
 書き出してしてしまう。
・ファイルBをfflushして、OSのsystem call で(?) sync して、ストレージに本当に
 書き込まれるまで待つ。
・それが終わったら、ファイルAを削除してからBのファイル名をAに変えてしまう。
・rmdir "X" として、排他制御を終える。
728: (オイコラミネオ MM91-4mn0) 2023/02/24(金)11:31 ID:62b5PWzyM(3/7) AAS
>>725
>その程度のアルゴリズムも思いつかないようなレベルじゃ
>実装なんて到底無理だ。
726 のようなアルゴリズムはどうですか。
効率は悪いと思いますし、一時的にディスク領域が2倍必要になりますが。
730: (オイコラミネオ MM91-4mn0) 2023/02/24(金)11:33 ID:62b5PWzyM(4/7) AAS
>>727
>ファイルAを削除した段階でOSがダウンするとデータが無くなる
次にcgiを起動した時に、ファイルAが無くなっていて、ファイルBだけが
存在する時には、Bのファイル名をAに改名するところから再開すれば
良いのでは有りませんか。
733: (オイコラミネオ MM91-4mn0) 2023/02/24(金)11:44 ID:62b5PWzyM(5/7) AAS
>>732
ファイルのサイズは1MB程度までと考えています。

>>731
複数ファイルの場合、mkdir "X" で排他性世を行なっている間に、
同じことを繰り返せばいいと思います。
735: (オイコラミネオ MM91-4mn0) 2023/02/24(金)11:45 ID:62b5PWzyM(6/7) AAS
>>731
>いくつもある穴の一つを指摘しただけだ
単一ファイルの場合で、サイズが十分小さい場合には、他に穴はないのでは
ないでしょうか。
736: (オイコラミネオ MM91-4mn0) 2023/02/24(金)11:47 ID:62b5PWzyM(7/7) AAS
>>734
renameに関しては、どういう意味か分かりませんが、もし、Aを先に削除したく
ないのであれば、
・AをCに改名後、BをAに改名。
・sync(?)などで、ストレージに本当に書き込まれるまで待機。
・Cを削除。
で良いのではないでしょうか。
ただ、余り意味は無いと思われます。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.054s