Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Обработка больших объёмов данных в Node.js

Mariya
November 02, 2019

Обработка больших объёмов данных в Node.js

Mariya

November 02, 2019
Tweet

More Decks by Mariya

Other Decks in Technology

Transcript

  1. 2 О себе АЛЕКСАНДР СИВОВ • Работаю в компании Intexsoft

    руководителем отдела исследований и развития • Более 20 лет опыта в разработке backend и frontend приложений • Языки – Java, Javascript • Backend – Node.js • Frontend – React, Angular Grodno, 2019
  2. 3 Предыстория ПРИЛОЖЕНИЕ • Несколько микросервисов • Backend на Node.js

    • Frontend – Angular 6 • База - MongoDB • Обработка данных, содержащих сотни тысяч записей Grodno, 2019
  3. 4 Валидация документов Grodno, 2019 • Сотни тысяч записей •

    Сотни полей для каждой записи • Для каждого поля есть набор правил, по которым производится валидация • Для валидации используется специальный язык выражений • Валидация и парсинг происходит при помощи отдельного сервиса
  4. 5 Валидация документов ПРИМЕРЫ ВАЛИДАЦИОННЫХ ВЫРАЖЕНИЙ • ISBLANK(this.FIELD1) AND ISBLANK(this.FIELD2)

    AND ISBLANK(this.FIELD3) AND ISBLANK(this.FIELD4); • ERROR_MAX = NVL(LOOK_UP_CHECK(”table1”, ”CODE_FIELD = contextData.code AND CLASS_FIELD = this.CLASS_FIELD”, “ERROR_MAX”), this.FIELD2); • ISNOTBLANK(this.FIELD1) AND !(this.FIELD2 >= (YEAR(NOW())- 60); • FIND_IN_SET(contextData.code, [“CN”, “ID”, “IN”]) Grodno, 2019
  5. 9 Большие объемы данных Grodno, 2019 • Значительное время обработки

    сторонним сервисом • Долгое ожидание пользователем • Сложности при работе в многопользовательском окружении
  6. 11 Нехватка памяти и другие проблемы Grodno, 2019 • Объем

    возвращаемых данных • Скорость работы сервиса валидации • Работа с MongoDB • Перегрузка Node.js worker’ов
  7. 15 Тюнинг Node.js Grodno, 2019 • Event loop starving •

    Использование нескольких инстансов • Load balancing • Выделение новых сервисов • Кэширование
  8. 19 Кэширование Grodno, 2019 • Кэширование на уровне инстанса Node.js

    • Кэширование с помощью Redis • Инвалидация кэша
  9. 21 Тюнинг MongoDB Grodno, 2019 • Replication • Шардинг •

    Аггрегации • MongoDB Native Driver vs. Mongoose
  10. 22 Replication Grodno, 2019 • Primary узлы • Secondary узлы

    • Данные копируются • Любой узел может быть первичным • Write Concern/Read Concern
  11. 24 Аггрегации Grodno, 2019 • Pipeline • Память • Лимиты

    – 100 Mb, allowDiskUse • Поддержка sharded коллекций
  12. 25 Результаты Grodno, 2019 КОЛИЧЕСТВО ФАЙЛОВ Было: не больше 5

    Стало: >10000 ПАМЯТЬ Было: 400 Mb Стало: 150 Mb ВРЕМЯ ОБРАБОТКИ Было: 3 минуты Стало: 40 секунд КОЛИЧЕСТВО ЗАПИСЕЙ Было: <10000 Стало: >1000000