Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
yuraha18
2 / 2 / 0
Регистрация: 16.12.2009
Сообщений: 258
1

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

22.03.2017, 23:23. Просмотров 545. Ответов 10
Метки нет (Все метки)

Всем привет. Пишу сервер для своего андроид приложения и возникло 2 вопроса по поводу синхронизации.

1. И так... Для примера представим что у меня на сервере (в БД) есть текстовая запись "Запись №1", и вот я с помощью приложения (при подключенном интернете) ее успешно обновил на сервере и локальной БД до "Запись №2". Пока есть интернет, то все ок. Но вот представим что у меня один аккаунт (user_id и его таблицы на сервере) используют одновременно планшет и смартфон. Также представим что у планшета и телефона в данный момент нет интернета и они пишут только в свою локальную БД, т.е на планшете запись меняем на "Запись №3", а на смартфоне "Запись №4".
Если сделать просто, то: смартфон подключился первым и обновил запись на сервере до "Запись №3", а потом планшет подключился и обновил до "Запись №4". Получается что обновления смартфона удалились. Как лучше поступать в таком случаи?? Есть идея возможности отката вручную к нужным настройкам, но пока не знаю как осуществить

2 вопрос. Как вообще лучше осуществлять синхронизацию, тоесть как клиент (приложение) будет знать что на сервере есть данные которых у него нет (имеется ввиду после подключения интернете)?? Добавлять к какдой таблице новое поле: дата последнего обновления и в самой аппе сохранять значение последней синхронизации (и если дата в записи позднее чем синхронизации, то обновить его в локальной БД приложения). Ну и стоить учитывать что гаджетов может быть несколько, т.е надо слушать клиенту сервер и серверу клиента. Может есть какие-то туториалы как лучше делать?

И вообще может у кого есть информация по синхронизации и ее принципах и реализациях, буду очень признален если поделитесь ею

Всем спасибо, всем добра
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2017, 23:23
Ответы с готовыми решениями:

Синхронизация приложения с сайтом
Допустим, есть приложение, данные для которого берутся из API сайта....

Синхронизация данных приложения между устройствами
Здравствуйте! Необходимо осуществить синхронизацию данных приложения на разных...

Реализовать таймаут ожидания отклика от сервера во избежание краха приложения
Вообщем есть поток в котором выполняется вот такой кусок кода ...

Ребят нужен технический совет по созданию приложения для для вывода ошибок с сервера
Здравствуйте, тут такое дело, в программировании android приложений я новичок,...

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

10
ExFau$t
567 / 511 / 115
Регистрация: 08.05.2012
Сообщений: 2,539
22.03.2017, 23:54 2
Напрямую к БД никто обращения не делает. Это у тебя в теории смарт первый, а на практике, если они в одну ячейку одновременно полезут, то что? Слушать сервер, я так думаю, тоже не очень. Обычно раз в какой-то период, при вкл. приложения например, обращаешься на сервер и подтягиваешь свежую инфу.
0
yuraha18
2 / 2 / 0
Регистрация: 16.12.2009
Сообщений: 258
23.03.2017, 00:25  [ТС] 3
я может неправильно сформулировал.
суть: если интернет есть, то записывать в локальную и потом сразу отдавать серверу и там обновляться. Если интернета нет, то писать только в локальную БД, а при появлении интернета обращатся к серверу. Только как лучше "помечать" данные которые еще не отдавались серверу?
Ну и что можно сделать в такой ситуации: смартфон постоянно подключен к интернету и соответственно все его данные актуальны на сервере, но потом начали юзать планшет (у которого давно интернета не было, и соответственно имеет очень старые данные) и фактически стер свежие данные и залил свои старые??? Можно сделать возможность отката вручную, но тут тоже вопрос: как отмечать записи, которые только обновились (так сказать временные) чтобы если что откатить эти изменения??

Добавлено через 1 минуту
ну а напрямую с БД работать не буду. Буду использовать Spring Data и Spring Web MVC
0
demixdn
310 / 255 / 79
Регистрация: 31.10.2016
Сообщений: 619
23.03.2017, 11:43 4
yuraha18, у каждой записи должен быть триггер того, что она отправлена на сервер и время ее обновления. Например, есть несколько полей, которые еще не отправились. В них значение триггера 0, вр.обн. - timestamp в момент создания/обновления. Вы блок записей с триггером 0 отправляете на сервер, вам приходит для каждой записи время ее записи в БД сервера (можно сделать массив из <PrimaryKey, Timestamp>) и у себя локально обновить для этих записей триггер и время. Это подтверждение для каждой транзакции. И если потом локально какая та строка обновилась, то сбрасывать это состояние триггера в 0, и время обновления, и опять же какой-то итерацией отправить все данные с 0 на сервер. На сервере вы сравниваете значение времени обновления прилетевших данных и своих данных. Все данные естественно приводить к единому часовому поясу.
Опять же, такое решение не учитывает возможности того, что несколько человек, отключенных от инета обновят одну и ту же запись, и потом при появлении инета отправят обновление на сервер. Тогда произойдет нехилая коллиция, ведь кому-то из них придут невалидные данные. Возможно тут стоит поиграться с хешем данных вместо timestamp.

Это решение в лоб, и скорей всего будет серьезная нагрузка на сервер. У меня лишь небольшие знания в области БД. Возможно вам стоит задать этот вопрос в других разделах форума, связанных с БД.
0
Pablito
23.03.2017, 11:55
  #5

Не по теме:

оффлайн + онлайн + синхронизация - это огромный гимор на ровном месте
человек, который ставит себе цель сделать ВСЕ ЭТО либо действительно хороший профи с опытом (врятли он стал бы задавать тут вопросы), либо просто профан, который не понимает во что ввязывается
имхо

0
ExFau$t
567 / 511 / 115
Регистрация: 08.05.2012
Сообщений: 2,539
23.03.2017, 11:55 6
yuraha18, а можно пример таких данных, где 100 пользователей будут править 1 ячейку, при этом необходимо другим 99 синхронизировать обновление?
0
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,946
23.03.2017, 13:35 7
ExFau$t, доска объявлений наверное
0
ExFau$t
567 / 511 / 115
Регистрация: 08.05.2012
Сообщений: 2,539
23.03.2017, 13:57 8
vxg, в таком случае объявление от пользователя 1 != объявлению от пользователя 2, они уникальны, и должны храниться не то, что в разных ячейках, а в разных таблицах. Каждому юзеру присваивается свой id, объявлению свой id. Не может так быть, что один пользователь перезаписал объявление другого пользователя.
0
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,946
23.03.2017, 14:17 9
ExFau$t, например в этой ячейке последняя предложенная цена работы)
0
ExFau$t
567 / 511 / 115
Регистрация: 08.05.2012
Сообщений: 2,539
23.03.2017, 14:22 10
vxg, не, ну это глупо, пишутся цены к каждому юзеру, если надо только последнюю, то выборкой по дате создания в локальной БД того юзера, что послал. Неважно, кто первый или не первый добежал до вайфая, скрипт пройдёт по всем, посмотрит даты создания записей и выдаст результат.
0
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,946
23.03.2017, 14:43 11
ExFau$t, это я просто пытаюсь выдумать что там может быть, но у ТС там может быть что то реально адское
0
23.03.2017, 14:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2017, 14:43

Из приложения А проверить наличие установленного на устройстве приложения В
Извиняюсь за нубский вопрос. Подскажите в андроид есть возможность из...

Синхронизация задач
есть 2 независимые задачи. Обе должны получать доступ к модулю wifi. Каждая из...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru