Опрос кеша с помощью Linq в asp.net - PullRequest
0 голосов
/ 09 декабря 2011

Поиск является наиболее часто используемой функцией на нашем веб-сайте, а поисковый запрос является наиболее интенсивным, сложным и частым запросом, который выполняется на нашей базе данных, что приводит к интенсивной загрузке процессора на сервере базы данных. Чтобы уменьшить нагрузку на БД, мы рассматривали различные стратегии кэширования. На данный момент мы намерены использовать ASP.NET Cache.

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

Именно тогда я подумал, что вместо кэширования списка следует кэшировать отдельные объекты пользователя с его идентификатором в качестве ключа и пытаться запросить кэш. На http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx я вижу, что в Cache есть метод расширения AsQueryable, но я не уверен, что это значит. Кэш - это пара ключ-значение, поэтому с помощью AsQueryable я смогу запросить ключи и получить набор пользовательских объектов или смогу запросить объекты пользователя и получить желаемый результат?

Ответы [ 2 ]

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

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

Что касается вашего решения, я думаю, вы вполне могли бы усугубить проблему или, по крайней мере, создать еще одну проблему здесь.Ваш сервер базы данных теоретически разработан для эффективной обработки произвольных пользовательских запросов в огромных информационных наборах.Linq великолепен, но на самом деле он не предназначен для специальной поисковой системы - у него нет тех возможностей индексирования, которые действительно ожидаются от поисковых систем.Тот факт, что он может представлять вещи как IQueryable, не означает, что вы должны относиться к этому таким образом.И даже если у вас есть способ эффективно выполнять поиск в кеше, у вас есть еще одна проблема, чтобы обойти ее - как определить, что наиболее часто используется?И как вы управляете кэшем ASP.NET, чтобы не начинать извлекать что-то, когда у него мало памяти?

Вам, вероятно, будет лучше обслужить здесь:

  • Начиная с некоторого хорошегоустаревшая настройка базы данных - почему ваши запросы такие медленные и дорогие?Вам не хватает где-нибудь индекса?
  • Рассматриваете кэширование вывода страницы результатов, особенно если ваши URL-адреса поиска поддерживают GET, так как им довольно легко управлять.Это отличное краткосрочное решение, если сайт тает.
  • Посмотрите на правильное построение битов поиска.Использование LIKE% независимо от% не является правильным поиском.Полнотекстовые индексы в вашей базе данных - хорошее начало.Что-то вроде lucene.net , вероятно, лучше.
0 голосов
/ 28 декабря 2011

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

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