SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

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

分析・集計に適したデータベースの最適な物理レイアウトを考える

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

データベース・アーキテクチャと用途

 オンライン・トランザクション処理と分析・集計処理ではデータへのアクセスの性質が異なるため、それに適したデータの物理レイアウトが異なることがわかりました。そのため、データベースの用途に合わせてデータの物理レイアウトが異なるものを用意するというのは自然な考えです。オンライン・トランザクション処理向けのDBMSではストレージに行指向で格納し、分析・集計処理向けのDBMSでは列指向でストレージに格納する傾向があります。

 ここで、オンライン・トランザクション処理と分析・集計処理の両方を1つのデータベースで高速に処理するために、行指向レイアウトと列指向レイアウトを両立させる方法はないか考えてみましょう。

 まず、ストレージの物理レイアウトで行指向と列指向の両方が持てるようにする実装が考えられます。SAP HANAやOracle Exadataは表の物理レイアウトを行指向か列指向かを選択することができます。分析・集計処理に特化する場合、ストレージ上の大量データをメモリーに読み込むのを高速化するためにストレージとメモリー上の物理レイアウトを同じにするというのは理にかなっていますが、設計上は行指向と列指向を表ごとに使い分ける必要が出てきます。

 また別の実装では、ストレージに格納されたデータをメモリーに載せるときに行指向と列指向を両立させるものがあります。基本的には、ストレージに格納された物理レイアウトがそのままメモリーに格納されます。しかし、必ずしもストレージと同じレイアウトでメモリーに配置する必要はありません。ストレージに行指向レイアウトで格納されているデータを、メモリーには列指向レイアウトに変換して格納するということは可能です。Oracle DatabaseのDatabase In-Memory機能とMySQL HeatWaveはこの方法で行指向レイアウトと列指向レイアウトの両方に対応可能です。これらのDBMSはオンライン・トランザクション処理で発生した大量のデータを分析・集計するために別のデータベースに移し替えることなく、同じデータベースで高速に処理できるというシステム設計の選択肢ができます。

ストレージとメモリー上の物理レイアウト
ストレージとメモリー上の物理レイアウト

大量アクセス処理と列指向レイアウトの並列化

 列指向レイアウトは分析・集計処理のように1つの処理が大量のデータにアクセスするのに向いています。また、大量のデータにアクセスする処理は複数のCPUコアや複数台の物理サーバーで並列化することが効果的であることは第4回第5回で解説しました。

 列指向レイアウトはメモリー上で処理対象のデータが連続配置されているという性質を使って、さらに並列処理を最適化することができます。近年のCPUはベクトル演算ユニットやSIMD(Single Instruction Multiple Data)演算ユニットと呼ばれる、1命令で複数のデータを同時に操作する機能を実装しています。Oracle DatabaseのDatabase In-Memory機能とMySQL HeatWaveは、メモリー上に列指向レイアウトされたデータをSIMD演算ユニットで1CPUコア内でも並列処理します。

大量データ処理の並列化
大量データ処理の並列化

まとめ

 論理的に多次元のデータ構造を持つデータベースのデータを1次元のアドレスをもつストレージやメモリー上に展開するには複数のレイアウト方法があります。また、処理の内容によってデータのアクセスへの性質が異なります。そのためデータへのアクセスの性質に最適化した物理レイアウトも異なります。

 オンライン・トランザクション処理で発生したデータを分析・集計処理するにあたり、それぞれに最適な物理レイアウトが異なります。そのため目的別のデータベースを用意しデータベース間でデータを移動させるというシステム設計をとることがあります。しかしこのシステム・アーキテクチャはデータベース間で大量のデータ移動を発生させます。

 複数の物理レイアウトを両立させることを目指したDBMSを使用すると、オンライン・トランザクション処理と分析・集計処理のデータベースを分けないという設計の選択肢ができます。

 次回はメモリー管理アーキテクチャを扱います。

 ストレージに格納されたデータをメモリーに載せるとき、アクセスしたデータだけをメモリーに載せるキャッシュ・ベースのアーキテクチャと、前もって対象データすべてをメモリーに載せるインメモリー・データベースのアーキテクチャに大別することができます。

 Oracle DatabaseやMySQLは基本的にキャッシュ・ベースのアーキテクチャですが、Oracle DatabaseのDatabase In-Memory機能とMySQL HeatWaveがストレージに行指向レイアウトで格納されたデータを列指向レイアウトに変換してメモリーに載せるアーキテクチャはインメモリー・データベースです。

 キャッシュ・ベースとインメモリー・データベースにはやはり長所と短所があります。これらの長所と短所、そしてこれらの折り合いをつける方法について解説する予定です。

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/15552 2022/02/16 11:00

イベント

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

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

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

メールバックナンバー