хранение часто встречающихся строк поиска и их результатов в кэше ASP.Net - PullRequest
1 голос
/ 10 июля 2009

У меня есть функция поиска на моем сайте, доступная с каждой страницы. Типичная верхняя часть текстового поля главной страницы и кнопки сделки. Я ищу лучший способ выполнить мое кэширование наиболее распространенных строк поиска и их результатов с помощью System.Web.Caching.Cache.

Я думал о том, чтобы объединить строку поиска с некоторыми применимыми данными о разрешениях группы пользователей и использовать ее в качестве ключа кэша со значением List.

пример ключа кеша:

Microsoft Visual Studio 2008 Service Pack 1--usergroup2,3,6,17,89

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

Есть ли уже широко используемый метод для достижения того, что я пытаюсь сделать? Мой вопрос вообще имеет смысл? Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 10 июля 2009

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

Длина ключа - это максимальная длина самой «строки».

Согласно документации здесь: http://msdn.microsoft.com/en-us/library/system.web.caching.cache.add.aspx, ключ может быть определен в строке со значением в типе объекта.

Я бы предложил пометить пользовательский объект уникальным ключом, чтобы при запросе из кэша можно было возражать против пользовательского объекта с более сложной информацией, помеченной в пользовательском объекте.

РЕДАКТИРОВАТЬ 11072009_1154

После того, как я снова внимательно прочитал ваше требование, я заметил, что ваша цель - кэшировать часто встречающуюся строку поиска.

В данном примере часто используемой строкой поиска может быть «Microsoft Visual Studio 2008 с пакетом обновления 1». На мой взгляд, это должен быть ключ, в то время как значение - это пользовательский объект, который будет иметь дополнительные свойства для хранения других ваших необходимых атрибутов.

В целом, это может быть пример: Ключ: «Microsoft Visual Studio 2008 с пакетом обновления 1» Значение: CustomObjectInstance, где: CustomObjectInstance.UserLanguage = "английский" и CustomObjectInstance.UserLocalization: "США", CustomObjectInstance.UserKeyboardLayout = "Великобритания" и т. Д.

AFAIK, Cache реализует словарный тип структуры данных, поэтому ключ должен быть достаточно уникальным. Итак, если ваш ключ «Microsoft Visual Studio 2008 с пакетом обновления 1 (SP1) - группа пользователей 2, 3, 6, 17, 89») Как вы можете уникальным образом идентифицировать этот конкретный ключ в своих веб-приложениях ASp.NET? Потому что в моем текстовом поле поиска я не буду вставлять usergroup2,3,6,17,89

Подумайте также о функциональности поиска по сайту в StackOverflow: пользователи будут вставлять общую строку поиска, т. Е. «Изучить материал jquery», тогда, на мой взгляд, в ключе вашего кэша должна быть запись «материал изучения jquery».

РЕДАКТИРОВАТЬ 11072009_1250

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

Означает, что ваш кеш будет иметь ключ (строку) и значение, которые снова указывают на словарь.

Другое возможное решение - использовать эту функцию с помощью полнотекстового поиска по SQL Server. Я не совсем знаком с полнотекстовым поиском по SQL Server, но было бы неплохо, если бы мы могли использовать эту функцию в существующей инфраструктуре, если возможно.

0 голосов
/ 10 июля 2009

Кэширование результатов поиска - довольно распространенная техника. ASP.NET Cache будет хранить все кэшированные данные в памяти для более быстрого доступа. Все зависит от того, сколько памяти доступно вам для кеширования. Если вы хотите отклониться от подхода ASP.NET Cache, есть еще один способ реализовать это - этот метод для кэширования данных, полученных в результате поиска, заключается в сохранении их в таблице базы данных.

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

РЕДАКТИРОВАТЬ: И, что касается вашего вопроса о длине ключа кеша; это строка, и длина строки зависит от памяти, доступной для ее хранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...