MinIO 是全球领先的对象存储先锋,目前在全世界有数百万的用户. 在标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒。
对象存储可以充当主存储层,以处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。
MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。而这些都是MinIO能够达成的性能指标。
今天做数据大屏的时候突然用到这个云存储,所以就记录一下。
为什么使用MinIO
我们这个大屏是AI数据检测分析的大屏(其实就是大数据分析,模型学习分析的一个大屏),其中有一项就是车间的机床产品的实时异常检测的分析,所以需要处理大量的图片,并且图片都是超高清的,图片都非常大,为了方便存储和快速读取。
MinIO的使用
下载依赖
npminstall--saveminio
初使化Minio Client(你需要设置5个属性来链接Minio对象存储服务)
varMinio=require('minio')varminioClient=newMinio.Client({endPoint:'play.min.io',port:9000,useSSL:true,accessKey:'Q3AM3UQ867SPQQA43P2F',secretKey:'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG'});
3.上传下载相关的API文档里都有 文档地址:http://docs.minio.org.cn/docs/master/javascript-client-api-reference
getObject下载对象
下面我就主要写我用到的getObject
let_this=this;varsize=0;minioClient.getObject("image0",this.realTimeImage.imageData,function(err,dataStream){if(err){returnconsole.log(err);}varnewUint8Array=[];dataStream.on("data",function(chunk){size+=chunk.length;newUint8Array.push([...chunk]);});dataStream.on("end",function(){console.log("End.Totalsize="+size);varbinary="";varbytes=newUint8Array.reduce((prev,cur,index,arr)=>{if(typeofcur=="object"){returnprev.concat(cur);}else{prev.push(cur);returnprev;}},[]);varlen=size;for(vari=0;i<len;i++){binary+=String.fromCharCode(bytes[i]);}letbase64=window.btoa(binary);_this.imgData=`data:image/jpeg;base64,${base64}`;});dataStream.on("error",function(err){console.log(err);});});
遇到的小问题:因为图片文件太大,所以在data里面返回的unit8Array的数组是分开两个的,所以当时有点懵。 后面把前面一部分的unit8Array转成base64之后发现图片是不完整的,才想到这一点。\ 所以就采用reduce计算和concat数组合并的方法重新把数组合并然后再转base64。
reduce
reduce方法的语法
arr.reduce(callback,[initialValue])
reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。
callback(执行数组中每个值的函数,包含四个参数)1、previousValue(上一次调用回调返回的值,或者是提供的初始值(initialValue))2、currentValue(数组中当前被处理的元素)3、index(当前元素在数组中的索引)4、array(调用reduce的数组)
initialValue (作为第一次调用 callback 的第一个参数。)
2.reduce的简单用法当然最简单的就是我们常用的数组求和,求乘积了。```jsvararr=[1,2,3,4];varsum=arr.reduce((x,y)=>x+y)varmul=arr.reduce((x,y)=>x*y)console.log(sum);//求和,10console.log(mul);//求乘积,24
reduce的高级用法 计算数组中每个元素出现的次数
letnames=['张三','李四','王五','赵钱','张三'];
let nameNum = names.reduce((pre,cur)=>{ if(cur in pre){ pre[cur]++ }else{ pre[cur] = 1 } return pre },{}) console.log(nameNum); //{张三: 2, 李四: 1, 王五: 1, 赵钱: 1}
数组去重```jsletarr=[1,3,2,4,4,2]letnewArr=arr.reduce((pre,cur)=>{if(!pre.includes(cur)){returnpre.concat(cur)}else{returnpre}},[])console.log(newArr);//[1,2,3,4]
将二维数组转化为一维
letarr=[[0,1],[2,3],[4,5]]letnewArr=arr.reduce((pre,cur)=>{returnpre.concat(cur)},[])console.log(newArr);//[0,1,2,3,4,5]
将多维数组转化为一维
letarr=[[0,1],[2,3],[4,[5,6,7]]]constnewArr=function(arr){returnarr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])}console.log(newArr(arr));//[0,1,2,3,4,5,6,7]
对象里的属性求和
varMinio=require('minio')varminioClient=newMinio.Client({endPoint:'play.min.io',port:9000,useSSL:true,accessKey:'Q3AM3UQ867SPQQA43P2F',secretKey:'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG'});0