WedX - журнал о программировании и компьютерных науках

Импорт больших CSV-строк в базу данных без нехватки памяти

Я новичок в узле и во всей парадигме неблокирующего ввода-вывода. Я импортирую CSV из 1,8 миллиона строк в базу данных. Это работает, если я усекаю CSV до меньшего количества строк, но мне не хватает памяти для большего количества строк. Мой ORM - это sequelize, основанный на асинхронности/обещаниях.

Вот упрощенный фрагмент моего кода:

csv()
.from.path(thePath)
.on('record', function(row,index){
  models.meshblock.findOrCreate({
      where: {item_code: row[0]},
  })
})

Я думаю, проблема в том, что при потоковой передаче CSV я отправляю все эти асинхронные запросы к базе данных быстрее, чем они могут быть обработаны, поэтому память используется быстрее, чем освобождается.

Если бы был просто способ сказать «закончить эту строку, сохранить ее в базе данных, подождать, пока все не будет сделано, освободить память, а затем продолжить», тогда процесс должен быть очень медленным, но, по крайней мере, должен быть в состоянии завершиться без заканчивается память.

Верна ли моя оценка проблемы? И как я могу обойти это и импортировать строки без нехватки памяти?

11.08.2016

  • Есть ли у findOrCreate обратный вызов? Если это так, возможно, вы могли бы придумать импровизированный семафор, чтобы вы могли пакетировать findOrCreate. 12.08.2016
  • findOrCreate возвращает обещание. Так что да, я попробую приостановить поток csv до тех пор, пока не будут разрешены первые 1000 обещаний, а затем продолжу его. Спасибо за чаевые. 12.08.2016

Ответы:


1

Вероятно, наиболее эффективным способом является использование механизмов, специфичных для базы данных. Примеры:

11.08.2016
  • К сожалению, в каждой строке должна выполняться некоторая бизнес-логика, поэтому все не так просто. 12.08.2016
  • Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: wedx@cp9.ru