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

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

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

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

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

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

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

Всем спасибо, всем добра
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2017, 23:23
Ответы с готовыми решениями:

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

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

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

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

Синхронизация клиента и сервера
1. Сервер генерирует число double. Например 3.25. 2. Сервер посылает клиенту сообщение о старте....

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

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

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

Не по теме:

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

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

Синхронизация файлов с http сервера
Всем привет. Совсем недавно начал работать с питоном. Есть задача синхронизировать файлы с http...

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

Синхронизация времени с NTP сервера
Подскажите,пожалуйста!Нужно получить время с сервера синхронизации времени ntp.mobatime.ru. Как это...


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

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

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