Size: a a a

Node.js — русскоговорящее сообщество

2020 January 10

AK

Andrey Korobeynikov in Node.js — русскоговорящее сообщество
у меня нет файла….
источник

AK

Andrey Korobeynikov in Node.js — русскоговорящее сообщество
Давайте так
источник

Ð

Ð in Node.js — русскоговорящее сообщество
Andrey Korobeynikov
у меня нет файла….
так создай его епты, тестовый файл
источник

Ð

Ð in Node.js — русскоговорящее сообщество
отладь загрузку на нем
источник

Ð

Ð in Node.js — русскоговорящее сообщество
а потом вместо него подпихни поток scv который твой драйвер базы возвращает
источник

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
Ð
а что сбой соединение разве не останавливает врайтстрим?
при чем тут останавливает/нет... просто суть - соединение = открытый дескриптор все время, пока выполняется запрос к БД, пока идет формирование ответа, пока идет построчное чтение и перенаправление потоков - все это время бррр.... тем более что еще и сам браузер может "налажать" со своими таймаутами и т.п. приколами
источник

AK

Andrey Korobeynikov in Node.js — русскоговорящее сообщество
Хочешь сказать мне сначала надо достать данные из БД, записать в файл, а потом открыть поток на чтение???
источник

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
тем более формат csv - который просто шикарно пакуется... я бы честно говоря, вместо этого формировал архив с данными, кидал этот временный файл в темповую диру, а на нее натравил как на статику нгинкс...
источник

Ð

Ð in Node.js — русскоговорящее сообщество
Artem Zuev
при чем тут останавливает/нет... просто суть - соединение = открытый дескриптор все время, пока выполняется запрос к БД, пока идет формирование ответа, пока идет построчное чтение и перенаправление потоков - все это время бррр.... тем более что еще и сам браузер может "налажать" со своими таймаутами и т.п. приколами
ну иногда это нужно, что поделать, и не всегда у сервера бд должна быть поддержка высокой конкуренси и рпм, иногда проще = лучше.
источник

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
и в респонзе не сами данные потоком слал, а просто возвращал ссылку на файло... а если там еще и кеширование привязать (если файлы выгрузки относительно статичные), то вообще было бы красиво
источник

AK

Andrey Korobeynikov in Node.js — русскоговорящее сообщество
Artem Zuev
тем более формат csv - который просто шикарно пакуется... я бы честно говоря, вместо этого формировал архив с данными, кидал этот временный файл в темповую диру, а на нее натравил как на статику нгинкс...
файлы не статичные
источник

Ð

Ð in Node.js — русскоговорящее сообщество
Artem Zuev
и в респонзе не сами данные потоком слал, а просто возвращал ссылку на файло... а если там еще и кеширование привязать (если файлы выгрузки относительно статичные), то вообще было бы красиво
ты предлагаешь просто обычное кеширование и буферизацию через диск
источник

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
Ð
ну иногда это нужно, что поделать, и не всегда у сервера бд должна быть поддержка высокой конкуренси и рпм, иногда проще = лучше.
когда такое нужно, то лучше уж тогда сокетами и отправлять порциями данные...
источник

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
ну хотя, если на стороне браузера необходимо инициировать получение именно как скачивание файла, то да - сокеты не проканают, наверное
источник

AK

Andrey Korobeynikov in Node.js — русскоговорящее сообщество
файл тупо содержит отчетность за период который может меняться и загрузив один раз себе Юзер может вообще забыть про эти данные и серверу этот файл не сдался вообще
источник

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
Ð
ты предлагаешь просто обычное кеширование и буферизацию через диск
типа того, только с архивацией к тому же и спихиванием нагрузки на канал на балансер
источник

Ð

Ð in Node.js — русскоговорящее сообщество
а если отчетность нужна одному клиенту раз в месяц то уж точно не надо извращаться с оптимизацией
источник

jc

john conor  in Node.js — русскоговорящее сообщество
может дать отдавать файл нжинксу?
источник

AZ

Artem Zuev in Node.js — русскоговорящее сообщество
Ð
а если отчетность нужна одному клиенту раз в месяц то уж точно не надо извращаться с оптимизацией
по мне - проще читать данные из бд и писать их в файл любым способом (можно и без потоков по старинке через аппенд), и вернуть в респонзе ссылку на файл...
источник

Ð

Ð in Node.js — русскоговорящее сообщество
чтобы избежать лонгпульных атак, можно направить поток из базы на диск и по окончанию записи этот же файл открывать на чтение и отправлять в респонс
источник