Download presentation
Presentation is loading. Please wait.
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
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.