rdmmsとは、Remote Dynamic Module Manager Systemの略。
将来に名前を変更する可能性がある。
目的
- リモートから、任意の言語のモジュールファイル(テキスト形式)を動的に保存/更新/取得を行えるサーバを構築する。
- 当システムの構築を通じて、zeromqの扱いに慣れる。
要求される仕様(概要)
- サーバである(仮)
- REQ/RESモデルで通信を行う(仮)
- zeromqで利用できる、他のモデルの方が便利そうなら、そっちにするかも
- 実際に保存されるデータは、以下となる
- モジュールファイル(テキスト形式)そのもの
- モジュールファイルが設置されるpath情報
- その他のメタ情報
- 前述のデータに対するキーをどう表現するかは、未定
- 実際のデータをストレージするバックエンドは、何らかのリビジョン管理システムである事が望ましい(が、別に普通のdbm等でもよい)
- (前述のバックエンド選択にもよるが)基本的には、保存されたモジュールはpersistentに保存される事になる。
- モジュールのバージョンアップは、path違いで表現する(仮)
- つまり、pathにバージョン番号等の情報を含めるという事。これで本当に完全にうまい事いけるかちょっと微妙なので、仮としておく
- 勿論、これでは色々と不便だが、この不便さは、モジュールをuseする部分をマクロでラッピングする事で対応するものとする
- 実際にこれを使うcgiを書く事
- 名前は sexpit.cgi (仮)。もう少しいい名前を思い付いたら変更する。
- プラグイン読み込みモジュールも一緒に書く事になる
確定仕様
未確定仕様
- keyをどうするか
- インターフェース的には、path情報とrevision(もしくはtag/branch名)情報が必要
- どのように検索されるかで、実キーの選定、および、検索用テーブルを別途用意すべきかを決める
- valueをどうするか
- メタ情報を保持する必要がある気がするので、dps同様、rfc822類似書式、もしくはmapがよさそう
- どっちにするの?
- 「本体」は一つだけ、かつ必須なので(本当?)、その点ではrfc822類似書式がよい
- もし本体を使わない場合でも、本体は空文字列にしておけばいいだけなので、「必須」としておいて問題ない
- read一発で読める/charsetを気にしなくていい点ではmapの方がよい
- 両方のいいとこどりをした書式を用意する?
- この場合、本体データがバイナリの時がネックになる。とりあえず、今回の用途では「常にutf8文字列」という前提にしてしまって問題なさそうだが、汎用にはしずらい気が
- 専用の書式は、「car部が本体データ(文字列)、cdr部がメタ情報(alistかkeywords)」とする
- 実ストレージには、これをutf8文字列としてwriteする
- メタ情報をalistかkeywordsのどちらにするかは、以下の違いを考慮して、おそらくalistにする
- 人間が読み書きするコストが安いのは、keywords
- メタ情報の各エントリを分割する効率が良いのは、alist(これがもしkeywordsだった場合、別途consするコストが発生する。が、大したコストではないと見てもよい)
- 今回は、人間が直に読み書きする事はなさそうなので、alistを採用
- メタ情報のkey/valについては、rfc822書式に相互変換が可能なように、以下を制約とする
- keyはrfc822を意識した名前付けを行う事
- valは文字列以外(S式)でもよいものとするが、「write/read invarianceの保たれない値を含んではならない」という制約がある。
- 要は、これをrfc822書式に変換する際にはwrite/ssで文字列化がおこなわれ、rfc822書式から変換される場合はreadによる読み込みが行われる、という事。
実装
あとで
リポジトリ
最終更新 : 2011/02/28 03:45:26 JST