CodeZine(コードジン)

特集ページ一覧

開発者が知っておきたいSQLの実行モデル~アプリからデータベースへのアクセスを高速化するには?

オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド 第1回

  • LINEで送る
  • このエントリーをはてなブックマークに追加

 データベースのデータ・モデルは解決したい問題に合わせて使い分けることができ、昨今ではドキュメントやグラフなどのリレーショナル以外のモデルも注目されています。また、トランザクション系が生成した大量のデータをリアルタイムで分析するというような、性質の異なるワークロードを扱うことも求められています。これら性質の異なるデータ・モデルやワークロードを扱うにはどのような実装が必要でしょうか。この連載では、開発者の皆様がシステム・アーキテクチャやアプリケーション・コードをより洗練させるのに役立つデータベース・マネジメント・システム(DBMS)の基本を振り返り、実装に合った技術の組み合わせを解説します。

目次

 第1回はデータベースにアクセスするAPIで最も広く使われているSQLという言語の実行モデルを再確認します。なぜこの言語がリレーショナル・モデルのみならず他のデータ・モデルに対しての操作にも使われるようになったのか、それは実行モデルの汎用性に一因があります。

 今回は汎用性を実現する実装の全体像についてみていきます。連載の第2回以降ではデータ・アクセスの効率を高めるそれぞれの構成要素についてみていく予定です。最新情報の棚卸を通じて、アプリケーションとデータベースのパフォーマンス改善や、連携のヒントとなれば幸いです。なお、本連載で例として挙げるデータベースはオラクルが提供しているものが多いですが、オラクル製品を使っていない方にも参考にしていただけるように解説していきます。

対象読者

 この連載では以下の読者を想定しています。

  • データ資産を活用する、新しいアプリケーションの構想や設計を担われる方
  • データ基盤の運用を担われている方や、今後の検討をされる方
  • 新たに開発するアプリケーションの、最適なデータベースをお探しの方
  • 目的別データベースから、価値ある情報を素早く引き出す検討をされる方

データベース・マネジメント・システム(DBMS)の階層構造

 データベース・マネジメント・システム(以下、DBMS)の技術の解説というと多くの場合、トランザクション分離レベルの実装やメモリー管理、ストレージ管理などの内部実装の階層を区別したものになる傾向があります。ある特定のDBMS実装を学ぶにはその階層分けでもよいのですが、この連載では少し違った切り口で区分します。それは「1. API」「2. データ・モデルとデータ型」そして「3. アーキテクチャと実装」の3階層です。

DBMSの階層構造
DBMSの階層構造

 1つ目の階層はAPIです。DBMSの主流であるリレーショナル・モデルの話が出てくるとき、大抵の場合SQLがほぼセットで扱われています。ですが、SQLというのは実はデータ・モデルにアクセスするAPIの1つでしかありません。SQL以外を見てみても、Key Value Storeはデータへのアクセス・パスがDBMSによって決め打ちされたAPI(と一体化したデータ・モデル)ですし、RESTはHTTPのメソッドを使用したAPIです。

 2つ目の階層はデータ・モデルとデータ型です。データ・モデルはアプリケーションが扱うデータの関連を定義したデータ構造の抽象概念です。データ・モデルにはリレーショナル以外にもドキュメントやグラフなどがあり、データ型にも文字列や数値だけでなく画像などの非構造化データもあります。これらDBMSのデータ・モデルやデータ型にアクセスするインターフェースがAPIの階層です。

 そして3つ目の階層がアーキテクチャと実装です。DBMSは極めてサイズの大きなデータ容量を扱うため、アクセスを高速化するアーキテクチャと実装の工夫がDBMS内の様々な階層で行われています。索引やパーティショニング、イン・メモリー技術やクラスタ構成などです。クエリーの性能やスケーラビリティを決めるのはアーキテクチャと実装の階層であって、抽象概念を扱うAPIやデータ・モデルの階層ではありません。

 JavaやPHPなどの言語を使って記述されるアプリケーションのコードにはDBMSのAPIを記述してデータ・モデルとデータ型にアクセスします。本来、APIというのはApplication Programming Interfaceの名前の通りインターフェースであり、そのAPIを呼び出す側のコードはAPIの内部実装をなるべく気にしなくてもよいようになっていることが理想です。インターフェースと実装の分離はプログラミングの基本です。これに照らし合わせると、アプリケーションのコード設計はDBMSのAPIとデータ・モデルだけを気にするべきでDBMSの内部実装を気にするべきではない、となるわけですが、なぜそのようなことが可能になっているのでしょうか?


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド

著者プロフィール

  • 日下部 明(日本オラクル株式会社)(クサカベ アキラ)

     日本オラクル株式会社でOracle Databaseを担当するエンジニア。主にOracle Real Application Clustersを中心とする高可用性構成や性能チューニングの問題解決およびコンサルティングに従事。著書に「これは使えるOracle新機能活用術」(翔泳社)。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5