• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:[[:t/永続化]] [[:t/DB]]

オブジェクトを以降のリクエストでも、他の利用者にも使えるようにすること。

#contents

***永続化でやること [#j94c78cf]

***永続化での上書きは追加で [#c1313797]
同一キーの書き込みはファイルの追加。ファイル追加ならロック待ちがおきないので効率的。
古いファイルは残す。同じキーに関連付けられるオブジェクトは複数。

上書き時、古いファイルは残す。
ファイル名に時刻でも付ければいい。新しいファイル名として有効ならいい。排他的ロックをかけられるまでは残す。

参照可能なのは最新版。
1つのキーに対して複数のファイルが存在するので、最新版は探して見つける。ファイル名探索。
***古いファイルは消せるときに消す [#aeaf399f]
古いファイル(同一キーでより新しいファイルがあるというファイル)を消すのはいつでもいい。消せるときに。
つまり最新版でなくて排他的ロックを取得できたファイルは消していい。


***排他的ロック/共有ロック [#j61c0374]
排他的ロックを使うのはファイルを作るときと消すときだけ。
変更/上書きはしないのでN/A。
共有ロックを使うのはファイルを参照するとき。

ファイルを消すときだけブロック(ロック待ち)が発生しうる。

ロックは[[ロックシステム]]と競合してはいけない。
→ディレクトリ分け。併用はしない。永続化可能オブジェクトとその他のファイルの格納場所を分ける。
→併用するならディレクトリ分け。永続化可能オブジェクトとロックシステムで扱うファイルの格納場所を分ける。
***永続化のキー [#md972074]
Validateで削除か置き換えになる文字がある。
ファイルシステムのパスに使えない文字。

ディレクトリ区切りはそのままディレクトリ区切りになる。
ファイルシステムを直接見たときに分かりやすいように。

 【パスの形式】
 永続化ディレクトリ/クラス名/キー(ディレクトリ区切りがあればそれをディレクトリとして扱う).time.拡張子

Store時、渡されたキーが使えるキーでなければ勝手に変更する。ValidateKeysを使って。
Storeではキーが渡されなくてもいい。勝手に生成する。
戻り値に実際に使ったキーを含める。
***シリアライズ [#de841db8]
Store時、シリアライズ可能なオブジェクトを渡されたらそのシリアライズを実行。不可能ならToString()でもしておく。それも不可能ならエラー。渡すオブジェクトはいずれかができなければならない。
(Stringのシリアライズは不要。Stringのシリアル形式はString)


***永続化クラスでの検索 [#q93c0dda]
検索機能とは別の、低いレベルの話。

RIGHT:[[:t/永続化]] [[:t/LTSV]]


***キューイング [#ud59096e]
永続化を使う側の一つ。
†キューはModelに出すもの
†キューの永続化

RIGHT:[[:t/キュー]] [[:t/開発]]