Node.JS CreateWriteStream(大容量写入文件流优化)

这篇具有很好参考价值的文章主要介绍了Node.JS CreateWriteStream(大容量写入文件流优化)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Why I Need Node.JS Stream

如果你的程序收到以下错误,或者需要大容量写入很多内容(几十几百MB甚至GB级别),则必须使用Stream文件流甚至更高级的技术。

Error: EMFILE, too many open files

业务场景,我们有一个IntradayMissingRecord的补全功能,每天大概是80-100W级别,如果需要在几分钟内把这么多记录写入到文件,需要根据某incremental逻辑去加载当天/当时间段所有记录,并且遍历并写入到一个文件中,这个时候createWriteStream可以更好的优化。

而且个人更推荐设置autoClose:true的设置,那么文件流系统会自动在内容写入之后和退出方法之后进行关闭。

What's Node.JS Stream?

首先,Stream (流,通常指文件流)是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。

Node.js,Stream 有四种流类型:

  • Readable - 可读操作。

  • Writable - 可写操作。

  • Duplex - 可读可写操作.

  • Transform - 操作被写入数据,然后读出结果。

所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:

  • data - 当有数据可读时触发。

  • end - 没有更多的数据可读时触发。

  • error - 在接收和写入过程中发生错误时触发。

  • finish - 所有数据已被写入到底层系统时触发。

CreateWriteStream Parameter

/*
@params:path指定文件的路径
@params:options可选,是一个JS对象,可以指定一些选项如:
let option={
              flags: 'w',//指定用什么模式打开文件,’w’代表写,’r’代表读,类似的还有’r+’、’w+’、’a’等
              encoding: 'utf8',//指定打开文件时使用编码格式,默认就是“utf8”,你还可以为它指定”ascii”或”base64”
              fd: null,//fd属性默认为null,当你指定了这个属性时,createReadableStream会根据传入的fd创建一个流,忽略path。另外你要是想读取一个文件的特定区域,可以配置start、end属性,指定起始和结束(包含在内)的字节偏移
              mode: 0666,//通常不建议修改
              autoClose: true//autoClose属性为true(默认行为)时,当发生错误或文件读取结束时会自动关闭文件描述符
          }

Show Me The Code

const fs = require('fs')

 
//by zhengkai.blog.csdn.net
async function main() {

    let datax = "XXXX"

    const writeStreamFile = fs.createWriteStream('stream.txt', {flags: 'w',encoding:'utf-8',autoClose:true});

    //write first line

    writeStreamFile.write(datax);

    datax=""

    for (let index = 0; index < 100000; index++) {

        datax=index+"___"

        writeStreamFile.write(datax);

    }

}

 

try {

    main()

} catch (err) {

    console.error('###### global err', err)

}

Result

Node.JS CreateWriteStream(大容量写入文件流优化),Vue/Node.js/JavaScript,node.js文章来源地址https://www.toymoban.com/news/detail-821667.html

到了这里,关于Node.JS CreateWriteStream(大容量写入文件流优化)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • USB大容量存储设备无法启动该怎么办?

    USB大容量存储设备(USB mass storage device class,也称为USB MSC或UMS)是一个协议,允许一个USB接口的设备与电脑相连接,以便在两者之间传输文件。对于电脑来说,USB设备看起来就像一个移动硬盘,允许拖放型文件传送。它包括移动硬盘、闪存盘、移动光驱、读卡器、数码相机、

    2024年02月11日
    浏览(37)
  • 低成本、大容量、高交互…Polkadot 引领 GameFi 实现新突破

    有一天,你可以边打游戏边赚钱,实现 Play to earn 的梦想。 这话或许听来有些白日梦,但随着区块链行业的高速发展, DeFi、NFT 的兴起,传统游戏也在区块链行业的大背景下实现新一步的更迭。Play To earn 的理想正在加速落地,GameFi 赛道的火爆让越来越多的技术开发人员投身

    2024年02月02日
    浏览(46)
  • 买手机就要买大容量的以及为什么手机内存满了之后会变卡

    我现在手里正在用的这个是 IPhone XR,2019 年还是 2018 年买的,我记得买的时候已经上市一段时间了。这个是苹果第一款双卡双待的手机,到现在用了三四年了。 都说苹果的手机可以用很多年还很流畅,而安卓的手机一般一两年就卡的没法用,需要换了。这种说法有一定的依据

    2024年02月09日
    浏览(58)
  • 三维后处理与重建PACS源码,大容量图像存储 报告单多种模式及自定义样式

    医学影像系统源码 三维后处理与重建PACS源码 医学影像系统由PACS系统、RIS系统组成,同时提供与HIS的接口(HL7或其他类型) 。 主要功能介绍 信息预约登记 支持对患者、检查项目、申请医生、申请单据、设备等信息进行管理。且支持检查病人排队管理功能; 支持大屏幕队列

    2024年02月03日
    浏览(39)
  • 【完美解决】Windows下移动硬盘无法弹出 | 弹出USB大容量存储设备时出问题 | Windows无法停用设备 | \$Extend\$RmMetadata\$TxfLog\$TxfLog.blf

    使用U盘或者移动硬盘弹总是会遇到无法弹出的情况。此时windows往往不会告诉你具体是什么设备占用,只会提示: 弹出 USB 大容量存储设备 时出问题 或 Windows 无法停用“通用卷”设备,原因是某个程序正在使用它。关闭可能使用该设备的所有程序,然后稍后重试。 有时候我

    2024年02月11日
    浏览(65)
  • Node.js 文件写入及文件夹交互操作

    目录 1、文件写入 1.1 同步写入文件 1.2 将内容追加到文件 2、文件夹交互 2.1 检查文件夹是否存在 2.2 创建新文件夹 2.3 读取目录内容 2.4 重命名文件夹 2.5 删除文件夹 在Node.js中写入文件最简单的方法是使用fs.writeFile()API。 您可以使用同步版本fs.writeFileSync(): 您还可以使

    2024年02月06日
    浏览(47)
  • Node.js 中如何写入文件:全面指南

    文件写入是  Node.js  中的一项重要任务,它允许你将数据保存到本地文件系统中,供后续使用。这个功能在许多应用中都有广泛的应用,包括数据备份、日志记录、配置文件更新等。在本文,我们将介绍如何在 Node.js 中执行文件写入操作,提供基本概念、常用方法、使用场景

    2024年02月04日
    浏览(51)
  • 如何在Node.js将console日志写入到文件

    在node.js开发中,需要将日志重定向到文件,又不想用其他日志框架,查询node文档发现可以用如下方式简单实现: 参考: 控制台 | Node.js v18.18.2 文档

    2024年01月21日
    浏览(40)
  • Node.js-fs模块文件创建、删除、重命名、文件内容的写入、读取以及文件夹的相关操作

    异步写入:writeFile() 同步写入:writeFileSync() 异步追加写入:appendFile() 同步追加写入:appendFileSync() 方式一(appendFile): 方式二(writeFile): fs.createWriteStream( path [, options ] ) 程序打开一个文件是需要消耗资源的 ,流式写入可以减少打开关闭文件的次数。 流式写入方式适用于

    2024年02月14日
    浏览(100)
  • node笔记_写文件(异步写入,同步写入,追加写入,流式写入)

    大家好,我是yma16,本期分享node写文件。

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包