В веб-приложении у меня есть набор сущностей в базе данных с числовым полем, отвечающим за их порядок.На стороне клиента эти объекты отображаются в виде сортируемого списка, позволяющего пользователям изменять свой заказ.
На данный момент у меня есть два решения для управления обновлениями заказов, и ни одно из них меня не устраивает.
Первый прост: каждый раз, когда пользователь меняет какой-либо порядок элементов, просматривает обновленный список, получает все идентификаторы элементов в массив, отправляет их на сервер и выпускает серию обновлений, где каждый порядок элементов является индексом идентификатора в массиве.
Недостаткиэтого подхода: множество ненужных обновлений, невозможность правильно обработать ситуацию, когда массив элементов, отправляемый на сервер, не содержит все идентификаторы объектов.
Второй вариант: когда пользователь изменяет порядок элементов,ID измененного элемента отправляется на сервер вместе с идентификаторами элементов, которые «окружают» измененный элемент в его новом месте в списке.На сервере новый заказ товара рассчитывается по (previous.order + next.order) / 2
.Таким образом, если элемент с заказом 3 перемещается между элементами с заказами 5 и 6, его новый заказ становится 5,5
Это решение требует только одного обновления на изменение, но также имеет серьезную проблему: из-за используемого алгоритма каждое изменение увеличивает десятичную частьв порядковых номерах и рано или поздно это требует большей точности, чем может предоставить моя база данных (я использую MongoDB для этого случая, но я полагаю, это не так важно).
Мой вопрос заключается в том, существуют ли другие более эффективные и правильные способыили, может быть, мои нынешние подходы могут быть как-то улучшены?