[過去ログ] スレ立てるまでもない質問はここで 163匹目 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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" として、排他制御を終える。
727
(1): (ワッチョイ b5da-BTrK) 2023/02/24(金)11:30 ID:/JDec9CR0(2/8) AAS
> ・それが終わったら、ファイルAを削除してからBのファイル名をAに変えてしまう。

はい、ここでアウト
ファイルAを削除した段階でOSがダウンするとデータが無くなる
また、複数のファイルに書き込む場合が考慮されていない

な?
728: (オイコラミネオ MM91-4mn0) 2023/02/24(金)11:31 ID:62b5PWzyM(3/7) AAS
>>725
>その程度のアルゴリズムも思いつかないようなレベルじゃ
>実装なんて到底無理だ。
726 のようなアルゴリズムはどうですか。
効率は悪いと思いますし、一時的にディスク領域が2倍必要になりますが。
729: (ワッチョイ b5da-BTrK) 2023/02/24(金)11:32 ID:/JDec9CR0(3/8) AAS
信頼性重視なデータベースソフトが
どれもジャーナルという仕組み(アルゴリズムではない)を
採用している理由を考えろ
その程度の適当な方法じゃ実装できねぇんだよ
730: (オイコラミネオ MM91-4mn0) 2023/02/24(金)11:33 ID:62b5PWzyM(4/7) AAS
>>727
>ファイルAを削除した段階でOSがダウンするとデータが無くなる
次にcgiを起動した時に、ファイルAが無くなっていて、ファイルBだけが
存在する時には、Bのファイル名をAに改名するところから再開すれば
良いのでは有りませんか。
731
(2): (ワッチョイ b5da-BTrK) 2023/02/24(金)11:37 ID:/JDec9CR0(4/8) AAS
いくつもある穴の一つを指摘しただけだ
複数のファイルに書き込むときはどうする?
732
(1): (ワッチョイ b5da-BTrK) 2023/02/24(金)11:39 ID:/JDec9CR0(5/8) AAS
だいたいCGIっていうのが終わってる
ファイルサイズが100GBあったら
ロック時間は100GBのファイルコピーの時間分になる
多数のアクセスでスケールしない
733: (オイコラミネオ MM91-4mn0) 2023/02/24(金)11:44 ID:62b5PWzyM(5/7) AAS
>>732
ファイルのサイズは1MB程度までと考えています。

>>731
複数ファイルの場合、mkdir "X" で排他性世を行なっている間に、
同じことを繰り返せばいいと思います。
734
(1): (ワッチョイ e310-mLMb) 2023/02/24(金)11:44 ID:2YdGe9kz0(1/2) AAS
そんなやり方推奨せんけど
rename(2)の上書きはアトミックにできるから先に消すのは悪手
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を削除。
で良いのではないでしょうか。
ただ、余り意味は無いと思われます。
737
(2): (ワッチョイ a301-YJ5W) 2023/02/24(金)13:37 ID:igKefKVx0(1/2) AAS
>>726
解決策を考える前に要件を固めたほうがいいよ

急にcgiや排他制御が出てくるけど
同時実行を含めてどういう粒度でどういう操作をサポートする必要があるのかによって
更新方法も排他制御の方法も考え方が変わってくる

flush前のOSダウンに備えるだけなら更新内容が復元できるだけの情報を
ジャーナルとして書き出しflush完了を確認してからファイルを更新すればいい
比較的新しめのファイルシステムはそういう機能を持ってる
738
(1): (アウアウウー Sa49-ebfy) 2023/02/24(金)14:13 ID:p/kCAwBGa(1) AAS
なんでお前ら車輪を発明しようとしてんの?
あるぞそれ
739
(1): (オイコラミネオ MM91-4mn0) 2023/02/24(金)14:16 ID:OSyVRWv/M(1) AAS
>>737
>flush前のOSダウンに備えるだけなら更新内容が復元できるだけの情報を
>ジャーナルとして書き出しflush完了を確認してからファイルを更新すればいい
「更新内容が復元できるだけの情報」
として、今までのデータファイルAをまるまるcopyしておいてとっておく方法が考えられます。
copyは効率が悪いので、効率を良くしたのがそれが今回提示しました rename 方です。
ファイルAが大きくなった場合サイズが大きくなる難点がありますが、
サイズが小さいならば最も単純な方法ではないかと考えております。
逆に、ファイルAが大きい場合、「復元できるだけの情報」を小さくする、ということに過ぎ
ないと思われます。
その場合、ファイルAの「部分書き換え」が安全に行なえて、書き換えなかった部分は、
今までのデータがそのまま絶対に安全に残っていることが保証できないといけないと
思われます。
その場合、ファイル単位ではなく「クラスタ単位のアクセス」が必要になるかも知れませんが、
いかが思われますか?
740: (オイコラミネオ MM91-4mn0) 2023/02/24(金)14:51 ID:iKSzXQzLM(1/5) AAS
それから、mkdir "X" 法で排他制御する場合、rmdir "X" で排他制御を終えるまでに
電源断が起きたとき、次に cgi が起動した場合にどう対処するか問題がありますね。
例えば、10分後に別インスタンスの cgi が起動した時にフォルダ "X" が残っていた
場合、恐らく直前の cgi の実行中にトラブルが発生した可能性が高くなります。
その場合、cgiのプロセスを見つけ出して存在していれば kill してから、
仕切り直すことで対処できるかも知れませんが。
741
(4): (オイコラミネオ MM91-4mn0) 2023/02/24(金)15:24 ID:iKSzXQzLM(2/5) AAS
>>738
MySQLもPostgreSQLも仕組みがよく分からないので、電源断が起きたとき
どこのどういうファイルがどのような状態になっているかが分からないんです。
それと、テーブル1つに対して3つのファイルが作られると聞きました。
レンタルサーバーでは容量が100GBでも、ファイルの個数が1000個などの上限
が有る場合が多いですし、そもそも、MySQLなどのテーブル数に上限があったり
して難しいんです。

>>737
安いレンタルサーバーでは、Ruby On Railsのような常駐サーバーは使えないので、
cgiしか選択肢が無いと思います。
742: (ワッチョイ a301-YJ5W) 2023/02/24(金)15:29 ID:igKefKVx0(2/2) AAS
>>739
要件を固める前に思いつきであれこれ実装方法を考えても時間の無駄だよ

それと排他制御という言葉で思考停止してるから
どういう制御が必要なのかもう少し考えたほうがいいよ
RDBを知ってるならmkdirでの排他制御だけじゃ穴だらけなわかるよね
743: (スップ Sd03-O7MM) 2023/02/24(金)16:08 ID:CdQVBJsid(1/3) AAS
>>741
vpsにすれば?
744
(1): (ワッチョイ b5da-BTrK) 2023/02/24(金)16:40 ID:/JDec9CR0(6/8) AAS
>>741
MySQLもPostgreSQLも単純な仕組みでは無理だから
複雑な仕組みでトランザクションを実現してる
SQLiteは堅牢なデータベースでファイルの代わりに使える
排他制御も組み込まれてるからmkdirみたいなアホな仕組みを使わなくてすむ
745
(1): (ワッチョイ b5da-BTrK) 2023/02/24(金)16:41 ID:/JDec9CR0(7/8) AAS
>>741
> 安いレンタルサーバーでは、
なら安いVPS借りればいいだろ月500年で借りられる
自分の技術力のなさを運営費が高いと嘘をつくのはやめなされ
746
(1): (オイコラミネオ MM91-4mn0) 2023/02/24(金)16:42 ID:iKSzXQzLM(3/5) AAS
>>744
SQLiteで電源断の時に何が起きるかについての詳細資料は有りませんか。
747: (オイコラミネオ MM91-4mn0) 2023/02/24(金)16:43 ID:iKSzXQzLM(4/5) AAS
>>745
年間2000円(月間150円ほど)のサーバーを借りようかと思っていますが。
748
(1): (ワッチョイ e310-mLMb) 2023/02/24(金)16:54 ID:2YdGe9kz0(2/2) AAS
>>746
当然公式にあるとなぜ至らんのか
外部リンク[html]:sqlite.org
外部リンク:sqlite.org
749: (スップ Sd03-O7MM) 2023/02/24(金)16:59 ID:CdQVBJsid(2/3) AAS
能力のない貧乏人が一番始末に負えない
750: (ワッチョイ cbcf-h1Ka) 2023/02/24(金)17:01 ID:Wz7cqaYJ0(1) AAS
データベースの話じゃなくて耐障害とかバックアップの話に見えるが笑
751: (アウアウウー Sa49-ebfy) 2023/02/24(金)17:21 ID:mwMEBPdga(1/2) AAS
>>741
電源断になってもデータが壊れないような仕組みがあるから素直にデータベース使え
752
(1): (オイコラミネオ MM91-4mn0) 2023/02/24(金)17:32 ID:iKSzXQzLM(5/5) AAS
>>748
電源断になったときにどのような動作になるか分かり易く書かれたところは有りません
か。
753: (ワンミングク MMa3-IvAx) 2023/02/24(金)17:42 ID:zVLb+oi5M(1) AAS
春休みスゲー
次から次へと馬鹿が出てくる
754: (ワッチョイ b5da-BTrK) 2023/02/24(金)18:03 ID:/JDec9CR0(8/8) AAS
>>752
ここに全部書いてある
外部リンク[html]:sqlite.org

あとはお前がそれを作るか
SQLiteを使うかだ

お前の目的は何?お前が本当に作りたいものだよ。
データベース相当の堅牢性を自作することが目的なのか?
755: (アウアウウー Sa49-ebfy) 2023/02/24(金)18:25 ID:mwMEBPdga(2/2) AAS
情弱の考えることはよくわからん
自分の作るものの方が一流のプロが作って詳細なテストをくぐり抜けて広く使われて多くの人の手で検証されてるものより信頼性が高いという謎の自信を持ってるくせに5chをそれより信頼してるんだから
1-
あと 247 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.045s