SHOEISHA iD

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

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

直近開催のイベントはこちら!

EnterpriseZine編集部ではイベントを随時開催しております

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

Oracle技術者から見た、SAP HANA

OLTPにも対応できるHANAカラムストアの仕組み


 今回は前回予告した「OLTPにも対応できるHANAカラムストアの仕組み」について解説します。

そもそもカラムストアとは?

 私を含め多くのデータベース・エンジニアにとってカラムストアは馴染みの薄いものだと思います。 そこで、カラムストアとはどのようなものなのかを考えてみます。 図はOracle技術者にはおなじみであるSCOTTスキーマEMP表の検索結果を表示させたものです。

 リレーショナルデータベースとしての論理的な「タプル」と物理的な「レコード」はほぼ同一のイメージで、各レコードはrowidにより識別されます。 Oracleデータブロックには以下のイメージでデータが格納され、行ディレクトリには各行へのポインタ情報があります。(図2)

 OLTPにより新たなレコードがインサートされた場合は、データブロックの空いた領域にレコードが格納されます。 また、格納済みレコードが更新され空き領域以上にレコード長が長くなる場合は、ポインタを残して別ブロックにレコードが移動される「行移行」が発生します。これはローストアならではの特徴と言えます。

 次に、EMP表を基にカラムストアのイメージを考えてみます。

 図3は各列を「EMPNO」「ENAME」…のように8つのカラムストアに分割したところを示しています。 カラムストア内のデータは同じデータ型なので、メモリ上では「配列(Array)」として実装され、配列内の各要素は添字(アドレス)で識別されます。 このイメージでは単純に分割しているだけなので、重複したデータが存在していて冗長に見えますが、配列の添字が同じデータを横串に連結すればタプルを表現できます。(赤枠)

  1件のみのインサート処理でも8つのカラムストアそれぞれに書込みが発生するため、カラム数が多いほどローストアに比べてカラムストアは処理が複雑になります。

 次に、カラムストアを重複排除およびソートしたイメージも考えてみます。(図4)

 これは「SELECT DISTINCT (カラム名) FROM EMP ORDER BY (カラム名)」とした場合の結果をまとめたものとなります。

 配列の大きさも各カラムのカーディナリティの違いからこの例では3~12の様々なバリエーションが存在します。つまり、この形式のカラムストアではカーディナリティが低いほど配列の大きさが小さくなり縦方向に圧縮(サイズ縮小)されることになります。

 このような重複排除かつソートされた配列は「順序配列(Ordered array)」と呼ばれます。 順序配列ではインデックスなしでもバイナリサーチ(二分探索)による高速検索が可能となります。

 ※バイナリサーチは検索範囲を半分、さらに半分と絞り込むことで、先頭から順に検索するリニアサーチ(線形探索)と比べはるかに効率的に検索することができるアルゴリズムです。

 また、配列の先頭と最後尾を参照することで、最小値と最大値を自動的に取得することができます。(「SAL」カラム等)

 ただし、この形式では各配列の添字が異なるため図のようにタプルのイメージを形成することは難しくなります。

 このように一口にカラムストアと言っても、その実装は複雑になりそうだとういう実感を持っていただけたでしょうか? (上で挙げたカラムストアのイメージはあくまでも概念的なものであって、SAP HANAで実装されている形とは異なります。これは次々回にて説明する予定です。)

 ここで、順序配列に挿入(削除)する場合について考えてみます。(図5)

 「JOB」カラムに「ENGINEER」というデータを挿入しようとしています。 このデータは添字3の位置に挿入すべきですが、そこには既に「MANAGER」という値が入っているので、最後尾の「SALESMAN」から後ろに一つずつずらして添字3の位置を空けます。 そして、空けた位置に「ENGINEER」というデータを書き込みます。

 すなわち①挿入する位置を特定する。②挿入位置以降のデータを後ろにずらす。③挿入する。という動作になります。

 配列が大きいほど、挿入位置が先頭に近いほど挿入に対するコスト(時間)がかかるので、短いトランザクションでデータを処理する必要があるOLTPでも実用的な時間で処理ができるカラムストアを実現することは非常にハードルが高い課題になることが想像できます。

 SAP HANAではこの課題をどのようにして解決しているのでしょうか?実際の仕組みを見てみましょう。

次のページ
メインストレージとデルタストレージ

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

  • Facebook
  • Twitter
  • Pocket
  • note
Oracle技術者から見た、SAP HANA連載記事一覧

もっと読む

この記事の著者

三原健一(ミハラケンイチ)

 ベンチュリーコンサルティング株式会社 技術顧問 現在、大手SIerの性能問題対応チームに従事。主にOracleデータベースの性能問題解決や負荷テストの計画・実施・分析・評価等を担当。前職のインサイトテクノロジーではメルマガやブログの執筆に関わる。 ・ブログ「サイクル&オラクル

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

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

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/9675 2017/08/31 13:44

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング