ロード トップ 参照元 逆検索 検索 ヘルプ

[logo] 組み込みTiki/キャッシュサーバ


SuzTiki:組み込みTiki

キャッシュサーバ の実装を考える。

ファイル自体は、ファイルシステムとは別のところにつくる。

メタデータは、DBM を使う。gdbm を使いたいところかも知れないのだが ... ジャーナリングファイルシステムの対応とか.. ちょっといじりたいので 単純な ndbm にしておく。


基本的なアイディアは、


キャッシュサーバ の データファイル形式

どういう風にデータをため込むかについては、どんどん append していく つもり。

    ヘッダ1
    データ1
    ヘッダ2
    データ2

という形式。ヘッダは、http のヘッダとおなじ形式 ( RFC822メールヘッダとおなじ ともいうらしい)

ヘッダの中には、

がはいっていないといけない。

それぞれについて の規定を検討。

データの名前:

     URL: 名前
     URI: 名前

キャッシュデータは、URL: しか含まないが、別のことにもフォーマットを
使いたいので、URI: というのも ありとする。( この2つは 排他的に使う )

名前は、URL エンコーディング?されたもの。

データのサイズ:

    Content-Length: バイト数

データのタイプ:

    Content-Type: 
    Content-Encoding:

    とってきたときのものを格納

データのダイジェスト:

    Content-MD5: md5-digest

これは、データが壊れていないかチェックするために必要。
( append している最中に システムが落ちた場合とか、コンパクションしている
最中にシステムが落ちた場合とか ...の対処用 )

データの日付

    Last-Modified: Fri, 15 Feb 2002 08:00:12 GMT

とか。

キャッシュコントロールの情報

    Expires:
    Cache-Control: 

    とってきたときのものを格納

   その他:

     とってきたときのものを格納する。

参考: http://www.studyinghttp.net/rfc_ja/2616/rfc2616_ja.html


以上のフォーマット は、キャッシュ のデータだけではなく。他にも使おうと 考えている。

要するに通信用のデータにも使う。

通信に使った場合、データのダイジェスト Content-MD5 の値は 意味が変わる 場合がある。

パスワードがどういうものかは、まだ規定しないが、 import では、MD5 が一致しないかぎり システムは データを受け取らない ことにする。

  • URI が指定された場合 キャッシュ以外の システム内のデータを意味 するが、次の 3 通りの内容がある。

    ファイルシステム内の具体的なファイル名はどうなるか、上記のどれに 相当するかについては、パス名に ある変換をかけたもので決まる。

    その変換が具体的にどういうものかは、これから考える。


    上記フォーマットで in/out する。

    というのをまず作る予定。テストに必要なので。

    とりあえず、ruby/nar.rb なんてのを考えてみました。

    インターフェイスは変わるかと思いますが、

    Nar::import_file1(head,in_io,out_io,passwd)

    Nar::export_file1(path,out_io,name_conv,passwd)

    インターフェイスはともかく、こういうのを核 にして考えていくつもり。


    (最終更新 Thu Mar 30 19:06:34 2006)