Bufferizing data from stream in nodeJS for perfoming bulk insert(缓冲NodeJS中流中的数据以执行大容量插入)
本文介绍了缓冲NodeJS中流中的数据以执行大容量插入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何在NodeJS中有效地缓冲从流到批量插入的事件,而不是从流接收的每个记录的唯一插入。下面是我想到的伪代码:
// Open MongoDB connection
mystream.on('data', (record) => {
// bufferize data into an array
// if the buffer is full (1000 records)
// bulk insert into MongoDB and empty buffer
})
mystream.on('end', () => {
// close connection
})
这看起来现实吗? 有没有可能进行优化?现有的库为此提供了便利?
推荐答案
我最终得到了一个无依赖关系的解决方案。
const { MongoClient } = require("mongodb")
const url = process.env.MONGO_URI || "mongodb://localhost:27019";
const connection = MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true })
Promise.resolve(connection)
.then((db) => {
const dbName = "databaseName";
const collection = 'collection';
const dbo = db.db(dbName);
let buffer = []
stream.on("data", (row: any) => {
buffer.push(row)
if (buffer.length > 10000) {
dbo.collection(collection).insertMany(buffer, {ordered: false});
buffer = []
}
});
stream.on("end", () => {
// insert last chunk
dbo.collection(collection).insertMany(buffer, {ordered: false})
.then(() => {
console.log("Done!");
db.close();
})
});
sas_stream.on("error", (err) => console.log(err));
})
.catch((err) => {
console.log(err)
})
这篇关于缓冲NodeJS中流中的数据以执行大容量插入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:缓冲NodeJS中流中的数据以执行大容量插入


基础教程推荐
猜你喜欢
- 在for循环中使用setTimeout 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 动态更新多个选择框 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01