Пределы обработки данных на клиенте по сравнению с обработкой данных на сервере - PullRequest
0 голосов
/ 12 июля 2020

Для настольного приложения (функциональность, подобная ERP) мне интересно, что было бы разумнее сделать.

Предполагая, что обе машины равны по производительности, а сервер должен иметь дело с макс. 5-10 клиентов и никаких других обязательств. Лучше сначала загрузить все данные (~ 20 000 объектов) и сделать фильтрацию, сортировку и т.д. c. на клиенте (электронном) или лучше делать обработку на бэкэнде (golang + postgres) поверх Ax ios. Пользовательский интерфейс должен быть максимально быстрым, но при этом получать данные как можно быстрее.

Дорогостоящая операция - фильтрация 15 000 объектов по идентификатору ссылки. (например, клиент может иметь несколько заказов)

Таким образом, объекты, принадлежащие «родительскому объекту», отображаются путем запроса всех этих объектов по родительскому идентификатору.

Есть ли общий ответ на вопрос, что бы быть более производительным или лучшим выбором здесь? Делаем некоторые предположения, например, задержка 5 мс в сети + 20 мс для API + пара для заполнения магазина. При каком размере данных эта операция будет медленнее на внешнем интерфейсе или полностью неустойчивой?

Если это не проблема производительности, есть ли другие причины, по которым я хотел бы сделать это на сервере?

Изменить : Клиент и Сервер находятся в одной локальной сети

1 Ответ

0 голосов
/ 12 июля 2020

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

Будет ли ваше программное обеспечение отображать одни и те же данные для всех клиентов?

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

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

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

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

Еще одно соображение, о котором вы должны подумать, - это размер ваших данных:

Будет ли загрузка всех данных с сервера занимать больше нескольких секунд?

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

...