При извлечении 3,6 миллиона записей с помощью сбоя Sequelize, MariaDB Connector работает. Есть идеи почему? - PullRequest
0 голосов
/ 17 января 2020

, как уже сказано в заголовке, я пытаюсь выполнить необработанный запрос SELECT, который приводит к 3,6 записям. Когда я использую разъем MariaDB (https://github.com/mariadb-corporation/mariadb-connector-nodejs), он работает просто отлично и выполняется за ~ 2 минуты. Но Sequelize занимает намного больше времени, и в конце концов, Node падает через 20-30 минут.

У вас, ребята, есть идеи, как это исправить?

Большое спасибо и хорошего дня!

Береги себя,

Патрик

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Когда вы выполняете ваш запрос, sequelize выполнит SELECT в базовой базе данных.

Затем последовательно произойдут две вещи:

  • MariaDB загрузит все данные, соответствующие вашим критериям

  • MariaDB отправит все данные для продолжения, которые будут:

    • Перегрузить память вашего приложения (все данные будут сохранены в node.js памяти)
    • Cra sh продолжение, потому что он не предназначен для обработки такого большого количества данных

Когда вы выполняете запрос к огромному набору данных, используйте курсоры . С помощью курсоров MariaDB загрузит все данные, но затем sequelize получит данные по группе (Например, секвелируйте загрузку 100 данных, вы обрабатываете их, затем снова загружаете 100 данных, что означает, что на вершине вы будете иметь загружено 100 данных в вашу node.js память) .

https://github.com/Kaltsoon/sequelize-cursor-pagination

https://mariadb.com/kb/en/cursor-overview/

0 голосов
/ 20 января 2020

Редизайн вашего приложения, чтобы сделать больше работы в базе данных. Загрузка 3,6M строк - плохой дизайн для любого приложения.

Если вы хотите объяснить, что вы делаете с таким количеством строк, возможно, мы поможем создать обходной путь. (И это может даже работать быстрее, чем 2 минуты!)

...