Мы разработали приложение C# WinForms, работающее на сервере MS SQL. До сегодняшнего дня мы использовали очень простой самодельный OR-Mapper (использующий Reflection) с дешевым механизмом кэширования, реализованным с помощью шаблона singleton. Есть функция «сброса», запускаемая пользователем. Архитектура представляет собой простой двухуровневый (клиент, сервер) и трехуровневый (представление и логика на клиенте, MS SQL в качестве уровня данных на сервере).
Обычно мы загружаем около 300 строк с примерно 30 столбцами, которые меняются довольно часто (и некоторые другие таблицы, которые меняются редко). Различные экземпляры этого приложения, запущенные на разных клиентских компьютерах, имеют одни и те же 300 загруженных строк и изменяют данные в случайной строке. Приложение сразу же обновляет данные в базе данных. Прежде чем они это сделают, целостность проверяется, поэтому пользователь получает обратную связь, если что-то не так. Но для некоторых строк пользователь видит на экране старые значения, ему приходится вручную сбрасывать кеш, когда он хочет быть уверенным, что у него актуальные данные.
Было бы неплохо, если бы приложения сами считали измененные строки. Есть обновления каждые несколько секунд. Но только некоторые из этих обновлений актуальны для других приложений (в зависимости от активного фильтра...)
Решения, которые я имею в виду:
- Using a OR-Mapper with a common cache (e.g. NHibernate with a clustered cache)
- Open questions: Are these L2 caches made for client apps? Can I trigger UI updates when cache changes happen? Other OR-Mapper based solutions?
- Implementing another tier using an application server, moving logic to this application server. Run only one instance, which caches the data and sends events on the Logic Object's which notify the other clients of updated data. Don't cache any data on the clients.
- Open questions: Load on App Server? Overhead communication to the app server? Amount of work moving a logic DLL into an App Server..? Data source for Reports (directly/App server)?
- Что-то вроде этого пользователя считает: https://stackoverflow.com/questions/7593884/what-technology-to-use-for-data-persistence-cache-and-synchronization-in-n-tier
- Add some kind of data changes notifications on the logic level (broadcast based noticiation...)
- Open questions: Existing libraries? Load on SQL Server?
- Совершенно другое решение?
Я понимаю, что здесь я не получу решения. Просто нужны некоторые мысли об этих решениях (или новых)... Спасибо за любой вклад!