blog.fuktommy.com

メモリ上のオブジェクトとファイルの同期、あと排他制御

ファイルが壊れる問題について をいじってます。

もともと朔でファイル(状態ファイル)を扱うときってこんな感じだったんですよ。

  1. ファイル(大量の行からなる)を読み込んでくる
  2. 全ての行について処理をする
  3. 更新したらファイルに保存

で、これを高速化するためにこんな風にしてました。

  1. メモリ上になければファイルを読み込んできて、メモリ上にもコピー
  2. 全ての行について処理をする
  3. 更新したらメモリとファイルに保存

これで真面目に排他制御しようとすると、こうなるんですね。

  1. ロック
  2. メモリ上になければファイルを読み込んできて、メモリ上にもコピー
  3. 全ての行について処理をする
  4. 更新したらメモリとファイルに保存
  5. ロック解放

これって処理の時間を、まんまロックしておかなければいけなくて、 うっかりするとデッドロックにもなりそうです。 そこで今回の変更ではこうなる予定です。

  1. 読み込み
    1. メモリ上にあればそれを返す
    2. ロック
    3. ファイルを読み込んできて、メモリ上にもコピー
    4. ロック解放
  2. 各行について次の処理
    1. 何か処理をする
    2. ロック
    3. その行をメモリ上に保存
    4. ロック解放
  3. 保存
    1. ロック
    2. 全ての行をファイルに保存
    3. ロック解放

感覚的にはSQLサーバ等のデータベースに近いでしょうか。 ループの中でupdateなりremoveなりを発行しているみたいな。

Copyright© 1998-2014 Fuktommy. All Rights Reserved.
webmaster@fuktommy.com (Legal Notices)