Избегайте замедлений при использовании сторонней базы данных - PullRequest
1 голос
/ 17 января 2011

Основная схема моей задачи такова:

  • Веб-сайт (ASP.NET/C#), размещенный в специализированной хостинговой компании (местоположение 1)
  • База данных компании (SQL Server) с записями соответствующих данных (местоположение 2).
  • Расположение 1 и 2 подключено через VPN.
  • Клиент, посещающий веб-сайт и желающий получить данные из базы данных компании.
  • Нет возможности изменить расположение или макет сервера (т. Е. Перемещение веб-сайта на внутренний сервер невозможно).

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

Когда пользователь входит в раздел сайт нуждается в данных БД, вы тянете все необходимые таблицы из базы данных в набор данных в памяти. Все последующие просмотры / обновления данных сделано на этом наборе данных. Когда пользователь листья (выход из системы, время ожидания сеанса, браузер закрыт и т. д.) отправлено на сервер SQL.

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

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

Любой вклад в вышеизложенное или некоторые свежие идеи будут приветствоваться.

Ответы [ 2 ]

1 голос
/ 17 января 2011

Если вы еще этого не сделали, во-первых, я бы внимательно рассмотрел доступную полосу пропускания и убедился, что у вас определенно есть проблема с удаленными вызовами БД.

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

1 голос
/ 17 января 2011

Кэшируйте статические данные (функция кэширования asp.net) и создавайте как можно меньше запросов.

Попробуйте создать двухэтапный процесс для обновления базы данных с некоторыми обратными вызовами клиента, где это необходимо, чтобы клиент чувствовал, что у него есть отзывчивый веб-сайт. (Аякс сиял бы в этой ситуации)

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