2015-02-12 2 views
1

У меня есть три стола в моей базе данных sql Скидки, Компании, Комментарии. И на моей главной странице у меня есть область подсказки, где мне нужно отображать альтернативные данные из этих 3 таблиц на основе определенных условий во время обновления каждой страницы (эти таблицы имеют более 1000 записей). Итак, в таком случае, какой будет наилучший вариант для извлечения данных из этих таблиц?Как управлять частым доступом к данным в приложении .net?

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

Просьба представить свои предложения.

В настоящее время я планирую создать СП для поиска данных и сохранить значение, возвращаемое в сеансе.

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

ответ

0

Одно из предложений - подумать о своей базе данных как о простом хранилище для сохранения состояния. Уровень вашего приложения может кэшировать коллекции ваших бизнес-объектов, сохранять их при их изменении и немедленно возвращать состояние в ваш уровень представления (веб-страницу).

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

+0

Спасибо Ed, В настоящее время я планирую создать SP для извлечения данных и сохранить значение, возвращаемое в сеансе. Чтобы мы могли получать доступ к данным из этого сеанса, каждый раз переходим к DB каждый раз при обновлении страницы. Но не знаю, есть ли другой эффективный способ сделать то же самое. –

3

Доступ к данным каждый раз из базы данных не является хорошей идеей

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

Теперь для загрузки страницы после обновления каждой страницы требуется слишком много времени.

Знаете ли вы, что занимает слишком много времени? Это код клиентской стороны или код сервера (используйте Glimpse, чтобы узнать это)? Если серверная сторона, это код, который попадает в БД и время выполнения запроса или его серверную сторону в манипуляции с памятью.

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

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

Надеюсь, это поможет.

+0

Спасибо, на самом деле это работает, как на нашей целевой странице будет одна область подсказки со случайным выбором трех (например, A, B, C) вопросов из этих трех таблиц. И если пользователь нажимает на B, он будет перенаправлен на страницу сведений B, в то же время новые случайным образом выбранные A, B, C будут загружаться в этой области запроса и так далее. И причина слишком многого времени - мой код на стороне сервера, потому что каждая таблица содержит 1000 записей. Поэтому каждый раз, чтобы выбрать мои A, B, C, мне нужно выполнить определенные проверки условий. Это вызывает задержку –

+0

Будет ли изменен вопрос, если пользователь обновит страницу или останется таким же для одного пользователя после входа в систему? – SBirthare

+0

Нет вопросов, которые будут меняться при обновлении каждой страницы, и не обязательно отображать данные до даты с БД на каждом обновлении страницы. –

1

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

извинить опечаток, на мобильных устройствах, так что никаких проверки компиляции:

var tableA = HttpContext.Cache.Get("TableA") 
if tableA == null { 
    //if its null, there was no copy in the cache so create your 
    //object using your database call 
    tableA = Array, List, however you store your data 
    //add the item to the cache, with an expiration of 1 minute 
    HTTPContext.Cache.Insert("TableA", tableA, null, NoAbsoluteExpiration, TimeSpan(0,1,0)) 
} 

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

+0

Это похоже на другой хороший вариант. Спасибо, что поделились этим –

Смежные вопросы