Подтвердить что ты не робот

Sync Framework с SQL DB: Начало работы

У меня есть приложение, которое использует SQL Enterprise для хранения всех данных в 4 разных БД. Мне нужно было создать возможность работать "офлайн" для моих пользователей. Я выполнил это через Merge Replication в локальные установки SQL Express для всех. Это "работает", но похоже на подход к кувалду.

Например, я реплицирую все 14000 человек в каждую БД, когда любой индивидуальный пользователь может только КОГДА-ЛИБО взаимодействовать со 100 или около того. Это даже не считается фактом, что они НИКОГДА не будут взаимодействовать с более чем 5 ит между соединениями с центральными БД.

Я ищу советы, указатели и, может быть, хороший учебник по Sync Framework 2 (с базами данных). Из первых рук рассказывается о том, что сработало для вас и почему также было бы очень желанным. Мне еще предстоит найти четкий и краткий (не говоря уже о текущем) учебник для работы с Sync Framework.

Моей особенностью является MS SQL Server 2005 или 2008, любая версия. Любая версия .Net (3.5 или 4). Текущий уровень данных - все LinqToSQL. В настоящее время используется не любой Sprocs.

Мои мысли до сих пор состоят в том, чтобы синхронизировать только каждый назначенный персонал и связанные с ним данные. В идеальном случае мы сразу перейдем к формату "Check In/Check Out", в котором они выбирают участников, которые планируют посетить, и затем синхронизируют необходимые данные.

Как бонус, может ли кто-нибудь сказать мне, что это называется? Я встречаю "Время от времени подключен" все время, но это кажется неточным. Было бы точнее называть их "Иногда DIS-Connected", мысли?

4b9b3361

Ответ 1

Мы использовали структуру Sync в нескольких наших проектах (один с сервером sql, один с PGsql), поэтому я могу сказать, что он работает достаточно хорошо.

Ознакомьтесь с этим пошаговым выражением, чтобы получить представление о том, что вы можете сделать.

http://code.msdn.microsoft.com/sync/Release/ProjectReleases.aspx?ReleaseId=4835

Это покажет вам, как синхронизировать данные между несколькими базами данных SQL. Вы также можете настроить хранимые процедуры "increments", чтобы принимать пользовательские параметры и фильтровать данные на основе этих параметров (например, людей, которые клиент-пользователь планирует посетить).

Я также предлагаю использовать рефлектор для декомпиляции кода рамки Sync, если вы видите wierd errors - иногда невозможно определить, где ошибка, пока не увидите, что исключение попало в код рамки. Redgate отлично работает для меня!

Сообщите мне, если вам нужна дополнительная помощь!

Ответ 2

У меня есть несколько советов и советов, которые могут быть или не быть очевидными/полезными.

Для меня это звучит как проблема, которая может быть разделена на 3 отдельных аспекта:

Процесс синхронизации

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

Нажатие изменений в автономном режиме

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

Не зная больше о приложении, сложно сделать хорошие предложения, поскольку процесс синхронизации очень зависит от бизнеса, однако некоторые вещи, которые следует учитывать, следующие:

  • Должны ли использовать возможности блокировки (или проверки) элемента, чтобы другие люди не могли изменять его во время работы в автономном режиме?
  • Если блокировка будет перегружаемой?
  • Если блокировка переопределена, что должно произойти, когда кто-то пытается сохранить изменения (процесс слияния кажется разумным выбором)
  • Должен ли кто-нибудь редактировать элемент, который они не выписали?

Если вы решите реализовать сложный автономный процесс изменения, вы можете взглянуть на рабочий процесс, используемый в распространенных VCS для вдохновения.

Изменение автономного хранилища данных

Вы можете найти SQL Compact или SQLite, поскольку ваши локальные хранилища данных представляют собой более элегантное решение (это, безусловно, упростит процесс установки), если вы используете LINQ, тогда я, вероятно, предпочел бы использовать SQL Compact, поскольку он определенно поддерживает LINQ to SQL.

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

Ответ 3

http://code.msdn.microsoft.com/sync/Release/ProjectReleases.aspx?ReleaseId=3422 Это хорошая прогулка, использующая SQL Server CE, должна отлично работать для того, что вы пытаетесь сделать, и имеет гораздо меньший размер. Мне кажется, что функциональность, которую вы теряете, не мешает тому, что вы пытаетесь сделать в наименьшей степени.

Ответ 4

Это по существу называется Distributed Computing.

В любой такой системе, над которой я работал, я обычно использовал N-Tier Architecture, чтобы допускать случайное подключение клиентскую программу на сервер базы данных на внутреннем сервере для операций CRUD. Любая работа, выполняемая клиентом, считается без подключения, поскольку они не взаимодействуют с сервером до тех пор, пока они не сохранят свои изменения.

Используя такой подход, вы должны иметь возможность сделать приложение, которое позволяет им мгновенно подключиться к некоторым данным, выполнить некоторую работу над данными и затем распространять любые изменения (CRUD) на сервер (базу данных).

Я бы сказал, что использование репликации Merge с установками Local Sql Express - это, безусловно, подход с кувалдой. Не чувствуйте себя слишком плохо, мы все делаем это время от времени: P.

ИЗМЕНИТЬ

Я сам не использовал Sync Framework, но это кажется приятным. Ознакомьтесь с Центром разработчиков Sync Framework для получения дополнительной информации об этом.

Ответ 5

Мне кажется, что Microsoft Sync может быть хорошим вариантом для вас. Здесь приведен обзор синхронизации баз данных, http://msdn.microsoft.com/en-us/sync/bb887608.aspx. Взгляните на нее и посмотрите, соответствует ли она вашим потребностям. Это звучит как идеальное решение вашей проблемы.

Ответ 6

Вопрос в том, должно ли ваше приложение запускаться на устройстве с локально сохраненными отключенными данными или создавать мобильную версию веб-интерфейса, потому что предполагается, что они всегда должны быть подключены к серверу при работе с данными?

Проекты, над которыми я работал (давным-давно), использовали компактную структуру и activesync с задней или задней частью Access или SQL Server, потому что было слишком дорого, чтобы все устройства постоянно подключались, например, к телефону. Они вывели устройство на место, необходимое для доступа к данным из отключенного db, сделали свои моды и синхронизировались, когда они вернулись в офис.

Если это то, что вы делаете, вы можете использовать свой идентификатор устройства, чтобы определить, какие случаи/строки нужно каждому устройству, но если вы думаете о разработке настраиваемого решения синхронизации, я думаю, что вы сражаетесь с неправильным сражением. Это уже сделано. Используйте проверенное решение синхронизации, ограничения и все, и сосредоточьтесь на критериях, которые вы можете использовать для ограничения синхронизированных данных.

Ответ 7

Кажется, что вам нужно больше контролировать параметры слияния данных. С этим требованием я вижу, что есть два типа данных; Данные, принадлежащие члену (случай принадлежит члену) и общие данные (ссылка, основные данные).

В этом случае у меня была бы смесь этих методов, чтобы сделать вещи полу быстрее.

Например, изменения данных Master и Reference не так уж часто бывают. Поэтому нам не нужно синхронизировать очень часто, но нужно иметь контроль над изменениями и должны/должны выполняться в центральном месте. В этом случае я сделаю изменения в моей центральной базе данных и использую подход Sledge Hammer.

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

Как уже упоминалось выше, вы можете использовать Центр разработки Sync Framework или ActiveSync.

Поскольку пороговые значения не такие строгие, как в КПК или Palmtops, мы можем попробовать ручной подход, так как у нас есть ноутбуки. Внедрение подпрограммы функциональности/процесса для подключения и создания данных, которые были созданы, обновлены и удалены (в этом случае мы должны поддерживать флаг на уровне db), используя BulkCopy Operations, наиболее распространенный подход в этом сценарии (необходимо предоставить кнопку для участников, которые кликают и вызывают, или службы для опроса и проверки возможности подключения и запуска автоматической синхронизации).

/KP

Ответ 8

После многих дней борьбы с каркасом синхронизации я рассматриваю возможность отладки и просто писать некоторые простые службы WCF и код. Мои требования довольно просты, односторонняя синхронизация от SQL2008 до SQL CE на мобильных устройствах. По моему опыту очень сложно настроить (только синхронизировать некоторые поля и т.д.) И очень медленно и неэффективно. Я думаю, что Microsoft должна сделать еще одну работу, чтобы сделать ее более легкой в ​​использовании.

Приветствия

Марк

Ответ 9

Вы пытались отфильтровать свои статьи репликации слияния на уровне строк? Это уменьшило бы размер вашей строки размером 14 тыс. Во что-то управляемое.