アプリケーション依存の先読み が可能なO/Rマッピングツール 理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 01_0017_3 青木康博 1 O/Rマッピングフレームワーク オブジェクト指向プログラムとRDBのイン ピーダンスミスマッチを解消 マッピング作業を自動化 DBデータの更新・取得 トランザクション、例外処理、DB接続 SQLは不要!! Animal Cat タマ 猫 タロウ 犬 インピーダンス・ミスマッチ Dog オブジェクト (リレーショナルテーブルをフィールドに保持) 2 EJB CMP, JDO, Hibernate, Cayenne, etc... テーブル 既存O/Rマッピングは非効率 既存フレームワークはマッピングが固定 すべてのリレーショナルテーブルを一括取得=先読み 手動で一部を遅延可能(XML記述で指定) 固定的なマッピングの問題 無駄な先読みデータが計算機資源を浪費 遅延を濫用するとDBアクセスが頻発 効率ならSQLを駆使して手動で直書き? 3 コード散在、保守性、拡張性の低下 文脈に応じて的確に先読みしたい トレードオフ 本研究で開発:文脈に応じた 先読みが可能なフレームワーク 開発したフレームワーク O/Rマッピングはすべてオンデマンド テーブルだけでなくプロパティも 既存のCayenneフレームワークを改造 文脈に応じて細やかに部分的先読み AspectJのライブラリを開発 XPathに基づき先読みのタイミングとデータを直感的に指定 コード合成 (weave) アプリケーション マッピング フレームワーク 4 オブジェクト 先読み記述 (AspectJプログラム) DB 透過的な永続化 テーブル Cayenneの改造 先読み機能に適したフレームワーク 細粒度なマッピング(プロパティ単位) リレーショナルテーブルはそのプライマリキーのみ取得 別々に取得したプロパティからオブジェクトを構築 データへのアクセス経路を記録 先読みの指定に必要 マッピングに必要 Paper 5 ・ paperid(PK) ・ title ・ psfile DB paperid title psfile paper 先読みを支援するAspectJライ ブラリ AspectJライブラリを利用して先読み記述 モジュール的に独立 文脈に基づいてプログラマブルに記述可能 DBアクセスに基づいた先読みの指定 XPathでデータを指定できるライブラリ 先読みタイミング 先読みデータ 細やかな先読みでも煩雑なSQLは不要 6 先読みアスペクトの記述例 public aspect PolicyAspect { after(Paper p) : マッピングのタイミングの指定 load() && this(p)[//Proceeidng/Paper/@*]{ prefetch(p, “../Paper/@psfile”); } 取得データの指定 } •XPathによる先読みのタイミングの指定 •XPathによる取得データの指定 ⇒ 直感的かつ容易に指定が可能 7 Proceeding 先読みの実行 Paper Paper Paper ・psfile ・title ・psfile ・title ・psfile ・title 一部の 一部の行 一部の列 リレーション 15 時間・DBアクセス ・メモリ量の比較実験 実行時間(s) メモリ使用量(MB) ・DBサーバ: Linux 2.6.7, P4 Xeon 3.06G, 2GB, PostgreSQL 7.4.2 ・クライアント: WinXP, P4 2.8G, 1GB ・LAN:1000BaseTX 10 50 メモリを浪費 5 0 テーブル 単位 プロパティ 本フレーム 単位 ワーク 0 テーブル 単位 プロパティ 本フレーム ワーク 単位 DBアクセス回数 after(Paper after(Paperpaper) paper):: : after(Paper paper) テーブル load() && load() && this(paper)[//Author/Paper/@*] { 1 1 100 load() && DBアクセスが頻発 文脈に応じた適切な先読み 単位 this(paper)[//Paper/@*] int i = this(paper) getInt(“../authorid”); [//Paper/@*] {{ プロパティ => 実行時間・メモリ量の効率化 int min = 0;prefetch(paper, if(i == 1,500 id) “../Paper/@*"); 2,000 564 prefetch(paper,“//Paper/@*[self::title and self::psfile]"); 単位 while(min + 100 <= getInt(“../@paperid) min += 100; else prefetch(paper, “./@*"); } 本フレーム "//Paper[@paperid >= " + min + id3= i; 11 174 8 ワーク prefetch(paper, “ and @paperid < ” + (min + 100) + “]/@*"); } 関連技術 CMP Entity Bean Hibernate 9 EJBの機能の一部 EJBコンテナがSQLを自動管理 SQLの発行のタイミングや先読みなどの指 定が出来ない 柔軟性の高いマッピングをサポート HQLによるアクセスが可能 アプリケーションの文脈依存の先読みをサ ポートしていない まとめと今後の課題 アプリケーション依存の先読みが可能なO/Rマッ ピングフレームワーク 今後の課題 10 先読み記述をアスペクトとして記述 文脈に応じた細かな先読みが可能 簡単な実験によって有効性を確認 現実的なアプリケーションでの実験 言語拡張の実装 より細かなタイミングの指定 アプリケーション単位でのキャッシュのポリシーの指定 RDBアクセスに基づいた先読み journal Journal paper getPapers() 先読み Proceeding proceeding Paper getAuthor() Person 11 getMembers() 先読み Person
© Copyright 2024 ExpyDoc