データベース・アーキテクチャと用途
オンライン・トランザクション処理と分析・集計処理ではデータへのアクセスの性質が異なるため、それに適したデータの物理レイアウトが異なることがわかりました。そのため、データベースの用途に合わせてデータの物理レイアウトが異なるものを用意するというのは自然な考えです。オンライン・トランザクション処理向けの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がストレージに行指向レイアウトで格納されたデータを列指向レイアウトに変換してメモリーに載せるアーキテクチャはインメモリー・データベースです。
キャッシュ・ベースとインメモリー・データベースにはやはり長所と短所があります。これらの長所と短所、そしてこれらの折り合いをつける方法について解説する予定です。
