Я импортирую большое количество записей из файла csv. но я получаю сообщение об ошибке, похожее на то, что мне не хватает памяти.
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
Ниже вы увидите мой код.
//date,date_block_num,shop_id,item_id,item_price,item_cnt_day
const company = 'COURSERA';
const csvFilePath = '/home/atlantageek/product_data/salesdata/sales_train.csv';
const { Client } = require('pg');
const csv = require("csvtojson");
const client = new Client({
host: 'localhost',
port: 5432,
user: 'me',
password: 'secretpassword',
database: 'cooldb'
})
client.connect();
csv().fromFile(csvFilePath)
.subscribe((json) => {
//console.info(json);
var dt = json.date.split('.');
client.query("INSERT into series(orgName, cat1, cat2, cat3, cat4,cat5,dt, val, attr1)" +
" values($1::text, $2, $3, $4, $5, $6, $7, $8, $9)",
[company, json.shop_id, json.item_id,'','','', dt[2] + '-' + dt[1] + '-' + dt[0], json.item_cnt_day, json.item_price]).then((result) => {
console.info("-------------------");
}).catch(e => {
console.error(e.stack);
})
}, onError, onComplete)
function onError(err) { console.info(err) }
function onComplete(err) { console.info(err) }
Я знаю, что код неэффективен, и я могу делать массовые вставки, но помимо этого я думаю, что у меня заканчивается память, потому что у меня так много вставок в полете. С асинхронным характером узла, как мне замедлить вставки, чтобы у меня не было так много транзакций, выполняемых одновременно?
🤔 А знаете ли вы, что...
Node.js активно развивается и обновляется, чтобы соответствовать современным стандартам и требованиям.
Эта проблема может быть более сложной, чем вы думаете. Если вы просто хотите прочитать данные из файла csv и вставить в PG. Вы можете отложить операцию вставки с помощью setTimeout
. Это может увеличить общее время, которое изначально должно было занять, но это действительно работает. Если вы хотите построить серьезную систему, которая может поддерживать высокий параллелизм. Я предлагаю использовать Redis и очередь сообщений. Использование некоторой библиотеки поможет вам.
введите сюда описание ссылки