powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Стратегия синхронизации данных между frontEnd и backEnd
25 сообщений из 66, страница 1 из 3
Стратегия синхронизации данных между frontEnd и backEnd
    #40001714
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, пишу приложение состоящее из frontEnd (NuxtJS) и BackEnd (Asp Core) части.
В результате работы пользователя происходит редактирование данных укрупненно представленных в виде следующей модели:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
[
   {
      "parentID":"1",
      "children":[
         {
            "childID":"1"
         },
         {
            "childID":"2"
         },
         {
            "childID":"3"
         }
      ]
   },
   {
      "parentID":"2",
      "children":[
         {
            "childID":"4"
         },
         {
            "childID":"5"
         },
         {
            "childID":"6"
         }
      ]
   }
]



Изменение модели заключается в добавлении/удалении из массива корневых элементов ({"parentID":1...}), добавление/удаление дочерних элементов внутри родительских({"childID":"4"}). Я хочу сделать теневое сохранение результатов работы пользователя на BackEnd - по таймеру будет считываться данные с клиента и отправляться на бэкэнд для сохранения.
Соответственно я столкнулся с выбором стратегии сохранения данных.
1) Каждый раз отправляем полностью объект с данными для сохранения- на бэкэнде старый стираем, поверх него записываем новый.
+:
простота
отсутствие промежуточных состояний данных
-:
передача избыточных данных- они не поменялись, но все равно их сохраняем
2)На front храним предыдущую версию отправленных данных и отправляем только в том случае, если есть хоть одно отличие в сравнении с текущей
+:
Отбрасываем отправку дублирующих запросов
-:
Появляется хранение промежуточного состояния-уязвимая точка приложения, при падении которой происходит потеря последней версии данных
3)Создание на front логики, которая будет сравнивать текущее состояние данных и предыдущее сохранение и выделять конкретные группы изменений:
*созданные корневые ({"parentID":1...}) записи
*удаленные корневые записи
*редактированные корневые записи(изменения в массиве children)
на бэкэнд отправляется что-то вроде
Код: javascript
1.
2.
3.
4.
5.
{
  created:[],
  deleted:[],
  updates:[]
}

и на бэкэнде делается соответствующие команды для редактирования данных.
+:
минимально объем отправленных данных- отправляется только то, что действительно изменилось
-:
довольно сложная реализация
много этапов, на котором что-то может пойти не так и исказит данные
4)Дублируем каждое действие на front. То есть пользователь добавил корневой элемент- отправляем http-запрос сделать аналогичную команду с данными на бэкэнде, удалил, отредактировал- аналогично.
+:
не нужно хранить промежуточных состояний на front
несложная логика реализации
-:постоянный спам беэенда мелкими запросами, необходимость для пользовательского UI ждать, пока backend вернет ответ, что запрос прошел успешно.

Соответственно вопрос, возможно есть решение, которое лежит вне той плоскости, где выбирается между избыточностью отправляемых данных, простотой и минимально необходимым количеством http-запростов, но сложностью.
Какие есть best-practice для подобных ситуаций именно в архитектурном плане?Спасибо
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40001834
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,

и как часто эту вашу модель вообще редактировать будут?
если один раз отредактируют и забудут на месяц, то вариант 1 вполне себе подходит
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40001919
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
Соответственно вопрос, возможно есть решение, которое лежит вне той плоскости, где выбирается между избыточностью отправляемых данных, простотой и минимально необходимым количеством http-запростов, но сложностью.


Можете как-то по-точнее выразить задачу?
Что конкретно нужно?

vb_sub
Какие есть best-practice для подобных ситуаций именно в архитектурном плане?Спасибо


Лучшие практики применяются к задачам для достижения вполне определённых и конкретных результатов.

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

Без конкретики сложно о чём-то говорить.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40001967
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
частота редактирования в пике-1 изменение в 3 секунды.
Объем редактированной информации-1 родительский объект({"parentID":1...}) или 1 дочерний внутри какого-либо родительского("childID":"4"}).
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40001971
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
все приведенные мной практики- компромиссные то есть улучшая какую-либо одну характеристику, приходится делать хуже другую.
Если кратко о задаче- то нужно чтобы на frontend и на backend был один и тот же объект данных, но редактирование этого объекта можно осуществлять только с frontend.
Сейчас рассматриваю возможность попробовать 4-й вариант, только не через http, а через webSocket соединение.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002135
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сюрприз, но уэб-сокет это обёртка над хттп.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002150
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
но судя по бенчмаркам и тестам на размер передаваемых данных сокеты лучше подходят для частой пересылки данных малыми объемами. Ну а что сюрприз, это да, я ожидал что сокеты будут пониже уровнем, чем http.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002152
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
skyANA,
частота редактирования в пике-1 изменение в 3 секунды.
Объем редактированной информации-1 родительский объект({"parentID":1...}) или 1 дочерний внутри какого-либо родительского("childID":"4"}).

Это типа пользователь раз в месяц зашёл и тут ткнул, через 3 секунды там ткнул, ещё через 3 сям?
А потом нажал "Сохранить"?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002170
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
пользователю каждый день приходит список ориентировочно на 300 элементов( {"childID":"1"} ... {"childID":"300"}) и он начинает их drag-and-drop'ом растаскивать по группам({parentID:"1","children":'список элементов, содержащихся в этой группе'}). Растаскивает до тех пор, пока каждый элемент не будет в какой-либо группе и может элементы между группами перекидывать.
Я хочу избавиться от кнопки "Сохранить", хочу чтобы это было автоматически. Ведь как приятно, что в Visual Studio не надо жать эту кнопку сохранения. И соответственно хочу перенести этот позитивный опыт в свое приложение.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002531
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
skyANA,
пользователю каждый день приходит список ориентировочно на 300 элементов( {"childID":"1"} ... {"childID":"300"}) и он начинает их drag-and-drop'ом растаскивать по группам({parentID:"1","children":'список элементов, содержащихся в этой группе'}). Растаскивает до тех пор, пока каждый элемент не будет в какой-либо группе и может элементы между группами перекидывать.
Я хочу избавиться от кнопки "Сохранить", хочу чтобы это было автоматически. Ведь как приятно, что в Visual Studio не надо жать эту кнопку сохранения. И соответственно хочу перенести этот позитивный опыт в свое приложение.

Я бы запускал XMLHttpRequest при каждом дропе.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002843
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Сюрприз, но уэб-сокет это обёртка над хттп.

vb_sub
Ну а что сюрприз, это да, я ожидал что сокеты будут пониже уровнем, чем http.


Websocket это не обертка над HTTP.
HTTP просто позволяет переключиться на Websocket из HTTP не разрывая соединение.
Как только переключение произошло то протокол больше не имеет ничего общего с HTTP, он даже уже не текстовый, а бинарный.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002856
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если после HTTP заголовка начать посылать бинарные данные, то это получится уже совершенно другой протокол? Ню-ню...
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002926
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Если после HTTP заголовка начать посылать бинарные данные, то это получится уже совершенно другой протокол? Ню-ню..

Если бы только сервер посылал данные, то еще с натяжкой можно считать что это тело HTTP ответа (хотя ответ 101 в по стандарту HTTP не должен иметь тела, т.е. это уже не HTTP).
Но в вебсокете в обе стороны идут бинарные данные. Это 100% не HTTP.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002941
Код: javascript
1.
2.
3.
4.
5.
6.
7.
ws = new WebSocket("ws://localhost:8888/dh");
var formdata = $('eventForm').serialize();
ws.onopen = function()
{
    ws.send(formdata);
};
// на сервер придёт строка, которую парсит url_parse()
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002946
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Но в вебсокете в обе стороны идут бинарные данные. Это 100% не HTTP.
Метод POST позволяет отправить и получить бинарные данные. Это "100% не HTTP"?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002958
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Метод POST позволяет отправить и получить бинарные данные. Это "100% не HTTP"?

В вебсокете нет HTTP заголовков, нет ни POST ни GET. Он в принципе не может быть оберткой над HTTP.
Если взять HTTP прокси который не знает про вебсокет, то он не сможет ретранслировать вебсокет - он вернет ошибку клиенту на первом же байте данных после переключения протокола.
Что еще не понятно-то?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40002972
а AJAX это HTTP ?
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003016
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
skyANA,
пользователю каждый день приходит список ориентировочно на 300 элементов( {"childID":"1"} ... {"childID":"300"}) и он начинает их drag-and-drop'ом растаскивать по группам({parentID:"1","children":'список элементов, содержащихся в этой группе'}). Растаскивает до тех пор, пока каждый элемент не будет в какой-либо группе и может элементы между группами перекидывать.
Я хочу избавиться от кнопки "Сохранить", хочу чтобы это было автоматически. Ведь как приятно, что в Visual Studio не надо жать эту кнопку сохранения. И соответственно хочу перенести этот позитивный опыт в свое приложение.

Тут подходит цепочка команд: добавить в группу такого-то родителя такой-то элемент, переместить его в группе перед таким-то элементом, после такого-то элемента.
Про удалить ничего не сказано, но может тоже понадобится.

Цепочку можно накапливать на клиенте и отправлять на сервер пачку команд, а можно и по одной.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003017
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WebSocket - протокол поверх TCP.

Читайте спецификацию: https://tools.ietf.org/html/rfc6455
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003021
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020
а AJAX это HTTP ?

Нет. Это вообще не протокол, а API ))
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003027
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Алексей Роза 2020
а AJAX это HTTP ?

Нет. Это вообще не протокол, а API ))

AJAX - это любое общение с сервером без перезагрузки страницы, организованное при помощи JavaScript.

К примеру создать iframe - это самый древний способ AJAX-запроса
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003051
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Но в вебсокете в обе стороны идут бинарные данные. Это 100% не HTTP.

Они так делают со времён появления в HTTP протоколе запроса CONNECT. Так что это не повод уэб-сокеты объявлять чем-то принципиально новым.
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003055
Anatoly Moskovsky
Нет. Это вообще не протокол, а API ))

у ws тоже API есть:
авторОбъект WebSocket предоставляет API для создания и управления вебсокет-подключения к серверу, а также для отправки и получения данных в этом подключении.
А у AJAX тоже есть свой XMLHTTPRequest... почти протокол
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003095
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Они так делают со времён появления в HTTP протоколе запроса CONNECT. Так что это не повод уэб-сокеты объявлять чем-то принципиально новым.

Все правильно. Со времен изобретения байтов ничего принципиально нового не придумано
...
Рейтинг: 0 / 0
Стратегия синхронизации данных между frontEnd и backEnd
    #40003149
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поэтому разбудите меня когда JS через этот ваш уэб-сокет сможет подключаться прямо к серверу IRC, не требуя чтобы кто-то для него работал как прокси.
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 1 из 3
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Стратегия синхронизации данных между frontEnd и backEnd
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]