У меня есть пара предложений и советов, которые могут быть или не быть очевидными / полезными.
Для меня это звучит как проблема, которую можно разделить на 3 отдельных аспекта:
Процесс синхронизации
- Вы обязательно должны убедиться, что все строки имеют своего рода столбец «last_update», чтобы ваш процесс синхронизации мог эффективно и надежно определить, какие данные уже обновлены - таким образом, вы можете быть намного более агрессивными с числом записей, которые вы синхронизируете.
- Я бы избегал сложных процессов синхронизации и просто использовал бы метод грубой силы везде, где это было возможно. Для меня 14 000 записей не так уж много - с оптимизацией вы можете обнаружить, что можно синхронизировать все изменения, сделанные между соединениями, в разумные сроки. Если нет, то я, вероятно, все еще буду весьма либерален в отношении того, что вы синхронизируете, чтобы пользователи не работали с устаревшими данными, не осознавая этого.
Подтверждение изменений, внесенных в автономном режиме
Если это вообще возможно, я бы, вероятно, просто запретил бы изменения в автономном режиме - это невозможно, тогда вы должны рассматривать изменение как отдельное (и, вероятно,
довольно сложный) процесс сам по себе.
Не зная больше о приложении, трудно сделать хорошие предложения, поскольку процесс синхронизации сильно зависит от бизнеса, однако следует учитывать следующие моменты:
- Должны ли пользователи иметь возможность блокировать (или извлекать) элемент, чтобы другие люди не могли изменить его, когда они работают в автономном режиме?
- Должен ли быть блокируемый замок?
- Если блокировка переопределена, что должно произойти, если кто-то попытается сохранить изменения (процесс слияния кажется разумным выбором)
- Должен ли кто-то иметь возможность редактировать элемент, который он не проверил?
Если вы решите внедрить сложный процесс автономных изменений, вам, возможно, захочется взглянуть на рабочий процесс, используемый в общих распределенных VCS для вдохновения.
Изменение автономного хранилища данных
Возможно, вы найдете использование SQL Compact или SQLite в качестве локального хранилища данных более элегантным решением (это, безусловно, облегчит процесс установки), если вы используете LINQ, тогда я Вероятно, я бы выбрал SQL Compact, поскольку он определенно поддерживает LINQ to SQL.
Сначала я бы остановился на двух вышеупомянутых, так как это изменение обеспечивает наименьшее количество улучшений для конечного пользователя и, вероятно, является наиболее эффективным - вышеупомянутые два полностью достижимы, все еще используя SQL Server Express в качестве локального хранилища данных.