Хорошо, подождите, потому что в этом есть много слоев, и хотя для прочтения всего этого может потребоваться некоторое время, я думаю, что ответ (ы), который мы все придумаем, будет чрезвычайно полезен для сообщества в целом. С учетом сказанного, позвольте мне установить проблему:
У меня есть настольное приложение на C # .Net (Windows Forms, но, как мне кажется, это может быть и WPF), которое представляет собой систему ввода и управления заказами на продажу. Проблема, с которой я сталкиваюсь, заключается в том, что один из самых важных списков данных, которые мне нужно использовать в приложении, довольно большой (около 15 тыс. Записей и продолжает расти) и постоянно меняется, и я хотел бы сохранить этот список в память синхронизируется с базой данных, не опрашивая базу данных каждые 2 секунды или что-то еще. Приложение также не является единичным экземпляром, поэтому все эти списки потребностей приложения заносятся в память из базы данных и сохраняются один раз для каждого экземпляра.
Хорошо, теперь, когда вы можете увидеть дилемму, давайте посмотрим, сможем ли мы найти решение.
Мои мысли:
Если мы сможем использовать .NET 4.0 (что я могу), я думаю, что ответом на хранение только одного набора данных в памяти является использование файлов, отображаемых в память. Несмотря на то, что это похоже на номинал homerun, управлять им гораздо сложнее и может быть излишним. Мысли?
Чтобы свести к минимуму загрузку данных из базы данных, я думал о чем-то вроде сохранения различных списков в текстовые файлы XML на ПК пользователя в какой-то специальной папке, а затем - одного окончательного файла XML для отслеживания файлов XML. и их даты. При запуске приложения выполняется один вызов в БД, получая список таблиц / списков и «дату последнего обновления» для каждой. Для каждого файла XML, который имеет одну и ту же дату последнего обновления, я могу загрузить из файла XML, а не запрашивать базу данных. Что касается списков, которые устарели, я мог запросить изменения с даты, которую я имею, затем загрузить файл XML и затем зафиксировать изменения. Таким образом, скорее всего, единственные изменения, которые мне придется ждать, - это изменения из наиболее часто обновляемых списков, а не всех таблиц / списков. Хорошо, я признаю, что я не лучший в объяснении вещей, но я думаю, что вы должны быть в состоянии это визуализировать.
Что касается поддержания актуальности в реальном времени, я думал о том, чтобы иметь триггеры вставки и обновления (не будет происходить удаление), которые будут вызывать SP, и тогда я немного неясен, как-то пропускаю вставленный / обновил информацию для службы WCF, на которую подписались приложения, и обновления передаются клиентам через обратные вызовы WCF. Теперь я думаю, что все это должно работать, но, например, не приведет ли это к тому, что 3 экземпляра приложения будут обновлять одно и то же изменение в памяти одновременно? Может ли служба WCF отправлять обновления только одному экземпляру на клиентский ПК; это может дифференцироваться?
Заранее спасибо за любые мысли, мнения и мнения по этому вопросу. Я зарезервирую «присуждение» ответа в течение как минимум 48 часов, так как я хотел бы дать каждому возможность добавить свои 2 цента и сделать эту тему немного более полезной для будущего ...