Direct Discovery와 인 메모리 데이터의 차이점

인 메모리 모델

QlikView의 인 메모리 모델에서는 로드 스크립트의 테이블에서 선택된 필드의 모든 고유 값이 필드 구조로 로드되고 연관 데이터가 동시에 테이블로 로드됩니다. 필드 데이터 및 연관 데이터는 모두 메모리에 보관됩니다.

One table with three fields.

두 번째 관련 테이블이 메모리에 로드되면 공통 필드를 공유하게 되고, 해당 테이블이 새 고유 값을 공통 필드에 추가하거나 기존 값을 공유할 수 있습니다.

Two tables with a common field.

Direct Discovery

Direct DiscoveryLOAD 문(Direct Query)을 사용하여 테이블 필드를 로드할 경우 DIMENSION필드만 있는 유사한 테이블이 생성됩니다. 인 메모리 필드와 마찬가지로 DIMENSION 필드의 고유 값이 메모리에 로드됩니다. 하지만 필드 간 연결은 데이터베이스에 남습니다.

One table with two dimension fields.

MEASURE 필드 값도 데이터베이스에 남습니다.

One table with measure field values left in the database.

Direct Discovery 구조가 설정되면 Direct Discovery 필드를 특정 차트 개체와 함께 사용할 수 있고 인 메모리 필드와 연결하는 데 사용할 수 있습니다. Direct Discovery 필드를 사용하면 QlikView에서 외부 데이터에 대해 실행할 적절한 SQL 쿼리를 자동으로 만듭니다. 선택이 수행되면 Direct Discovery 필드의 연관 데이터 값이 데이터베이스 쿼리의 WHERE 조건에 사용됩니다.

선택을 수행할 때마다QlikView가 만든 SQL 쿼리를 실행하는 방식으로 소스 데이터베이스 테이블에서 계산이 수행되면서 Direct Discovery 필드가 있는 차트가 다시 계산됩니다. 차트를 다시 계산해야 하는 시기는 계산 조건 기능을 사용하여 지정할 수 있습니다. 지정된 조건이 충족될 때까지 QlikView가 차트를 다시 계산하기 위해 쿼리를 보내지 않습니다.

인 메모리 필드와 Direct Discovery필드 간 성능 차이

인 메모리 처리 속도가 소스 데이터베이스의 처리 속도보다 항상 빠릅니다. Direct Discovery의 성능은 Direct Discovery 쿼리를 처리하는 데이터베이스를 실행 중인 시스템의 성능에 따라 달라집니다.

Direct Discovery의 경우 표준 데이터베이스 및 쿼리 조정 모범 사례를 사용할 수 있습니다. 모든 성능 조정은 소스 데이터베이스에서 수행되어야 합니다. Direct DiscoveryQlikView 문서에서 쿼리 성능 조정을 지원하는 기능을 제공하지 않습니다. 하지만 연결 풀링 기능을 사용하여 데이터베이스에 대한 비동기, 병렬 호출을 수행할 수 있습니다. 풀링 기능을 설정하기 위한 로드 스크립트 구문은 다음과 같습니다.

SET DirectConnectionMax=10;

QlikView의 캐싱도 전반적인 사용자 환경을 개선합니다. 아래 캐싱과 Direct Discovery을 참조하십시오.

Direct Discovery DIMENSION 필드의 경우 일부 필드의 연결을 분리하여 성능을 개선할 수도 있습니다. DIRECT QUERYDETACH 키워드를 사용하면 됩니다. 분리된 필드는 연결 쿼리 대상이 아니지만 여전히 필터의 일부이므로 선택 시간이 단축됩니다.

QlikView 인 메모리 필드 및 Direct DiscoveryDIMENSION 필드는 둘 다 모든 데이터를 메모리에 보관하지만 필드가 로드되는 방식에 따라 메모리로 로드되는 속도가 달라집니다. QlikView 인 메모리 필드는 동일한 값을 가진 필드가 여러 개 있을 경우 한 필드 값의 사본만 보관합니다. 하지만 모든 필드 데이터가 로드된 후 중복 데이터가 선별됩니다.

또한 DIMENSION 필드는 한 필드 값의 사본만 저장하지만 중복 값이 데이터베이스에서 선별된 후 메모리에 로드됩니다. 일반적으로 Direct Discovery를 사용할 때처럼 대량의 데이터를 처리할 때는 인 메모리 필드에 사용되는 SQL SELECT 로드를 사용하는 것보다 DIRECT QUERY 로드로 로드하는 것이 데이터 로드 속도가 훨씬 더 빠릅니다.

인 메모리 데이터와 데이터베이스 데이터의 차이점

DIRECT QUERY는 인 메모리 데이터와 연결할 때 대/소문자를 구분합니다. Direct Discovery는 쿼리된 데이터베이스 필드의 대/소문자 구분 여부에 따라 소스 데이터베이스에서 데이터를 선택합니다. 데이터베이스 필드가 대/소문자를 구분하지 않을 경우 Direct Discovery 쿼리에서 인 메모리 쿼리가 반환하지 못하는 데이터가 반환될 수 있습니다. 예를 들어 대/소문자를 구분하지 않는 데이터베이스에 다음 데이터가 있을 경우 Direct Discovery"Red" 값 쿼리는 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"을 선택하면처음 세 행이 연결됩니다.

' 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 쿼리가 수행됩니다. 캐싱된 결과는 사용자 간에 공유됩니다.

Example:  

  1. 사용자가 초기 선택을 적용합니다.

    기반 데이터 소스를 통해 SQL이 전달됩니다.

  2. 사용자가 선택 내용을 해제하고 일부 선택을 초기 선택으로 적용합니다.

    캐시 결과가 반환되며, 기반 데이터 소스를 통해 SQL이 전달되지 않습니다.

  3. 사용자가 다른 선택을 적용합니다.

    기반 데이터 소스를 통해 SQL이 전달됩니다.

DirectCacheSeconds 시스템 변수를 사용하면 캐싱에 시간 한계를 설정할 수 있습니다. 시간 한계에 도달하면 QlikView가 캐시에서 이전 선택 내용에 대해 생성된 Direct Discovery 쿼리 결과를 지웁니다.그런 다음 QlikView는 선택 내용에 대해 소스 데이터를 쿼리하고 지정된 제한 시간 동안 캐시를 다시 만듭니다.

DirectCacheSeconds 시스템 변수를 사용하지 않을 경우 Direct Discovery 쿼리 결과의 기본 캐시 시간은 30분입니다.