Presentation is loading. Please wait.

Presentation is loading. Please wait.

アプリケーション依存の先読みが可能なO/Rマッピングツール

Similar presentations


Presentation on theme: "アプリケーション依存の先読みが可能なO/Rマッピングツール"— Presentation transcript:

1 アプリケーション依存の先読みが可能なO/Rマッピングツール
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 01_0017_3 青木康博

2 (リレーショナルテーブルをフィールドに保持)
O/Rマッピングフレームワーク オブジェクト指向プログラムとRDBのインピーダンスミスマッチを解消 マッピング作業を自動化 DBデータの更新・取得 トランザクション、例外処理、DB接続 SQLは不要!! EJB CMP, JDO, Hibernate, Cayenne, etc... タマ タロウ インピーダンス・ミスマッチ オブジェクト (リレーショナルテーブルをフィールドに保持)    テーブル

3 既存O/Rマッピングは非効率 既存フレームワークはマッピングが固定 固定的なマッピングの問題 文脈に応じて的確に先読みしたい
すべてのリレーショナルテーブルを一括取得=先読み 手動で一部を遅延可能(XML記述で指定) 固定的なマッピングの問題 無駄な先読みデータが計算機資源を浪費 遅延を濫用するとDBアクセスが頻発 効率ならSQLを駆使して手動で直書き? コード散在、保守性、拡張性の低下 トレードオフ 文脈に応じて的確に先読みしたい

4 本研究で開発:文脈に応じた 先読みが可能なフレームワーク
本研究で開発:文脈に応じた  先読みが可能なフレームワーク 開発したフレームワーク O/Rマッピングはすべてオンデマンド テーブルだけでなくプロパティも 既存のCayenneフレームワークを改造 文脈に応じて細やかに部分的先読み AspectJのライブラリを開発 XPathに基づき先読みのタイミングとデータを直感的に指定 コード合成  (weave) 先読み記述 (AspectJプログラム) アプリケーション マッピング フレームワーク DB オブジェクト 透過的な永続化 テーブル

5 Cayenneの改造 先読み機能に適したフレームワーク 細粒度なマッピング(プロパティ単位) データへのアクセス経路を記録 DB
リレーショナルテーブルはそのプライマリキーのみ取得 別々に取得したプロパティからオブジェクトを構築 データへのアクセス経路を記録 先読みの指定に必要 マッピングに必要 DB paperid title psfile Paper ・ paperid(PK) ・ title ・ psfile paper

6 先読みを支援するAspectJライブラリ
モジュール的に独立 文脈に基づいてプログラマブルに記述可能 DBアクセスに基づいた先読みの指定 XPathでデータを指定できるライブラリ 先読みタイミング 先読みデータ 細やかな先読みでも煩雑なSQLは不要

7 先読みアスペクトの記述例 マッピングのタイミングの指定 取得データの指定 XPathによる先読みのタイミングの指定
public aspect PolicyAspect { after(Paper p) : load() && prefetch(p, } マッピングのタイミングの指定 取得データの指定 XPathによる先読みのタイミングの指定 XPathによる取得データの指定 ⇒ 直感的かつ容易に指定が可能 Proceeding Paper ・psfile ・title 先読みの実行 Paper ・psfile ・title Paper ・psfile ・title

8 “ and @paperid < ” + (min + 100) + “]/@*");
時間・DBアクセス ・メモリ量の比較実験 一部の リレーション 一部の行 一部の列 実行時間(s) メモリ使用量(MB) ・DBサーバ: Linux 2.6.7, P4 Xeon 3.06G, 2GB, PostgreSQL 7.4.2 ・クライアント: WinXP, P4 2.8G, 1GB ・LAN:1000BaseTX メモリを浪費 テーブル 単位 プロパティ 単位 本フレーム ワーク テーブル 単位 本フレーム ワーク プロパティ 単位 DBアクセス回数 after(Paper paper) : load() && { int min = 0; while(min <= min += 100; prefetch(paper, >= " + min + “ < ” + (min + 100) + after(Paper paper) : load() && { int i = getInt(“../authorid”); if(i == id) prefetch(paper, else prefetch(paper, id = i; } after(Paper paper) : load() && this(paper) { self::psfile]"); } テーブル 単位 DBアクセスが頻発 1 1 100 文脈に応じた適切な先読み => 実行時間・メモリ量の効率化 プロパティ 単位 2,000 1,500 564 本フレーム ワーク 3 11 174

9 関連技術 CMP Entity Bean Hibernate EJBの機能の一部 EJBコンテナがSQLを自動管理
柔軟性の高いマッピングをサポート HQLによるアクセスが可能 アプリケーションの文脈依存の先読みをサポートしていない

10 まとめと今後の課題 アプリケーション依存の先読みが可能なO/Rマッピングフレームワーク 今後の課題 先読み記述をアスペクトとして記述
文脈に応じた細かな先読みが可能 簡単な実験によって有効性を確認 今後の課題 現実的なアプリケーションでの実験 言語拡張の実装 より細かなタイミングの指定 アプリケーション単位でのキャッシュのポリシーの指定

11 RDBアクセスに基づいた先読み 先読み 先読み journal Journal paper Proceeding proceeding
getPapers() Proceeding proceeding Paper getMembers() getAuthor() Person 先読み Person


Download ppt "アプリケーション依存の先読みが可能なO/Rマッピングツール"

Similar presentations


Ads by Google