Help:Кэширование концептов

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

Увеличение производительности, достигаемое за счет кэширования концепта, сравнимо с эффектом его замены на категорию MediaWiki. Оно затрагивает все семантические запросы, которые используют этот концепт, а также процесс отображения страницы концепта. С другой стороны, использование предварительно вычисленного значения может привести к устареванию данных, т.е. страница концепта будет содержать данные не согласованные с остальной wiki. Для решения этой проблемы вы должны задать максимальное время хранения кэша. Если этот параметр будет превышен SMW обновит значение кэшированного концепта.

Создание и управление кэшированием концептов
По умолчанию SMW будет использовать кэшированные значения концептов не старше одного дня. Для кэширования концепта может быть использован служебный скрипт SMW_conceptCache.php. Как любой другой SMW скрипт он может быть выполнен с помощью смены директории на [SMWpath]/maintenance и запуска php SMW_conceptCache.php. В результате вы увидите документацию по использованию данного скрипта. Если вы получили ошибку, то скорее всего структура каталога вашей вики отличается от стандартной. В этом случае нужно ознакомиться с инструкцией запуска скриптов в вашей вики [SMWpath]/maintenance/README.

Скрипт SMW_conceptCache.php имеет три основных режима работы, которые выбираются с помощью следующих параметров:
 * php SMW_conceptCache.php --status показывает состояние кэшей для всех концептов на вашем сайте (включая концепты, кэширование которых не производилось). Вы можете использовать данный параметр для просмотра списка всех концептов вышего сайта.
 * php SMW_conceptCache.php --create создает новые или обновляет уже существующие значения кэшей для всех концептов.
 * php SMW_conceptCache.php --delete удаляет кэши для всех концептов.

Каждое из этих действий по умолчанию выполняется для всех концептов. Но существует набор параметров для ограничения области действия только на некоторые концепты:
 * --concept "Concept name"</tt> действие будет выполнено только для концепта с заданным именем. Имя не должно содержать наименование пространства имен. Если имя содержит пробелы, оно должно быть заключено в кавычки (").
 * --hard</tt> выполняется только для сложных концептов. SMW всегда использует кэшированное значение для сложных концептов.
 * --old </tt> выполняется для концептов без кэшированных значений и со значениями старше минут.
 * --update</tt> выполняется только для концептов, которые уже имеют кэшированные значения. Для выполнения действий над концептами без кэшей используйте параметр --old </tt> с очень большим значением.
 * -s </tt>   выполняется только для концептов с id страницы не менее
 * -e </tt>     выполняется только для концептов с id страницы не более

Перечисленные параметры могут использоваться совместно для более точного задания ограничений. Например, в результате следующего вызова

php SMW_conceptCache.php --create --update --old 30</tt>

будут обновлены кэши всех концептов, которые уже их имеют и при этом кэш старше 30 минут.

Настройка SMW для использования кэширования
В SMW может обработать концепт одним из стандартных способов:
 * Вычислить элементы концепта в момент необходимости на основе текущих данные вики.
 * Получит элементы концепта из кэша.
 * Проигнорировать концепт, расценив его как запрос без результатов.

По умолчанию SMW использует существующие кэши не старще суток. Если кэш не был найден и концепт не яляется сложным, то элементы концепта вычисляются на лету. Обычно ограничения по размеру и сложности для создания концептов менее строгие, чем для встроенных запросов. Поэтому вы можете создать концепт, который нельзя использовать в качестве встроенного запроса. По умолчанию результатом для таких концептов являются данные из кэша (независимо от даты его создания) или возвращается пустой список в случае отсутствия данных. Следующий раздел описывает параметры, которые используются для настройки этого поведения.

Какие запросы можно использовать в #ask?
Для определения "сложности" запроса используют три параметра: размер, глубина, а также типы особенностей, используемых в запросе. Размер - это количество условий в запросе. Глубина - это максимальная длина цепочки вызова свойств в выражении. Например,  Some property::value </tt> имеет глубину 1, а  property1.property2::value </tt> имеет глубину 2. Особенности запроса - это типы используемых условий запроса. Вы можете использовать #ask</tt> с format=debug</tt> для определения размера и глубины запроса.

В SMW присутствуют настройки для задания максимального размера, глубины и набора доступных особенностей. Эти параметры могут быть использованы во встроенных запросах или специальных страницах. Значения по умолчанию следующие:
 * $smwgQMaxSize = 12;</tt>
 * $smwgQMaxDepth = 4;</tt>
 * $smwgQFeatures = SMW_PROPERTY_QUERY | SMW_CATEGORY_QUERY | SMW_CONCEPT_QUERY | SMW_NAMESPACE_QUERY | SMW_CONJUNCTION_QUERY | SMW_DISJUNCTION_QUERY;</tt>

По умолчанию доступными являются все функции, но для больших вики их набор можно ограничить. Например, для того чтобы разрешить использовать в запросах только категории и концепции, можно было бы установить:

$smwgQFeatures = SMW_CATEGORY_QUERY | SMW_CONCEPT_QUERY;</tt>

в LocalSettings.php. Если вы хотите также разрешить использование объединения (пересечения), то можно использовать

<tt>$smwgQFeatures = SMW_CATEGORY_QUERY | SMW_CONCEPT_QUERY | SMW_CONJUNCTION_QUERY;</tt>

Если в соответствии с правилами запрос не разрешен, то он будет автоматически упрощен. Концепты могут использовать запросы, которые не подходят под данные требования. В этом случае концепт не может быть вычислен "в живую", а результаты будут возвращены только при наличии кэша. Концепты, которые попадают под данное определение, могут быть выбраны с помощью опции <tt>--hard</tt> в <tt>php SMW_conceptCache.php</tt>. Таким образом, пользователи могут создавать (предлагать) концепции, а администраторы создают кэши для них, если это возможно.

Какие запросы допустимы в концептах?
Для концептов SMW предоставляет такой же набор свойств, как описанный выше, но с другими значениями по умолчанию:
 * <tt>$smwgQConceptMaxSize = 20;</tt>
 * <tt>$smwgQConceptMaxDepth = 8;</tt>
 * <tt>$smwgQConceptFeatures = SMW_PROPERTY_QUERY | SMW_CATEGORY_QUERY | SMW_NAMESPACE_QUERY | SMW_CONJUNCTION_QUERY | SMW_DISJUNCTION_QUERY;</tt>

Они также могут быть изменены в LocalSettings.php. Параметры по умолчанию демонстрируют, что некоторые запросы могут быть разрешены в концептах и запрещены в <tt>#ask</tt>. Как было изложено выше, такие концепты не могут быть использованы пока для них не будет вычислен кэш.

Сложные и простые концепты
В предыдущих секциях было указано, что некоторые концепты в SMW считаются "сложными" ("hard"). По умолчанию концепт считается сложным, если он представляет запрос, который не может быть встроенным. Данное определение может быть изменено заданием значения свойства <tt>$smwgQConceptCaching</tt>. Допустимыми значениями являются:
 * <tt>$smwgQConceptCaching = CONCEPT_CACHE_HARD;</tt> Значение по умолчанию, как было описано выше.
 * <tt>$smwgQConceptCaching = CONCEPT_CACHE_ALL;</tt> Все концепты объявляются сложными, т.е. концепты никогда не вычисляются "в живую", а всегда полагаются на кэш.
 * <tt>$smwgQConceptCaching = CONCEPT_CACHE_NONE;</tt> Ни один из концептов не является сложным. Концепты все еще используют кэш, если это возможно (смотри следующую секцию), но в то же время не зависят от него. Даннаю опция может быть полезна, если создавать концепты могут только опытные пользователи, которым вы полностью доверяете.

Настройка по умолчанию в SMW <tt>$smwgQConceptCaching = CONCEPT_CACHE_HARD;</tt>

Когда кэш доступен для использования?
Сложные концепты всегда пытаются использовать кэш, поскольку они не могут ничего отобразить без кэша. Для простых концептов доступно вычисление результатов на лету, поэтому SMW использует время прошедшее с последнего обновления кэша для принятия решения о дальнейших действиях. Конфигурационный параметр <tt>$smwgQConceptCacheLifetime</tt> задает какое время (в минутах) с момента последнего обновления кэш считается доступным для использования. Если конфигурация SMW позволяет вычислять элементы концепции на лету, то старые кэши не используются.

Как много элементов может быть закэшировано?
Настройка <tt>$smwgQMaxLimit</tt> определяет как много элементов для каждого концепта кэшируется.