Как лучше всего отправлять огромные порции данных от Angular до Express через http? - PullRequest
0 голосов
/ 08 марта 2020

У меня огромный набор данных, что-то вроде 200MB в формате txt. Я смог отправить данные на Angular через http-вызов.

Теперь мне нужно отправить данные обратно , после небольшого редактирования, выполненного локально, которое можно выполнить в каждой отдельной «строке» (см. Чтение файла FASTA , это формат файла).

К моему удивлению, Я не могу отправить его обратно , он слишком большой; Я сохраняю в MongoDB. Я заметил, что если я отправлю, скажем, 1%, это идет. Итак, решение, которое я имею сейчас, - отправка данных небольшими порциями данных. Тем не менее, я попробовал некоторые предложенные подходы здесь, но ничего.

Я нашел похожий вопрос здесь: Angular 7 Обработка большого пост-запроса http

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

Возможный намек : если бы я мог отправить 1%, я мог бы разделить его на 1% по частям и затем отправить по порядку; но мне нужно убедиться, что Angular не будет отправлять HTTP-вызов, пока предыдущий не будет завершен, в противном случае приложение express вылетает из-за проблем с памятью JavaScript.

См. здесь первую версию этого вопроса, с которого все началось: Как я могу некоторое время удерживать вызовы http?

Я не уверен, что это открытый вопрос, поскольку я не предоставляю коды. Я все еще учусь использовать эту платформу; иногда мы берем слишком много золотых яиц из курицы! заранее спасибо! :)

Обсуждения

@ zzfs мудро дали мне некоторые идеи, я их рассмотрю; тем не менее, я открыт для примера кода; легче учиться из кода, по крайней мере, для меня.

@ zzfs упомянуть, чтобы учесть «разницу» и сохранить только изменения, это мой текущий подход. Причина, по которой я настаиваю на том, что я открыл эту награду, заключается в том, что я хочу иметь, по возможности, надежную систему, что означает, что если человек добавляет слишком много комментариев, разница будет небольшой, и система может рухнуть; Я полагаю, что вероятность этого невелика, поскольку маловероятно, что некоторые из них добавят, скажем, 1000–10 000 комментариев за один раз.

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

1 Ответ

1 голос
/ 29 марта 2020

Отправка таких больших файлов на клиент и с клиента имеет смысл, например, при загрузке больших двоичных объектов, таких как почтовые индексы, или, скажем, загрузке больших двоичных объектов на сервер (например, загрузки на YouTube или Dropbox). Все остальные варианты использования обычно обрабатываются без таких больших передач ...

Вы упоминали, что выполняете только "небольшое редактирование" Это означает, что вы должны отправлять только разницу , а не всю вещь . Ваш вопрос слишком широкий, поэтому я не могу дать вам более четкого ответа, но когда ваш большой файл, скажем, JSON или текстовый файл, и пользователь что-то изменил в нем, вы можете довольно легко пометить позицию этого изменения и отправить это наряду с фактической, измененной полезной нагрузкой. Ваш сервер (узел с запущенным express?) Должен затем иметь возможность проверять разницу и применять изменения к файлу размером 200 МБ.


Разумеется, поддержка многократных запросов HTTP поддерживается и происходит часто. Если вы действительно хотите загрузить файл размером 200 МБ, вы можете разделить его и использовать switchMap для последовательной загрузки или forkJoin для параллельных запросов.

Но тогда вы все равно будете выполнять некоторую некоторую постобработку на сервере (объединяя чанки в наиболее тривиальном случае), поэтому ваше внимание должно быть направлено на реализацию метода diff-checker, описанного выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...