ラージ・オブジェクトへの高速アクセス
今までのデータベースは数値、文字情報が主に格納されてきましたが、昨今のデータベースでは画像、動画、音声、PDFなど、さまざまなバイナリデータを格納するケースが増えてきています。これらのバイナリデータをデータベースに格納するメリットとして以下が挙げられます。
- アプリケーション・ロジックが単純化できる
- 一つのトランザクションで操作が可能に
- バックアップなどの運用を一元化できる
Oracle Database 8以降では動画ファイルや大容量テキスト文章格納用のデータ型として、LOBデータ型が用意されています。LOBデータ型は、CLOB / BLOBという2つの列が用意されており、CLOBはテキスト情報、BLOBはバイナリ情報を格納するために用いられます。Oracle Database 11gからは、「SecureFiles」という新世代のLOBデータ型が新たに導入されました。SecureFilesは今までのLOBデータ型に比べ以下の利点があります。
機能 | 説明 |
キャッシュ機能 | キャッシュ機能により従来のLOBと比較してパフォーマンスが向上 |
圧縮 | 格納データの圧縮が可能(Advanced Compression Optionが必要) |
重複データの除外 | 同一内容のデータを保存しないことにより保存領域を削減(Advanced Compression Optionが必要) |
暗号化 | Transparent Data Encryption(TDE)の機能を利用することにより、暗号化を実施 |
パフォーマンス面では、キャッシュ機能が有効になっているので、読み込み、書き込みともにアクセス速度が向上します。
SecureFilesを利用する際に、クライアントからのアクセスインターフェースを変更する必要はありません。今までと同様のアクセスで上記に挙げたメリットを活用することができます。ちなみに、ODP.NET経由でBLOBにアクセスするサンプルプログラムは以下になります。下記サンプルプログラムは同一プログラムでBLOB、SecureFiles両方に対応しています。
'// 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()
// 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に関する最新の情報を掲載していきますので、是非、ご期待ください!