Стоит ли хранить и получать доступ к активному набору результатов запроса в Coldfusion, а не -запрашивать базу данных?

У меня есть система поиска продуктов, использующая Coldfusion8 и MySQL 5.0.88

. Поиск товаров имеет два режима отображения:Множественный вид и Одиночный вид .

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

Прямо сейчас пользователь выполняет поиск, и я опрашиваю базу данных для

(а)общее количество записей и
(б)записи ОТ до ДО.

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

Тем не менее, я ничего не получаю с этим.

Я не могу кэшировать текущий запрос набора результатов -, потому что он уникален для каждого сеанса пользователя ().

Запросы выполняются внутри метода CFINVOKED внутри CFC, который я вызываю через AJAX, поэтому выполняется весь запрос, а затем методы CFC и CFINVOKE отбрасываются, поэтому я не могу использовать запрос запроса или хранилища переменных.cfc _.

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

Я могу сохранить запрос, используя:

 <cfset Session.resultset = query_name>

Это сохраняет весь запрос с результатами,вот так:

query
CACHED: false 
EXECUTIONTIME: 2031 
SQL: SELECT a.*, p.ek, p.vk, p.x, p.y
    FROM arts a
        LEFT JOIN p ON 
       ...
        LEFT JOIN f ON 
       ... 
        WHERE a.aktiv = "ja"
        AND 
       ... 20 conditions...

SQLPARAMETERS: [array]
1)... 20+ parameters

RESULTSET: 
 [Record # 1] 
    a: true
    style: 402
    price: 2.3
    currency: CHF
   ...
 [Record # 2] 
    a: true
    style: 402abc
   ...

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

Компромиссом будет каждый пользователь, имеющий набор результатов до 48 результатов (максимальное количество элементов на странице )в Session.scope.

Мои вопросы:
1. Возможно ли это или мне следует запросить базу данных?
2. Если у меня есть структура/массив/объект, подобный приведенному выше, как мне выбрать из него нужную мне запись по номеру стиля = как мне получить доступ к набору результатов? Я не могу просто перебрать сохраненный запрос (некоторое время пробовал это... ).

Спасибо за помощь!

0
задан frequent 13 July 2012 в 17:09
поделиться