ページを以降のリクエストや他の利用者からも使えるようにすること。
永続化するものはページくらいしかない。
永続化は後付けで †
:i/永続化での上書きは追加で †
:i/永続化での削除も追加で †
:i/永続化でのキー変更も追加で †
永続化キーの変更は編集であり削除でもある。
これもロック不要。負担にならない。
データベースとの関連付け †
:i/古いファイルは消せるときに消す †
:i/排他的ロック/共有ロック †
:i/ロックシステム †
決まった順序でロック。予約制なので必要なロックを事前に決めなければならない。
永続化クラスも同じファイルを読み書きするならこのルールを守らなければならないが、ロック対象と永続化クラスで扱うファイルは区別して対処。例えばディレクトリを分けて。同じファイルを両者で使うことはしない。
:i/永続化のキー †
:i/永続化クラスでの検索 †
検索機能とは別の、低いレベルの話。
効率化 †
キューイング †
読み書きジョブをキュー入れ/キュー出し。
永続化を使う側の一つ。永続化からすると使われ方の例。
永続化システムはロックとパフォーマンス低下を防ぐ方法。
※通常の編集1回で1回のロックとファイル削除が必要。でもすぐにでなくていい。やることの分散。編集時のロックをいつでもいいようにしてパフォーマンス低下防止。しかもロックは非ブロックですぐタイムアウトにしていい。待たない。
:i/キューはModelに出すもの †
:i/キューの永続化 †
全体複製をしたくないなら †
ちょっと更新するだけで全体を複製することになる。そこで時間がかかるなら逆効果。
全複製は1ファイルで1エントリー全体をまかなえるということ。複数ファイルで1エントリーだったら?
→関連ファイルを全て読み込んでマージすればいい。この場合エントリーに追記するだけなら複製不要。参照は新しい順に、エントリー1つ分が揃うまで、ファイル参照をして、得たデータを全てマージ。
型によってはマージ不可能。その場合は全複製を要する。条件が多すぎて使いにくい。
それよりも1エントリーをDictionaryの1エントリーに見立てて、フォルダーをDictionaryにすればいい。
フォルダーをネストすればDictionaryのネストのようになる。キー→キー→値といったアクセスが可能に。
:/内部名と外部名 †
これをどう記録して参照を速くするか。
†:i/ページ名インデックス
フォルダーをDictionaryとして使う方法で。
問題 †
:Done/参照したときすでに古いかも †
方法は…
衝突判定のあと何もしないかも知れないので、ファイルを作ったりはしないで。
それでいて他のプロセスと共有できる方法は…
既存ファイルのロック。
そのファイルとは…
ロック用ファイル。同一キーのtimeなし。キーごとに常設だけど無くてもいい。初回使用時に作る。存在確認が面倒ならキー作成時に一緒に作っておく。キー削除時、一緒に消す。
ファイル間のバージョンがずれる †
ファイル間でバージョンのずれがあり得るので、複数ファイルを同時に更新しても読んだときにいずれかが古いままの可能性がある。
依存関係のあるデータは1つのエントリーにする。
待たされるのを覚悟で最新版を要求することはできる。