Разница между Direct Discovery и данными в памяти

Модель в памяти

В модели в памяти QlikView все уникальные значения в полях, выбранных из таблицы в скрипте загрузки, загружаются в структуры полей, а ассоциативные данные одновременно загружаются в таблицу. Данные поля и ассоциативные данные хранятся в памяти.

Вторая связанная таблица, загруженная в память, будет совместно использовать общее поле. Эта таблица может добавлять новые уникальные значения в общее поле или может совместно использовать существующие значения.

Direct Discovery

После загрузки полей таблицы с помощью оператора Direct DiscoveryLOAD (Direct Query) создается похожая таблица только с полями DIMENSION. Как и для полей в памяти, уникальные значения для полей DIMENSION загружаются в память. Но ассоциации между полями остаются в базе данных.

Значения поля MEASURE также остаются в базе данных.

Если определена структура Direct Discovery, поля Direct Discovery можно использовать вместе с определенными объектами диаграммы, а также их можно использовать для ассоциаций с полями в памяти. Если поле Direct Discovery используется, QlikView автоматически создает соответствующий запрос SQL для запуска во внешнем источнике данных. После выполнения выборок значения связанных данных полей Direct Discovery используются в условиях WHERE запросов базы данных.

При выполнении каждой выборки диаграммы с полями Direct Discovery пересчитываются с учетом вычислений, выполняемых в таблице исходной базы данных, с помощью запроса SQL, созданного QlikView. Можно использовать функцию условия вычисления, чтобы определить, когда диаграммы должны быть пересчитаны. Пока условие не будет выполнено, QlikView не отправляет запросы для пересчета диаграмм.

Разница в производительности между полями в памяти и полями Direct Discovery

Обработка в памяти всегда выполняется быстрее, чем обработка в исходной базе данных. Производительность Direct Discovery отражается на производительности системы под управлением базы данных, обрабатывающей запросы Direct Discovery.

Можно использовать рекомендации для стандартной базы данных и настройки запросов для Direct Discovery. Все действия по настройке производительности необходимо выполнять в исходной базе данных. Direct Discovery не поддерживает настройку производительности запросов из документа QlikView. Однако можно выполнять асинхронные параллельные вызовы базы данных с помощью функции объединения подключений. Синтаксис скрипта загрузки для настройки функции объединения:

SET DirectConnectionMax=10;

Кэширование QlikView также повышает удобство работы пользователей. См. приведенный ниже раздел Кэширование и Direct Discovery.

Производительность Direct Discovery с полями DIMENSION можно повысить с помощью отсоединения некоторых полей от ассоциаций. Для этого используется ключевое слово DETACH в DIRECT QUERY. Хотя отсоединенные поля не запрашиваются для ассоциаций, они по-прежнему являются частью фильтров, ускоряя время выборки.

Несмотря на то что данные полей в памяти QlikView и полей Direct DiscoveryDIMENSION хранятся в памяти, способ их загрузки влияет на скорость загрузки в память. Поля в памяти QlikView хранят только одну копию значения поля при наличии нескольких экземпляров одного значения. Однако загружаются все данные поля, а затем выполняется сортировка дубликатов.

Поля DIMENSION тоже хранят только одну копию значения поля, но сортировка повторяющихся значений выполняется в базе данных до загрузки в память. При работе с большими объемами данных, как обычно в Direct Discovery, данные загружаются намного быстрее с помощью DIRECT QUERY, чем это было бы с помощью загрузки SQL SELECT, используемой для полей в памяти.

Разница между данными в памяти и данными базы данных

DIRECT QUERY используется с учетом регистра при выполнении ассоциаций с данными в памяти. Direct Discovery выбирает данные из баз данных источника в соответствии с необходимостью учета регистра в базе данных. Если в базе данных регистр не учитывается, запрос Direct Discovery может возвращать данные, которые запрос в памяти не возвращает. Например, если следующие данные существуют в базе данных, в которой регистр не учитывается, запрос Direct Discovery значения "Red" вернет все четыре строки.

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

Если выбрать "1" на панели список для ColumnA с данными QlikView в стандартном формате в памяти, первые три строки будут связаны:

' 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.