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

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

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

One table with three fields.

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

Two tables with a common field.

Direct Discovery

После загрузки полей таблицы с помощью оператора Direct Discovery LOAD (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 используется, Qlik Sense автоматически создает соответствующий запрос SQL для запуска во внешнем источнике данных. После выполнения выборок значения связанных данных полей Direct Discovery используются в условиях WHERE запросов базы данных.

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

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

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

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

SET DirectConnectionMax=10;

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

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

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

Поля 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

Qlik Sense нормализует данные до такой степени, что выдает совпадения выбранных данных, которые база данных не находит. Таким образом, запрос в памяти возвращает больше совпадающих значений, чем запрос Direct Discovery. Например, в следующей таблице значения для числа "1" отличаются расположением пробелов вокруг них:

Таблица с разными значениями числа «1», что обусловлено разным положением пробелов вокруг них
ColumnA ColumnB
' 1' space_before
'1' no_space
'1 ' space_after
'2' two

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

Associated rows
ColumnA ColumnB
' 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

Кэширование Qlik Sense сохраняет состояния выборки запросов и агрегированных результатов выполнения запросов в памяти. Поскольку выполняются одинаковые типы выборок, Qlik Sense использует запрос из кэша вместо выполнения запроса исходных данных. Если выборки разные, запрос SQL отправляется к источнику данных. Кэшированные результаты совместно используются пользователями.

Example:  

  1. Пользователь применяет начальную выборку.

    SQL проходит по основному источнику данных.

  2. Пользователь очищает выборку и применяет ту же выборку в качестве начальной.

    Возвращаются результаты из кэша, SQL не проходит по основному источнику данных.

  3. Пользователь применяет другую выборку.

    SQL проходит по основному источнику данных.

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

По умолчанию время кэширования для результатов выполнения запроса Direct Discovery составляет 30 минут, если не используется системная переменная DirectCacheSeconds.