#?SuikaWiki/0.9 - Subject: 物理層 module 総合スレ - Priority: low - Status: open - Category: WikiDatabase - Creation-Date: 2003-06-05T08:11:45+00:00 [1] [[WikiDatabase]] 物理層の実装の問題について。 [PRE[ WikiDatabase のモデル (WikiDatabase への access) ↓↑ ↓↑ +------------+ ↓↑ | 形式差吸収 | ↓↑ | モジュール | ↓↑ +------------+ ↓↑ ↓↑WikiDatabase 界面↓↑ +--------+------------------------+ | 抽象層 | WikiPage, WikiNamespace| +--(仮称)+------------------------+ ↓↑ 物理層界面 +--------+------------------------+ | 物理層 | 実際のデータ | | | (ディスク上のファイル, | | | 遠隔データ, etc.) | +--------+------------------------+ ]PRE] 形式差吸収モジュールについては [[..//6]] 参照。 [2] 物理層実装についての課題: - 抽象層 (仮称) との分離 -- 現状では抽象層 (仮称) と物理層の区別がない。 --- 柔軟な物理データ源の選択のために一々全体のモジュールを書かないといけない (コピペや継承も可能ではあるが)。 ---- 例えば名前空間階層の一部を他のディスクやインターネットの任意の資源にするとか。 --- WikiDatabase を扱う Wiki のあらゆる部分で、使用している Database の性質を知らないといけない。 ---- 例えばメタ情報用補助データベースの有無 ---- [CODE(perl)[[[exist]]]] の使用の可否 --- Wiki level でのアクセス権管理の実装が困難 ---- すべての WikiDatabase 実装を書き直して実装するか、 すべての WikiDatabase への access 側を書き直さないといけない。 ---- Wiki level での管理は諦めて database 側に完全にゆだねる手もあるが・・・。それにしてもそのための界面が結局必要。 - メタ情報用補助データベースの実装法 -- メタ情報: 更新日時, 凍結状態, [[Referer]] 記録など -- [[YukiWiki]] 式実装 (SuikaWiki では既に破棄 --- メタ情報用の別の database を用意 --- 情報内容の非対等性 (メタ情報は本情報より少量とか) を無視 --- 一つの情報についての database としての統一性に欠く [WEAK[(だって実際複数の database。)]] -- 現 SuikaWiki 標準実装 ([CODE(perl)[Yuki::YukiWikiDBMeta]]) --- メタ情報データベースは本データベースの附属機能 --- メタ情報データベースは本データベースに対して簡易的構造 --- 異なるデータベースを無理矢理結合した形で気持ちが悪い ---- より柔軟なデータの扱いのために、メタ情報データベースをもっと別の形式にする、のようなことが不可能 (書き直す必要) -- 新しい実装案 --- 基本に立ち返り、一モジュール、一データベース (形式・データ源)。 --- メタ情報のための複数データベース利用は抽象層で処理 ---- 抽象層から見るとき、メタ情報・本情報の区別はなくし、それぞれデータベースの項目 (属性) となる。 ----(例) 記録1 ----- entity : *本文* : file:///wiki/database/entity/記録1 ----- last-modified : 2003-04-05 : mtime (file:///wiki/database/entity/記録1) ----- frozen : false : (file:///wiki/database/frozen#記録1) ---- この例では、項目 [CODE[entity]] はファイル・システムのファイルに記録が写像される database, [CODE[last-modified]] は [CODE[entity]] の記録ファイルのファイル・システム上の日付情報の database, [CODE[frozen]] は記録がファイルの一部に記述される database を使い、抽象層が1つの database の記録であるように見せている。 ---- 例えば $abs_db->get_data ('記録1', 'last-modified') で [CODE[last-modified]] のデータを取得できる。 - [3] >>2 でなんかもっともらしい理由 (にしようと画策したらしきもの) を述べてますが、現実的に何が問題なのかというと、 WikiPlugin 云々からデータにアクセスする界面が整備されていない ($main::database で無理矢理参照している) のと、メタ情報と称してでっかなデータが収められつつあるが、このままではファイルがいつかパンクするだろうこと。 - [4] でっかなメタ情報ってのは、具体的には [[Referer]]。今は URI だけ保存して、既に一部 WikiPage では数キロオクテットになってるのに、今後 [[TrackBack]] 的逆リンクが増えると。。。 - [5] それと、 WikiName と結合された外部データ源の利用は plugin でそれぞれ実装するより共通界面が使えたほうがいい。例えば、 ML archive + Wiki という応用を考えると、1つの WikiPage で従来の Wiki database と ML archive を同時に扱う必要が出てくる。