[過去ログ]
スレ立てるまでもない質問はここで 163匹目 (1002レス)
スレ立てるまでもない質問はここで 163匹目 http://mevius.5ch.net/test/read.cgi/tech/1670470167/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
724: デフォルトの名無しさん (オイコラミネオ MM91-4mn0) [sage] 2023/02/24(金) 11:22:48.28 ID:62b5PWzyM お話中、失礼します。 RDBMS ほどではないにしろ簡単なデータベースを普通のファイルを使って自作する 場合、もし、ディスクに flush されるまえに OS がダウンしてしまった場合に備える アルゴリズムはどんなものが考えられるでしょうか? ファイルは、上書きしなければ、ストレージが壊れるまではそのまま壊れないと仮定してよいと 思うのですが、問題は追加したり、途中を部分的に変更するために、同じファイルに書き込む 時だと思うんです。 http://mevius.5ch.net/test/read.cgi/tech/1670470167/724
726: デフォルトの名無しさん (オイコラミネオ MM91-4mn0) [sage] 2023/02/24(金) 11:28:28.20 ID:62b5PWzyM >>724 [案1] ・mkdir "X" 法で排他制御を開始する。他のcgiのインスタンスが処理中は待機する。 ・今までのデータファイルAには上書きせずに、ファイルAをメモリーに全部 読み込んでから、一部だけを修正し、新しいファイルBを作成して全部 書き出してしてしまう。 ・ファイルBをfflushして、OSのsystem call で(?) sync して、ストレージに本当に 書き込まれるまで待つ。 ・それが終わったら、ファイルAを削除してからBのファイル名をAに変えてしまう。 ・rmdir "X" として、排他制御を終える。 http://mevius.5ch.net/test/read.cgi/tech/1670470167/726
728: デフォルトの名無しさん (オイコラミネオ MM91-4mn0) [sage] 2023/02/24(金) 11:31:14.08 ID:62b5PWzyM >>725 >その程度のアルゴリズムも思いつかないようなレベルじゃ >実装なんて到底無理だ。 726 のようなアルゴリズムはどうですか。 効率は悪いと思いますし、一時的にディスク領域が2倍必要になりますが。 http://mevius.5ch.net/test/read.cgi/tech/1670470167/728
730: デフォルトの名無しさん (オイコラミネオ MM91-4mn0) [sage] 2023/02/24(金) 11:33:17.21 ID:62b5PWzyM >>727 >ファイルAを削除した段階でOSがダウンするとデータが無くなる 次にcgiを起動した時に、ファイルAが無くなっていて、ファイルBだけが 存在する時には、Bのファイル名をAに改名するところから再開すれば 良いのでは有りませんか。 http://mevius.5ch.net/test/read.cgi/tech/1670470167/730
733: デフォルトの名無しさん (オイコラミネオ MM91-4mn0) [sage] 2023/02/24(金) 11:44:39.76 ID:62b5PWzyM >>732 ファイルのサイズは1MB程度までと考えています。 >>731 複数ファイルの場合、mkdir "X" で排他性世を行なっている間に、 同じことを繰り返せばいいと思います。 http://mevius.5ch.net/test/read.cgi/tech/1670470167/733
735: デフォルトの名無しさん (オイコラミネオ MM91-4mn0) [sage] 2023/02/24(金) 11:45:39.89 ID:62b5PWzyM >>731 >いくつもある穴の一つを指摘しただけだ 単一ファイルの場合で、サイズが十分小さい場合には、他に穴はないのでは ないでしょうか。 http://mevius.5ch.net/test/read.cgi/tech/1670470167/735
736: デフォルトの名無しさん (オイコラミネオ MM91-4mn0) [sage] 2023/02/24(金) 11:47:55.10 ID:62b5PWzyM >>734 renameに関しては、どういう意味か分かりませんが、もし、Aを先に削除したく ないのであれば、 ・AをCに改名後、BをAに改名。 ・sync(?)などで、ストレージに本当に書き込まれるまで待機。 ・Cを削除。 で良いのではないでしょうか。 ただ、余り意味は無いと思われます。 http://mevius.5ch.net/test/read.cgi/tech/1670470167/736
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.029s