Ptolemy_master
@Ptolemy_master

Какую стратегию следует использовать в случае огромного объема данных?

Итак, имеется база MongoDB, на бакэнде NodeJs, подключение к базе через mongodb драйвер. Пользователю на фронте позволяется сделать любую выборку. Если объем данных слишком велик, node.js рушится со следующей ошибкой:

>> FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
>> Exited with code: 3.
>> Error executing child process: Error: Process exited with code 3.


Что можно сделать?
Вижу следующие подходы (в теории):
1) Как-то выяснить (как?) объем данных, которые будут возвращены в случае данного запроса, и, если он превышает определенный лимит, не выполнять запрос, а вернуть пользователю сообщение об ошибке.

2) Если это невозможно, то остановить выполнение запроса в процессе, и вернуть сообщение об ошибке.

3) Остается одно - иметь запущенным какой-то демон, который тут же перезапустит node если он рухнет.

Что посоветуете, спасибо!
  • Вопрос задан
  • 108 просмотров
Решения вопроса 2
  • xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.ru
    1. Вначале посчитать ТОЛЬКО КОЛИЧЕСТВО записей: COUNT
    2. Для выборки с нужными данными использовать ограничение: LIMIT
    Ответ написан
  • @RidgeA
    1. count + размер документа в MongoDB не может превышать 16 мб https://docs.mongodb.com/manual/reference/limits/
    2. mongodb.github.io/node-mongodb-native/2.0/tutorial... но смотри ниже
    3. Демон в любом случае рекомендую иметь - pm2, nodemon, supervisor, supervisord, systemd...

    С помощью mongodb.github.io/node-mongodb-native/2.0/tutorial... можно отдавать данные на клиент потоком, тут главное, что бы клиент схавал.
    Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы