忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/11/23 (Sat) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2007/06/17 (Sun) / 編集
学校のUNIX実験という講義でOracle社のBerkleyDBを用いたCMSの開発を行っております、それに関していいこと思いついたので書いておく

そもそも実験のテーマは「Oracleデータベースを用いたwwwCMSの開発」、しかしOracleは有料!しかもめちゃくちゃ高い!!というわけでOracle社が提供している無料版のデータベースBerkleyDBを使うことにしたわけですが……

BerkleyDBは(key,value)という形でしか登録できないという罠が!サソリも真っ青!!
データベースというからには普通(key,value1,value2,value3...)だと思っていた俺ら大慌て、CMSというからにはファイル情報を管理しなければならず、ファイル情報といえばperlで普通に取得できる属性だけでも14種類はある!
はわわわ さっぱりピンチだよ〜

というわけで大慌てで思いつきの解決策1
タップルを(属性名(pathとか)_キー番号,内容(絶対パスとか))にした、これでいちおうすべてのデータを登録することに成功!だがしか〜し!!この方法だとレコード数が大変なことになる...具体的には「ファイル数x属性の種類」くらい
もちろん検索とソーティングにえらい時間かかるわけで、データ件数が増えると致命的な処理時間がかかる!

というわけで思いつきの解決策2
だったら最初からファイル名とかでソートされたサブデータベースを作っとけばいいんじゃね?
BerkleyDBにはデータの登録時に自動的にkeyを辞書順にソートするという素敵な昨日がある、つまり(ファイル名,メインデータベースでのキー番号)という感じのサブデータベースを作っとけば、そのサブデータベースから得られたキー番号を使ってメインデータベースの内容をファイル名順に出力できる!!
というわけで勢い込んで作ってみたらさらなる罠が!パス名とかは必ず重複の無い一意なものになるがファイル名は同じ物がいくつもある可能性がある、つまりkeyの重複が発生してしまう!DUPとかいうオプションを付けてkeyの重複を許可してみたがなんかへんだ……
[a.txt,1][b.txt,54][a.txt,74]を登録したら[a.txt,1][a.txt,74][b.txt,54]になって欲しい(てかなるはず)のだが[a.txt,1][a.txt,1][b.txt,54]になる!だめじゃん!!

というわけで解決策3←今思いついた
サブデータベースは(ファイル名_キー番号,キー番号)にしよう!キー番号に重複はないからソートできるじゃん!!

俺って頭イイー!!!と一人で調子にのってるゆ〜すけでした
のこる問題は公開用の環境の構築と結果の出力(データベース自体とは関係なくてperlのprint文)に時間がかかること、あとレポート
でもこれならなんとか間に合う!うわ〜〜〜い さっぱりうれしいよ!

拍手[0回]

PR
忍者ブログ [PR]