Можно ли кешировать ColdFusion Query of Query - PullRequest
2 голосов
/ 08 декабря 2011

У меня есть запрос, который возвращает все переводы для сайта.Он делает это, получая все переводы на желаемом языке пользователя, затем остальные на языке сайта по умолчанию, а затем любые другие строки, которые не были переведены.Я использую cachedwithin в этом запросе, так как данные меняются не часто, и я сбрасываю этот кеш запросов, если переводы изменены.Затем я использую Query of Query от ColdFusion, чтобы получить индивидуальную запись, которая мне нужна.Это значительно повысило производительность.

Мне было интересно, возможно ли дополнительно кешировать запрос Query of Query для дальнейшего повышения производительности.Кажется, он работает, так как загрузка страницы происходит на 1/6 быстрее, но есть ли какие-либо ошибки с этой техникой?

Запрос ниже.

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Существует одна большая проблема с кэшированием запроса запроса.

Документация для кэширования запроса гласит:

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

Однако у Query of Query нет источника данных, имени пользователя или пароля, поэтому вы теряете многокеш "защита.Запрос в том виде, в котором он указан в вашем вопросе, будет конфликтовать с любыми другими запросами на вашем сервере, которые имеют такое же имя и форматирование.Поэтому, если у вас есть несколько веб-сайтов, использующих этот код, тогда первый загруженный веб-сайт будет диктовать переводы, используемые на остальных веб-сайтах.

Быстрый способ обойти этот запрос, чтобы сделать запрос более

<cfquery name="qryTranslation" dbtype="query">
    SELECT
        TranslationString
    FROM
        qryGetText
    WHERE
        TranslationHash = <cfqueryparam value="#StringHash#" cfsqltype="cf_sql_varchar">
        AND DesiredLanguageID = <cfqueryparam value="#Arguments.LanguageID#" cfsqltype="cf_sql_bigint">
        AND '#Variables.DSN#' = '#Variables.DSN#'
</cfquery>

Измените Variables.DSN на значение атрибута источника данных в основном запросе.Если вы не доверяете этой переменной, сделайте ее также cfqueryparam с обеих сторон оператора.

1 голос
/ 08 декабря 2011

Можно ли кешировать запрос ColdFusion Query

Да, это возможно.

Однако есть ли какие-либо ошибки с этим методом?

Ваши запросы будут кэшироваться на основе его подписи, поэтому в вашем случае это StringHash и Arguments.LanguageID.Если у вас есть кэшированный QofQ для каждого перевода на странице, на многих страницах вашего сайта, то вы могли бы потенциально максимально увеличить значение «Максимальное количество кэшированных запросов».Если это произойдет, другие, потенциально большие и более важные, кэшированные запросы в кеше запросов могут быть удалены.

Вычисление подходящего "Максимального количества кэшированных запросов" может быть определено путем нагрузочного тестирования и использования встроенного монитора сервера для отслеживания количества запросов в кэше.

...