Direct Discoveryとインメモリ データとの違い

インメモリ モデル

QlikViewのインメモリ モデルでは、ロード スクリプトのテーブルから選択された項目のユニーク値が項目構造にすべてロードされ、それと同時に連想データはテーブルにロードされます。項目データおよび連想データは、すべてメモリに保持されています。

メモリにロードされたもう一つの関連テーブルは、共通の項目を共有することがあります。そしてそのテーブルは、共通の項目に新しい一意の値を追加したり、既存値を共有したりする場合があります。

Direct Discovery

Direct DiscoveryLOADステートメント (Direct Query) でテーブル項目をロードすると、DIMENSION 項目のみで類似テーブルが作成されます。インメモリ項目では、DIMENSION項目のユニーク値がメモリにロードされます。ただし、項目間の関係性はデータベースに残ります。

MEASURE項目値もまた、データベースに残ります。

Direct Discovery構造が確立すると、特定のチャート オブジェクトと共にDirect Discovery 項目を使用できます。そして、インメモリ項目を使った関連付けのためにもこの項目を使用できます。Direct Discovery項目が使用されている場合、QlikView は適切なSQL クエリ を自動作成し、外部データ上で実行します。選択を行うと、データベースのクエリの WHERE条件で Direct Discovery 項目の関連データ値が使用されます。

Direct Discovery項目を含むチャートは、各選択条件に従い再計算されます。そして、QlikView で作成されたSQL クエリを実行することにより、元のデータベース テーブルに計算結果が表示されます。計算の条件の機能を使い、チャートを再計算するタイミングを指定できます。条件が合うまで、QlikViewはチャートを再計算するクエリを送信しません。

インメモリ項目と Direct Discovery項目とのパフォーマンスの違い

インメモリでの処理スピードは、ソース データベースでの処理スピードよりも常に速くなります。Direct Discoveryのパフォーマンスは、Direct Discovery クエリを処理するデータベースを稼働しているシステムのパフォーマンスにより異なります。

Direct Discoveryのベスト プラクティスを引き出す標準的なデータベースおよびクエリを使用することができます。パフォーマンスの調整はすべて、ソース データベース上で行われます。Direct Discoveryは、QlikView ドキュメントのクエリのパフォーマンス調整には対応していません。しかし、接続プーリング機能を使用することで、データベースへの非同期・同時呼び出しを行うことはできます。プーリング機能を設定するロード スクリプト構文は以下の通りです。

SET DirectConnectionMax=10;

QlikViewキャッシュにより、ユーザー エクスペリエンス全体が改善されます。以下 キャッシュおよび Direct Discoveryを参照してください。

一部項目の関連付けを解除することでも、DIMENSION項目を含むDirect Discovery のパフォーマンスを改善できます。これは、DIRECT QUERY上でDETACH キーワードを用いて実行されました。関連付けが解除された項目では、関連付けのクエリは実行されませんが、フィルターの一部として残っているので、選択時間を短縮できます。

QlikViewのインメモリ項目と Direct DiscoveryDIMENSION 項目の両方の全データがメモリ内に保持されている間、項目へのロード方法の違いは、メモリへのロード速度に影響を及ぼします。同じ値を持つ複数のインスタンスが存在する場合、QlikViewのインメモリ項目は、項目値のコピーを 1 つだけ保持します。ただし、全項目データをロードして、重複データが抽出されます。

DIMENSION項目も項目値のコピーを 1 つだけ保持しますが、重複値はメモリへのロードに先立ち、データベースで抽出されます。Direct Discoveryを使用する際と同様に、大量のデータを取り扱う場合は、インメモリ項目の SQL SELECT ロードよりも、DIRECT QUERY ロードを実行した方が素早くデータをロードできます。

データ インメモリとデータベース データとの違い

インメモリ データで関連付けを行う場合、DIRECT QUERYでは大文字と小文字が区別されます。Direct Discoveryは、データベースで大文字と小文字の区別を行って、ソース データベースからデータを選択します。大文字と小文字を区別しないデータベースの場合、Direct Discoveryのクエリは、インメモリのクエリが返さないデータを返す場合があります。大文字と小文字を区別しないデータベースに以下のデータが存在する場合、値 "Red"Direct Discovery クエリは以下 4 つの行をすべて返します。

ColumnA ColumnB
red one
Red two
rED three
RED four

一方、"Red,"のインメモリの選択は、以下のみを返します。

Red two

QlikViewは、データベースが合致しない選択データで一致する値が生成されるまで、データを正規化します。その結果、インメモリ クエリは、Direct Discoveryクエリよりも一致度が高い値を生成する場合があります。例えば、以下のテーブルでは、前後のスペースの位置により、数値 "1"に対する値が変化します。

ColumnA ColumnB
' 1' space_before
'1' no_space
'1 ' space_after
'2' two

標準 QlikViewインメモリにデータがある ColumnAリスト ボックス"1" を選択すると、最初の 3 行が以下に関連付けられます。

' 1' space_before
'1' no_space
'1 ' space_after

リスト ボックスDirect Discovery データが含まれる場合、"1" のデータ選択は"no_space" のみを関連付ける可能性があります。返されるDirect Discoveryデータとの一致は、データベースにより異なります。例えば、"no_space"のみ返す場合もあれば、SQL Server のように "no_space""space_after" を返す場合もあります。

キャッシュおよび Direct Discovery

QlikViewのキャッシュは、クエリの選択状態をメモリに保存します。同じ種類の選択が行われると、QlikViewは、ソース データのクエリを実行せずに、キャッシュのクエリを利用します。異なる選択を行うと、データソースでSQLクエリ を実行します。キャッシュされている結果は、ユーザー間で共有されます。

例:  

  1. 最初の選択を適用した場合

    SQLは、基底のデータ ソースに渡されます。

  2. 選択をクリアし、最初の選択と同じ選択を適用した場合

    キャッシュ結果が返され、SQLは基底データ ソースには渡されません。

  3. 異なる選択を適用した場合

    SQLは、基底のデータ ソースに渡されます。

DirectCacheSecondsのシステム変数を用いて、キャッシュに時間制限を設けることができます。制限時間に達すると、QlikView は、これまでの選択条件で生成された Direct Discovery のクエリ結果のキャッシュをクリアします。そして、QlikView は選択条件のソース データに照会して、指定の制限時間に達するまで、再度キャッシュを作成します。

Direct Discoveryクエリ結果のキャッシュ時間はデフォルトで 30 分間に設定されていますが、DirectCacheSeconds のシステム変数が使用されている場合は該当しません。