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