このページは、以下の英語ページの抄訳です。最新の情報については、
英語ページを参照してください。
この記事のオリジナルは、
Glenn Paulley が sybase.com に 2009 年 4 月に掲載したものです。その中で、Glenn は SQL Anywhere において我々がマテリアライズドビューと呼んでいる機能に関するベンダー間の名称の違いについて解説しています。
(*注:この記事は2009年に執筆されたもので、他DBMSに関しては、現在は異なる可能性があることに注意してください。)
また、SAP HANA アーキテクチャーにおいては、マテリアライズドビューは必要ないということを述べておきたいと思います。なぜならば、HANA の場合は全てのデータはメインメモリー上で利用可能で、オンザフライで処理/集約可能だからです。
===
商談中のお客様より、かなりの頻度で
SQL Anywhere がマテリアライズドビューの機能をサポートしているかどうか (多くは同じ
「マテリアライズドビュー」の他の名前で)尋ねられます。
そこで、代表的な商用 RDBMS 製品の「マテリアライズドビュー」に相当する名称を以下にまとめてみました。
上記のテーブルでは、「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 に関する詳細情報は、<英語> を参照してください。
上記のコミュニティーに掲載されている技術情報は、順次
SQL Anywhere 日本語コミュニティ
に掲載しています。
SQL Anywhere に関してはまずは
こちらをご参照ください。無期限でご利用いただける無償の Developers Edition もこちらからダウンロードが可能です。
SQL Anywhere に関して技術的な質問のある方はコミュニティに登録し、
「Ask a Question」機能をご利用ください。
Language には「Japanese」、
Primary Tag には「SAP SQL Anywhere」を選択
User Tagに「sql anywhere」「sql anywhere Japanese question」
を入力してください。
不具合につきましては、サポート契約者様専用の問い合わせ方法にてお問い合わせください。
======================
ご購入に関するお問い合わせ
こちらよりお問い合わせください。