Разница между 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 в стандартном формате в памяти, первые три строки будут связаны:
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
Кэширование QlikView сохраняет состояния выборки запросов и агрегированных результатов выполнения запросов в памяти. Поскольку выполняются одинаковые типы выборок, QlikView использует запрос из кэша вместо выполнения запроса исходных данных. Если выборки разные, запрос SQL отправляется в исходные данные. Кэшированные результаты совместно используются пользователями.
Пример:
-
Пользователь применяет начальную выборку.
SQL проходит по основному источнику данных.
-
Пользователь очищает выборку и применяет ту же выборку в качестве начальной.
Возвращаются результаты из кэша, SQL не проходит по основному источнику данных.
-
Пользователь применяет другую выборку.
SQL проходит по основному источнику данных.
Можно установить ограничение времени для кэширования с помощью системной переменной DirectCacheSeconds. При достижении этого предела времени QlikView очищает кэш для результатов выполнения запросов Direct Discovery, созданных для предыдущих выборок.Затем QlikView запрашивает исходные данные для выборок и повторно создает кэш для указанного предела времени.
По умолчанию время кэширования для результатов выполнения запроса Direct Discovery составляет 30 минут, если не используется системная переменная DirectCacheSeconds.