Bt-teh.ru

БТ Тех
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Синхронизация данных между сервером и клиентами

Синхронизация данных между сервером и клиентами

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

В общем проблема в том, что я пишу на wpf C# linqtosql sql2008 vs2012 приложение, которое обращается к базе. Пользователей много и изменений тоже. Необходимо периодически синхронизировать данные на клиенте (на мой взгляд классическая задача). Попробовав тупо обновлять все данные, получил ужасный результат — данных много обновление доходит до 30 секунд.

В шапки прочитал про основные принципы отслеживания изменений (понравился пункт 3 и 4 ), но в интернете конкретных реализаций ни одной не нашел.

В книгах и msdn тоже ничего, в основном основы.

Помогите найти ссылки на конкретные примеры с linqtosql.

сейчас примерно так:

и так для каждой таблицы.

Подозреваю должен быть какой-то не сложный способ, возможно в самом linq.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Синхронизация данных между клиентами/серверами
Есть множество клиентов-серверов. Как синхронизировать между ними данные. (все время появляются.

Связь между сервером и клиентами
Всем привет. Работаю над приложением сервер/клиенты. И появились чисто организационные вопросы.

Синхронизация времени между клиентами и сервером
Есть тестовый простой игровой сервак, и клиенты, соединение есть, пакеты пересылаются. Мне.

Socket между двумя клиентами и сервером
Здравствуйте. Разобрал урок как делать обмен данными между сервером и клиентом, а как сделать обмен.

Сообщение от Serge73

Да что Вы говорите ! Серьезно .

Так и представляю себе картинку такую:

Эпизод 1.
Сайт продажи билетов, например ржд. Тысячи поездов по всей России и туче стран, в каждом пара десятков вагонов, в каждом вагоне от 24 до 52 мест. Да еще на три месяца вперед. Помножим.. Ага ! Несколько лимонов мест.

Эпизод 2.
Сидят себе в Москве, Куало-Лумпуре, Гвадалахаре и Мохосранске Вани, Пети, Сени, Майклы и Джошуа. Всего так несколько сот тысяч. Одномоментно ! Т.е. ОДНОВРЕМЕННО. Хотят, панимаш, купить билеты на поезд.
Им всем нужна актуальная информация.

Эпизод 3. Ваня решил сходить в туалет, Сеня услышал как Спартак забил "коням", рванул к телеку да так и застыл там. А браузер не закрыл Ни первый, ни второй.

И вот каждую секунду (3 сек, 5 сек, минуту — кто сколько даст ?) Браузер требует от сервера перечитки ВСЕХ свободных мест во ВСЕХ поездах на ВСЕ даты. Для ВСЕХ браузеров, на которых открыта соотв. страничка.

Несколько вопросов:
1. Это какой надо иметь сервер ?
2. Это какую нужно иметь сеть ?
3. Это какой нужно иметь ПК с браузером ?

И наконец последние 2 вопроса

Ребята, неужели Вы думаете, что так работает большинство (если не все) "базовых" приложений ?

Если Вам все-таки актуализация нужна (а такие приложения существуют, например в системах диспетчирования), то некисло было бы озвучить и стоящую перед вами Задачу. А также объемы передаваемых данных и прогнозируемое реальное кол-во пользователей.

Добавлено через 20 минут
Приведу пример из собственной практики.
Было это еще в 90-х.
Торговый дом, несколько офисов. Большой склад товаров.
В офисах сидят девочки, которые выписывают счета мелкооптовикам.
На складе по выписанным счетам выдают товар.

Все — через мою программу (на Paradox3.5 — был тогда в "тренде")

И вот смотрит Наташа на экран и видит, что на складе есть 20 упаковок "Мивины куриной". Она их в счет — покупатель возжелал. Бац — а ей сообщение "Товара нет на складе в нужном количестве. Только 5 уп осталось).

Покупатель недоволен, Наташа в замешательстве. Она ведь не знала, что Маша, сидящая в соседнем офисе только что выписала 15 упаковок своему клиенту.

Вызывают срочно меня.
Приезжаю. У дира в кабинете человек 20 "нацяльников" — все хмурят бровки и ругаюцца.
Объясняют что к чему. Вкратце можно сказать двумя словами "Невозможно работать !"

Я пытаюсь объяснить что будет если сделать "красиво". Не понимают.
"Хорошо", — говорю я, — "будет Вам "красиво".

Через день привожу им новый деплой (с рефрешами по таймеру). И быстро уезжаю !

Приезжаю в свой офис (прошло не более 20 мин — моя контора рядом с торгашами находилась), а мне мои девочки в один голос — "Где ты шастаешь, тут телефон как утюг — все тебя спрашивают".

Звоню диру. "Ты что сделал, редиска ! Все стоит, очереди огромные, ни склад, ни бухгалтерия, ни менеджеры, ни девочки не могут работать — все висит !"

Короче, пришлось все менять "взад" — все опять залетало и все довольны. А Наташа с Машей.. привыкли. Через пару дней они уже и не мыслили иначе. А чтобы покупатели не обижались, перед каждым "окошком" повесили объявление, что мол наличие товара на складе определяется на момент выписки счета.

Читать еще:  Регулировка кулера hp dv6

ЗЫ. Кстати, в приложении изначально было кнопулька "Обновить", но ее просто не замечали. А когда спрашивали и я отвечал, непонимающе пожимали плечами). С тех пор эта кнопка стала воистину "горячей".

Синхронизация данных между Android-приложением и веб-сервером

Я хочу синхронизировать данные (например, запись db, media) между Android-приложением и сервером. Если вы видели Evernote или подобные приложения, вы, безусловно, понимаете, что я имею в виду.

У меня есть вопрос (представьте, что мы хотим синхронизировать записи БД):

Каждый пользователь имеет часть пространства сервера для себя (например, Evernote или Dropbox ). Возможно, пользователь создает новые записи по мобильному телефону и создает новые записи на сервере. Как я могу сопоставить эти записи вместе? Если есть записи с одинаковым ID Какие алгоритмы вы предлагаете мне?

За исключением JSON, Есть ли способ отправить данные между мобильным устройством и сервером?

Если SyncAdapter и ContentProvider могут решить мои проблемы, объясните, пожалуйста, именно для меня. (Если бы вы могли предложить мне несколько образцов или учебных пособий, или любые советы или ключевые слова, которые помогут расширить/направлять мой поиск, также будут оценены).

11 ответов

Я постараюсь ответить на все ваши вопросы, обратившись к большему вопросу: Как синхронизировать данные между веб-сервером и андроидным приложением?

Синхронизация данных между вашим веб-сервером и Android-приложением требует наличия на вашем устройстве Android нескольких компонентов.

Постоянное хранилище:

Так ваш телефон фактически сохраняет данные, которые он получает с веб-сервера. Одним из возможных способов достижения этого является создание собственного пользовательского ContentProvider, поддерживаемого базой данных Sqlite. Порядочный учебник для поставщика контента можно найти здесь: http://thinkandroid.wordpress.com/2010/01/13/writing-your-own-contentprovider/

ContentProvider определяет согласованный интерфейс для взаимодействия с вашими сохраненными данными. Это может также позволить другим приложениям взаимодействовать с вашими данными, если вы хотите. За вашим ContentProvider может быть база данных Sqlite, кэш или любой произвольный механизм хранения.

Хотя я бы рекомендовал использовать ContentProvider с базой данных Sqlite, вы могли бы использовать любой механизм хранения на основе Java, который вы хотели.

Формат обмена данными:

Это формат, который вы используете для отправки данных между вашим веб-сервером и вашим Android-приложением. Двумя самыми популярными форматами в наши дни являются XML и JSON. При выборе формата вы должны подумать о том, какие библиотеки сериализации доступны. Я знаю, что там есть фантастическая библиотека для сериализации json под названием gson: https://github.com/google/gson, хотя я уверен, что подобные библиотеки существуют для XML.

Служба синхронизации

Вам понадобится какая-то асинхронная задача, которая может получить новые данные с вашего сервера и обновить мобильный контент, чтобы отразить содержимое сервера. Вы также захотите уведомить об этом сервер при внесении локальных изменений в контент и хотите отразить эти изменения. Android обеспечивает шаблон SyncAdapter как способ легко решить этот шаблон. Вам нужно будет зарегистрировать учетные записи пользователей, а затем Android выполнит много волшебства для вас и позволит вам автоматически синхронизировать. Вот хороший учебник: http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/

Что касается того, как вы определяете, совпадают ли записи, обычно вы создадите элементы с уникальным идентификатором, который вы храните как на устройстве Android, так и на сервере. Вы можете использовать это, чтобы убедиться, что вы ссылаетесь на одну и ту же ссылку. Кроме того, вы можете хранить атрибуты столбцов, такие как «updated_at», чтобы убедиться, что вы всегда получаете самые свежие данные или вы случайно не записываете новые записанные данные.

Синхронизация данных между Android-приложением и веб-сервером [закрыто]

Хотите улучшить этот вопрос? Обновите вопрос, чтобы он фокусировался только на одной проблеме, отредактировав этот пост .

Закрыто 3 года назад .

Я хочу синхронизировать данные (например, запись БД, медиа) между приложением Android и сервером. Если вы видели Evernote или похожие приложения, вы, безусловно, понимаете, что я имею в виду.

У меня есть вопрос (представьте, что мы хотим синхронизировать записи БД):

Каждый пользователь имеет часть серверного пространства для себя (например, Evernote или Dropbox ). Возможно, пользователь создает новые записи по мобильному телефону и создает новые записи на сервере. Как я могу сопоставить эти записи вместе? Если есть записи с одинаковым идентификатором. Какие алгоритмы вы мне предлагаете?

Кроме JSON , есть ли способ передачи данных между мобильным устройством и сервером?

Если SyncAdapter и ContentProvider может решить свои проблемы, пожалуйста , объясните , как раз для меня. (Если бы вы могли предложить мне несколько образцов или учебных пособий ИЛИ любые советы или ключевые слова, которые помогут расширить / направить мой поиск, мы также будем благодарны).

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

Синхронизация данных между вашим веб-сервером и приложением для Android требует наличия нескольких различных компонентов на вашем устройстве Android.

Читать еще:  Регулировка подачи воздуха в печь камин

Постоянное хранение:

Вот как ваш телефон на самом деле хранит данные, которые он получает от веб-сервера. Один из возможных способов сделать это — написать свой собственный ContentProvider, поддерживаемый базой данных Sqlite. Достойное руководство для контент-провайдера можно найти здесь: http://thinkandroid.wordpress.com/2010/01/13/writing-your-own-contentprovider/

ContentProvider определяет последовательный интерфейс для взаимодействия с сохраненными данными. Это может также позволить другим приложениям взаимодействовать с вашими данными, если вы хотите. За вашим ContentProvider может быть база данных Sqlite, кэш или любой другой механизм хранения.

Хотя я бы определенно рекомендовал использовать ContentProvider с базой данных Sqlite, вы можете использовать любой механизм хранения на основе Java, который вы захотите.

Формат обмена данными:

Это формат, который вы используете для отправки данных между вашим веб-сервером и вашим приложением для Android. Два самых популярных формата в наши дни — это XML и JSON. При выборе вашего формата, вы должны подумать о том, какие библиотеки сериализации доступны. Я лично знаю, что есть фантастическая библиотека для сериализации json под названием gson: https://github.com/google/gson , хотя я уверен, что подобные библиотеки существуют для XML.

Служба синхронизации

Вам понадобится какая-то асинхронная задача, которая может получать новые данные с вашего сервера и обновлять мобильный контент, чтобы отражать контент сервера. Вы также захотите уведомлять сервер всякий раз, когда вы вносите локальные изменения в контент, и хотите отразить эти изменения. Android предоставляет шаблон SyncAdapter как способ легко решить этот шаблон. Вам нужно будет зарегистрировать учетные записи пользователей, и тогда Android выполнит за вас много магии и позволит вам автоматически синхронизироваться. Вот хороший учебник: http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/

Что касается того, как вы определяете, являются ли записи одинаковыми, обычно вы создаете элементы с уникальным идентификатором, которые сохраняются как на устройстве Android, так и на сервере. Вы можете использовать это, чтобы убедиться, что вы ссылаетесь на ту же ссылку. Кроме того, вы можете хранить атрибуты столбцов, например «updated_at», чтобы всегда получать самые свежие данные или случайно не записывать поверх вновь записанных данных.

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

Вы должны изучить следующие темы, которые вам обязательно помогут:

SyncAdapter: компонент адаптера синхронизации в вашем приложении инкапсулирует код для задач, которые передают данные между устройством и сервером. На основе планирования и триггеров, которые вы предоставляете в своем приложении, платформа адаптера синхронизации запускает код в компоненте адаптера синхронизации.

Realm : Realm — это мобильная база данных: замена SQLite и Core Data.

Модификация HTTP-клиента с безопасным типом для Android и Java от Square, Inc. Нужно учиться умному способу модернизации

Удачи всем новым ученикам. 🙂

Если вы напишете это сами, вот некоторые моменты, о которых следует помнить

Правильная аутентификация между устройством и сервером синхронизации

Протокол синхронизации между устройством и сервером. Обычно он проходит в 3 этапа: аутентификация, обмен данными, обмен статусами (какие операции работали, а какие — не выполнялись)

Выберите свой формат полезной нагрузки. Я предлагаю XML на основе SyncML в сочетании с форматом на основе JSON для представления фактических данных. Таким образом, SyncML для протокола и JSON для фактических данных, которыми обмениваются. Использование JSON Array при манипулировании данными всегда предпочтительнее, так как к ним легко получить доступ с помощью JSON Array.

Отслеживание изменений данных как на клиенте, так и на сервере. Вы можете вести список изменений идентификаторов, которые меняются и выбираются во время сеанса синхронизации. Также очистите журнал изменений, поскольку объекты успешно синхронизированы. Вы также можете использовать логическую переменную для подтверждения статуса синхронизации, т.е. в последний раз синхронизации. Для конечных пользователей будет полезно определить время последней синхронизации.

Необходимо иметь способ связи с сервером на устройство, чтобы начать сеанс синхронизации при изменении данных на сервере. Вы можете использовать C2DM или написать свою собственную постоянную коммуникацию на основе TCP. Подход tcp очень прост

Способ репликации изменений данных на нескольких устройствах

И, наконец, что не менее важно, способ обнаружения и обработки конфликтов

Синхронизация серверов распространения

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

Вы можете выполнять синхронизацию серверов распространения в автоматическом режиме через определенные промежутки времени. Вы также можете напрямую вручную синхронизировать серверы распространения. В этом разделе рассматриваются оба варианта.

Читать еще:  Бачок для унитаза регулировка воды

Перед попыткой синхронизации всех серверов распространения убедитесь, что консоль содержит необходимые файлы. Для получения информации о загрузке исправлений в каталог исправлений см. раздел Загрузка исправлений. Чтобы загрузить последние версии программ на консоль, выберите Справка > Обновить файлы.

Другим вариантом автоматической синхронизации серверов распространения является использование репликации распределенной файловой системы (DFS). Функция репликации DFS доступна, начиная с ОС Windows Server 2003 R2, и требует использования службы Active Directory.

Создание отчета о состоянии

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

Автоматическая синхронизация серверов распространения

Чтобы настроить программу на автоматическую синхронизацию программ, определений и/или исправлений с сервером распространения:

1. В окне Добавить запланированную синхронизацию на верхней панели выберите компонент, который необходимо синхронизировать.

Компоненты, которые можно выбрать для синхронизации:

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

Загрузка исправлений: Все исправления, содержащиеся в каталоге загрузки исправлений консоли будут скопированы на сервер распространения.

Все загруженные программы, определения и исправления. Все соответствующие компоненты синхронизируются.

2. На верхней панели выберите сервер распространения, который будет синхронизирован с консолью.

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

3. Щелкните Добавить запланированную синхронизацию.

Появится диалог Запланированная синхронизация.

4. Укажите, когда выполнять синхронизацию.

Поле Добавить задержку (дни) (доступно, если синхронизация выполняется на помесячной основе) позволяет отложить синхронизацию на срок до 31 дня. Например, вы можете использовать это для планирования ежемесячной синхронизации, которая всегда выполняется через четыре дня после исправления во вторник. Вы можете сделать это, указав Второй вторник, а затем с помощью параметра Добавить задержку (дни) для задержки операции на четыре дня.

5. Нажмите Сохранить.

Новая запись о запланированной синхронизации появляется на панели Запланированная автоматическая синхронизация. В запланированное время соответствующие файлы будут скопированы на сервер распространения. Если время синхронизации совпадает с загрузкой новых файлов на консоль, процесс синхронизации встает в очередь и выполняется после завершения загрузки.

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

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

Синхронизация выбранных серверов распространения вручную

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

Для выполнения синхронизации вручную:

1 Если синхронизация компонентов программы и файлов данных выполняется вручную, убедитесь, что на консоли есть последние версии файлов, выбрав Справка > Обновить файлы.

При этом последние версии файлов из местоположения, указанного на странице Сервис > Параметры > Загрузки , будут загружены и сохранены в каталоге данных консоли, заданном по умолчанию:

C:ProgramDataIvantiSecurity ControlsConsoleDataFiles C:ProgramDataScriptLogicPatch AuthorityConsoleDataFiles

2. Если синхронизация исправлений выполняется вручную, убедитесь, что каталог загрузки исправлений содержит все исправления, которые вы хотите иметь на сервере распространения. См. раздел Загрузка исправлений для получения подробной информации.

Исправления содержатся в каталоге исправлений по умолчанию:

C:ProgramData IvantiSecurity ControlsConsolePatches ScriptLogicPatch AuthorityConsolePatches

3. На панели Запланированная автоматическая синхронизация выберите один или несколько объектов для запланированной синхронизации.

4. Нажмите Выполнить.

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector