SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Oracle Tips

ODP.NET パフォーマンスチューニング(2)
データの一括コピー・キャッシュ・大容量データ

Oracle Data Provider for .NET(ODP.NET)の活用 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

ラージ・オブジェクトへの高速アクセス

 今までのデータベースは数値、文字情報が主に格納されてきましたが、昨今のデータベースでは画像、動画、音声、PDFなど、さまざまなバイナリデータを格納するケースが増えてきています。これらのバイナリデータをデータベースに格納するメリットとして以下が挙げられます。

  • アプリケーション・ロジックが単純化できる
  • 一つのトランザクションで操作が可能に
  • バックアップなどの運用を一元化できる
非構造化情報をデータベースに格納するメリット
画像

 Oracle Database 8以降では動画ファイルや大容量テキスト文章格納用のデータ型として、LOBデータ型が用意されています。LOBデータ型は、CLOB / BLOBという2つの列が用意されており、CLOBはテキスト情報、BLOBはバイナリ情報を格納するために用いられます。Oracle Database 11gからは、「SecureFiles」という新世代のLOBデータ型が新たに導入されました。SecureFilesは今までのLOBデータ型に比べ以下の利点があります。

表3
機能 説明
キャッシュ機能 キャッシュ機能により従来のLOBと比較してパフォーマンスが向上
圧縮 格納データの圧縮が可能(Advanced Compression Optionが必要)
重複データの除外 同一内容のデータを保存しないことにより保存領域を削減(Advanced Compression Optionが必要)
暗号化 Transparent Data Encryption(TDE)の機能を利用することにより、暗号化を実施

 パフォーマンス面では、キャッシュ機能が有効になっているので、読み込み、書き込みともにアクセス速度が向上します。

 SecureFilesを利用する際に、クライアントからのアクセスインターフェースを変更する必要はありません。今までと同様のアクセスで上記に挙げたメリットを活用することができます。ちなみに、ODP.NET経由でBLOBにアクセスするサンプルプログラムは以下になります。下記サンプルプログラムは同一プログラムでBLOB、SecureFiles両方に対応しています。

Secure Files、BLOBへのアクセスサンプル(VB.NET)
'// Bitmapファイルの読み込み
Dim fs As New System.IO.FileStream("c:\temp\test.bmp", _
  IO.FileMode.Open, IO.FileAccess.Read)
Dim blobData(fs.Length) As Byte
fs.Read(blobData, 0, fs.Length)

'// Bitmapファイルの格納
Dim conn As New OracleConnection( _
  "user id=scott;password=tiger;data source=orcl")
Dim strSql As String = _
  "insert into blob_test(blob_id, blob_fld) " & _
  "values(1, :blobdata)"
Dim cmd As New OracleCommand(strSql, conn)
conn.Open()
Dim pBlob As OracleParameter = _
  cmd.Parameters.Add("blobdata", OracleDbType.Blob)
pBlob.Value = blobData
cmd.ExecuteNonQuery()
Secure Files、BLOBへのアクセスサンプル(C#)
// Bitmapファイルの読み込み
System.IO.FileStream fs =  
  new System.IO.FileStream("c:\\temp\\test.bmp", 
    System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] blobData = new byte[fs.Length];
fs.Read(blobData, 0, (int)fs.Length);

// Bitmapファイルの格納
OracleConnection conn =
  new OracleConnection(
  "user id=scott;password=tiger;data source=direct09");
String strSql =
  "insert into sftest(keyno, sffield) " +
  "values(1, :blobdata)";
OracleCommand cmd = new OracleCommand(strSql, conn);
conn.Open();
OracleParameter pBlob =
  cmd.Parameters.Add("blobdata", OracleDbType.Blob);
pBlob.Value = blobData;
cmd.ExecuteNonQuery();

おわりに

 ODP.NETにはデータベースへのアクセス速度を向上させるプロパティ、メソッドが多数用意されており、開発者はこれらの機能を上手に活用すれば、高パフォーマンスなデータベースアプリケーションを開発できます。また、データベース側に追加されたパフォーマンス向上のための機能を利用すると、既存のアプリケーションを変更することなくパフォーマンスを向上させることができます。今後もODP.NETに関する最新の情報を掲載していきますので、是非、ご期待ください!

参考資料

  1. Data Provider for .NET開発者ガイド
修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Oracle Tips連載記事一覧

もっと読む

この記事の著者

日本オラクル 大田(オオタ ヒロシ)

日本オラクル株式会社 Oracle Directテクニカルサービス部所属。開発者の視点から、Oracle Databaseの機能を最大限に活かすための手法を日々研究しながら、プリセールス活動やオンラインセミナー等による情報発信を行う。現在はWindows Server上でのOracle製品活用を推進している。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4456 2009/10/09 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング