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 linewriteStreamFile.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《WebKit 技术内幕》学习之十二(1):安全机制

第12章 安全机制 安全机制对于浏览器和渲染引擎来说至关重要。一个不考虑安全机制的HTML5规范体系肯定不会受到广泛地使用&#xff0c;同时一个不安全的浏览器也不会得到广大用户的青睐。本章介绍的安全机制分成两个不同的部分&#xff0c;第一个部分是网页的安全&#xff0c;…

详解Mockito

详解Mockito 1. Mockito简介 在我们的编程世界中&#xff0c;测试是一个非常重要的环节&#xff0c;它能帮助我们确保代码的质量和稳定性。而在众多的测试方法中&#xff0c;Mock测试是一种非常有效的手段。 1.1 什么是 Mock 测试 Mock测试&#xff0c;顾名思义&#xff0c;…

Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程

CSDN 成就一亿技术人&#xff01; 今天出一期Centos下安装Mysql&#xff08;详细教程&#xff09;包括数据库密码跳过修改 CSDN 成就一亿技术人&#xff01; 目录 1.获取安装包 2.安装程序 安装下载的rpm包 查看安装包 修改5.7版本&#xff08;重要&#xff09; 安装M…

远程git开发

两种本地与远程仓库同步 """ 1&#xff09;你作为项目仓库初始化人员&#xff1a;线上要创建空仓库 > 本地初始化好仓库 > 建立remote链接(remote add) > 提交本地仓库到远程(push)2&#xff09;你作为项目后期开发人员&#xff1a;远程项目仓库已经创…

4.php开发-个人博客项目登录验证cookiesession验证码安全​

目录 知识点 本节大纲思路 ——这里以我自己的为例—— cookie验证——————> login1.php-登录后台界面 login_check.php-检查&#xff0c;作为包含文件 add_news.php-后台界面 php编码 如何创建 Cookie&#xff1f;--setcookie() 语法 实例 1 php header跳转…

(学习日记)2024.01.23:结构体、位操作和枚举类型

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

《WebKit 技术内幕》学习之八(1):硬件加速机制

《WebKit 技术内幕》之八&#xff08;1&#xff09;&#xff1a;硬件加速机制 1 硬件加速基础 1.1 概念 这里说的硬件加速技术是指使用GPU的硬件能力来帮助渲染网页&#xff0c;因为GPU的作用主要是用来绘制3D图形并且性能特别好&#xff0c;这是它的专长所在&#xff0c;它…

成熟的内外网数据交换方案,如何实现跨网传输?

网络迅速发展&#xff0c;我们可以从网络上查找到各式各样的信息&#xff0c;但是同时网络安全问题也随之严重。近几年&#xff0c;各种有关网络安全的新闻不断被报道&#xff0c;数据泄露给很多企业带来了严重打击&#xff0c;不仅是经济损失&#xff0c;严重者还会对企业的声…

Go 基本数据

第 2 章 基本数据类型 Go 的数值类型包括了不同大小的整数 、浮点数 、复数&#xff1b; 各种数值类型分别有自己的大小&#xff0c;对正负号支持也各不相同&#xff1b; 1. 整数&#xff08;OK&#xff09; 整数类型&#xff08;整型&#xff09;整数类型Go 语言同时支持 有…

Servlet 与 MVC

主要内容 Servlet 重点 MVC 重点 Filter 重点 章节目标 掌握 Servlet 的作用 掌握 Servlet 的生命周期 掌握 JSP 的本质 掌握 MVC 的设计思想 掌握 Filter 的作用及使用场景 第一节 Servlet 1. Servlet 概念 Servlet 是在服务器上运行的能够对客户端请求进行处理&a…

Parallels Desktop 18 for Mac(pd虚拟机) 激活版

Parallels Desktop 18是一款功能强大的虚拟机软件&#xff0c;可以在Mac操作系统上同时运行多种操作系统&#xff0c;包括Windows、Linux、Android等。该软件提供了多种高级功能&#xff0c;如支持DirectX 11游戏、3D图形和OpenGL应用程序&#xff0c;以及运行Windows和Mac应用…

Mysql数据库DQL查询语言之表连接(联合查询)

表连接 关系字段&#xff1a;两表中有关联关系的字段 \关系字段&#xff1a;两表之间存在关系的字段 什么是表连接&#xff1f; 当我们的查询结果需要从多张表中获取时&#xff0c;此时应该让表之间建立连接&#xff0c;同时获取数据 内连接 特点&#xff1a;同时对连接双方做…

[BUUCTF]-PWN:babyfengshui_33c3_2016解析

又是一道堆题&#xff0c;先看保护 关键信息是32位&#xff0c;没开pie 直接看ida 大致是alloc创建堆块&#xff0c;free释放堆块&#xff0c;show查看堆块内容&#xff0c;fill填充堆块内容 其他的都没啥关键的要讲&#xff0c;但alloc那里非常需要解析一下 解释如上图 再具…

做外贸指定货代,想不到的麻烦

最近在外贸群里看到小伙伴们对指定货代的吐槽以及自己遇到的糟心事&#xff0c;写下来&#xff0c;也为我们今后遇到客户指定货代的时候提个醒。 小伙伴A说&#xff0c;因为客户设计的包装有问题&#xff0c;被海关查验&#xff0c;然后客户的指定货代要求小伙伴支付高于货值的…

向量库与嵌入模型

简介 非结构化数据 世界上大约超过百分之八十的数据都是非结构化数据&#xff0c;例如&#xff1a;图像、音视频、自然语言等&#xff0c;这些模型不遵循预定义的模式或组织方式&#xff0c;可以使用各种人工智能 (AI) 和机器学习 (ML) 模型转换为向量。 嵌入向量&#xff0…

用ChatGPT教学、科研!大学与OpenAI合作

亚利桑那州立大学&#xff08;简称“ASU”&#xff09;在官网宣布与OpenAI达成技术合作。从2024年2月份开始&#xff0c;为所有学生提供ChatGPT企业版访问权限&#xff0c;主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品&#xff0c;AS…

01.Elasticsearch应用(一)

Elasticsearch应用&#xff08;一&#xff09; 1.什么是ELK ELK是一个免费开源的日志分析架构技术栈总称&#xff0c;包含三大基础组件&#xff0c;分别是Elasticsearch、Logstash、Kibana。但实际上ELK不仅仅适用于日志分析&#xff0c;它还可以支持其它任何数据搜索、分析和…

nodejs学习计划--(六)包管理工具

包管理工具 1. 介绍 包是什么 『包』英文单词是 package &#xff0c;代表了一组特定功能的源码集合包管理工具 管理『包』的应用软件&#xff0c;可以对「包」进行 下载安装 &#xff0c; 更新 &#xff0c; 删除 &#xff0c; 上传 等操作 借助包管理工具&#xff0c;可以快…

【若依】前后端分离框架部署

1.拉取若依项目代码 进入若依 基于SpringBootVue前后端分离的Java快速开发框架&#xff0c;并通过相应协议拉取到本地IDE 2.前端部署 2.1.下载nodejs 进入nodejs官网下载所需版本&#xff0c; 完成后在命令行运行npm -v可查询版本 2.2.配置依赖 在若依ui目录下运行 np…

oracle古法unwrap手艺(oracle存储过程解码)

先说骚话 首先oracle官方是不支持解包的&#xff0c;见Doc ID 376303.1 但是需求来了。我就寄希望于民间大神的工具。很顺利&#xff0c;找到了几个&#xff0c;甚至还有网页版&#xff0c;以为是个easy money。 但是&#xff0c;我点背&#xff0c;总是能遇到精彩的情况。数…