Skip to Content

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

 

 

 

この記事のオリジナルは、Glenn Paulley が sybase.com に 2009 年 4 月に掲載したものです。その中で、Glenn は SQL Anywhere において我々がマテリアライズドビューと呼んでいる機能に関するベンダー間の名称の違いについて解説しています。

(*注:この記事は2009年に執筆されたもので、他DBMSに関しては、現在は異なる可能性があることに注意してください。)

 

また、SAP HANA アーキテクチャーにおいては、マテリアライズドビューは必要ないということを述べておきたいと思います。なぜならば、HANA の場合は全てのデータはメインメモリー上で利用可能で、オンザフライで処理/集約可能だからです。

 

===

 

商談中のお客様より、かなりの頻度で SQL Anywhere がマテリアライズドビューの機能をサポートしているかどうか (多くは同じ「マテリアライズドビュー」の他の名前で)尋ねられます。

 

そこで、代表的な商用 RDBMS 製品の「マテリアライズドビュー」に相当する名称を以下にまとめてみました。

 

DBMS 名称 When How Who
MS SQL Server インデックス付ビュー 即時反映 差分更新 システム
IBM DB2 マテリアライズド照会表 即時 と 遅延 差分更新 または 再構築 システム または ユーザー
Oracle マテリアライズドビュー 遅延反映(*注:現在は即時反映も可能) 差分更新 または 再構築 システム または ユーザー
SQL Anywhere マテリアライズドビュー 即時 と 遅延 差分更新 または 再構築 システム または ユーザー

 

上記のテーブルでは、「when」(いつ反映されるか?) 列は、ベースとなるテーブルの行が 1 つまたはそれ以上変更された場合にマテリアライズドビューが更新されるタイミングを示しています。つまり、

 

  • 完全即時反映:
    • 同じ (更新の) トランザクションの一部としてマテリアライズドビューを更新
    • ベーステーブルの変更をビューデータにもととなるベーステーブルとの一貫性を保つ方法で伝播
    • ビューデータが古くなることはない。
    • 更新トランザクションの同時性を劣化させるとともに、ロックの競合とデッドロックを発生させる可能性が高くなる。

 

  • 遅延即時反映:
    • 依存するマテリアライズドビューを更新することなくベーステーブルに変更を適用
    • 差分更新が可能な場合、ログが変更(追記)される可能性がある。
    • クエリー実行時において、ビューにデータが反映されている場合には、結果を提供するためにビューを使用することが可能。もしくは、別のトランザクションを適用、またはマテリアライズドビューを再計算する。それが完了するまでクエリーの実行は待機

 

  • 遅延反映:
    • 関係するマテリアライズドビューを更新することなくベーステーブルに変更を適用
    • 差分更新が可能な場合、ログが変更(追記)される可能性がある。
    • 独立した非同時の処理で、通常は完全な再計算によってビューを更新
    • アプリケーションは、マテリアライズドビューが最新の状態でない場合があることを考慮している。

 

 

「how」のカラムは、ビューのベーステーブルが変更された場合にビューを最新の状態に保つ方法について示しています。

 

選択肢としては、

  • 再構築: 完全にビューを再計算する。
  • 差分更新: 再構築の形でなく変更された部分にのみマテリアライズドビューに個々の更新を適用する。しかし、これは全てにおいて可能なわけではなく、また効率性においてトレードオフがあります。大半の場合、即時反映のマテリアライズドビューでは、差分更新が行われています。

 

「マテリアライズドビュー」という名称は、標準化されていません。

なぜならば、マテリアライズドビューは、インデックスのように、パフォーマンス最適化の機能であるため、ANSI/ISO SQL 標準でカバーされていないからです。

SQL Anywhere に「マテリアライズドビュー」という名称を選択したのは、(単に)Oracle と合わせたというだけではなく、学術的な文書において「マテリアライズドビュー」の使用が比較的多くみられたからです。

 

 

上のテーブルに、Sybase IQ (現 SAP IQ) が省かれていることについて質問される方もいるかもしれません。

 

実は、Sybase IQ はマテリアライズドビューをサポートしていません。そのかわり、Sybase IQ は、関連する(少し古い)考え方である join index と呼ばれるものをサポートしています。(*注:現在 SAP IQ に join index の機能はありません。)

 

Join indices は、もともと Patrick Valduriez による論文1987 TODS paper [1]、その後 MCC で、そして現在は INRIA で解説されています。マテリアライズドビューと同様、join index は 2つのテーブル間の 内部結合 | 外部結合 | 完全外部結合 の結果をマテリアライズします。full-outer join index のメリットは、あらゆる 内部結合 | 外部結合 | 完全外部結合 を使用したクエリーの処理に対してシンプルにフィルタ条件を 適用することで使用することができることです。

 

違いは、マテリアライズドビューの方がより一般的であり、1対多の内部結合 | 外部結合 | 完全外部結合 を フィルタ条件、射影、グループ可等を行った後にマテリアライズすることが可能という点です。

バッチで更新するマテリアライズドビューは、任意の結合で代数使用した処理を含むことが可能です。

 

 

 

Techwave 2008 におけるマテリアライズドビューのプレゼンにこの文書を一緒にまとめてくれた同僚の Anil Goel に感謝します。
[1] Patrick Valduriez (June 1987). Join indices. ACM Transactions on Database Systems 12(2), pp. 218-246.

 

 

===

 

SAP SQL Anywhere に関する詳細情報は、SAP SQL Anywhere Communityページ<英語> を参照してください。

 

上記のコミュニティーに掲載されている技術情報は、順次SQL Anywhere 日本語コミュニティ

に掲載しています。

 

SQL Anywhere に関してはまずはこちらをご参照ください。無期限でご利用いただける無償の Developers Edition もこちらからダウンロードが可能です。

 

SQL Anywhere に関して技術的な質問のある方はコミュニティに登録し、
「+ Actions」から「Ask a Question」機能をご利用ください。

Language には「Japanese」、
Primary Tag には「SQL Anywhere」、
Additional tag には「SAP SQL Anywhere」、
User Tagに「sql anywhere japanese question」

を選択してください。

不具合につきましては、サポート契約者様専用の問い合わせ方法にてお問い合わせください。

 

======================
ご購入に関するお問い合わせ

こちらよりお問い合わせください。

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply