当前位置: 首页 > news >正文

隧道建设网站怎么了seo招聘职责

隧道建设网站怎么了,seo招聘职责,湖南工程建设监理有限公司网站,做网站改版的业务需求上经常存在需要对同一个文件进行双上传,上传到不同云存储桶,以防出现某一个云厂商因各种意外导致自身服务出现不可用的情况,当然,还有其他措施可以避免,现在只针对通过程序业务代码而双写存储的这个场景。 业务…

业务需求上经常存在需要对同一个文件进行双上传,上传到不同云存储桶,以防出现某一个云厂商因各种意外导致自身服务出现不可用的情况,当然,还有其他措施可以避免,现在只针对通过程序业务代码而双写存储的这个场景。



业务场景

文件A上传到oss a,同时也需要将这个文件A异步上传到oss b,而文件A在主协程会被remove。

下面有份伪代码去描述这个场景

func ABC() {file, err := os.Open(path)if err != nil {return}defer func() {file.Close()os.Remove(path)}()...// 上传到oss aupload2OssA(file)...// TODO 异步上传到oss b}

我们可以看到主routine打开了一个文件,并且上传到oss a,程序结束后会close文件且remove文件了,现在希望对这个文件异步上传到oss b



方式一

将文件内容读取出来上传

func ABC() {file, err := os.Open(path)if err != nil {return}defer func() {file.Close()os.Remove(path)}()...// 上传到oss aupload2OssA(file)...// TODO 异步上传到oss bmethod1(file)
}func method1(file *os.File) {if _, err := file.Seek(0, 0); err != nil {return}b, err := ioutil.ReadAll(file)if err != nil {return}go upload2OssB(b)
}

在主routine将文件偏移量重置,将文件全都读取到内存了,异步routine上传到oss b

  • 优点:实现简单
  • 缺点:占用资源多
  • 总结:虽然实现简单,但使内存消耗增加



方式二

新创建文件,用新文件句柄去上传

func ABC() {file, err := os.Open(path)if err != nil {return}defer func() {file.Close()os.Remove(path)}()...// 上传到oss aupload2OssA(file)...// TODO 异步上传到oss bmethod2(file)
}func method2(file *os.File) {if _, err := file.Seek(0, 0); err != nil {return}tmpF, err := os.CreateTemp(os.TempDir(), "")if err != nil {return}defer func() {tmpF.Close()os.Remove(tmpF.Name())}()if _, err = io.Copy(tmpF, file); err != nil {return}go upload2OssB(tmpF)
}

在主routine将文件偏移量重置,create了一个临时文件,通过io.Copy将文件内容拷贝到临时文件,异步routine读取新文件上传到oss b

  • 优点:实现简单
  • 缺点:占用资源多
  • 总结:虽然实现简单,但使文件读写io和磁盘占用都增加了



方式三

同文件多句柄操作

func ABC() {file, err := os.Open(path)if err != nil {return}defer func() {file.Close()os.Remove(path)}()// 打开同一个文件,用新句柄去异步上传file2, err := os.Open(path)if err != nil {return}...// 上传到oss aupload2OssA(file)...// TODO 异步上传到oss bmethod3(file2)
}func method3(file *os.File) {go func() {upload2OssB(file)file.Close()}()
}

在主routine打开同一个文件,用新文件的句柄,在异步routine上传到oss b

  • 优点:代码简洁
  • 缺点:需要维护多个句柄
  • 总结:利用了文件系统的引用计数,打开同一个文件,不同的fd,只要新句柄没有被释放,那么就可以进行异步上传



方式四

硬链接文件

unc ABC() {file, err := os.Open(path)if err != nil {return}defer func() {file.Close()os.Remove(path)}()...// 上传到oss aupload2OssA(file)...// TODO 异步上传到oss bmethod4(path)
}func method4(path string) {go func() {if err := os.Link(path, newpath); err != nil {return}file, err := os.Open(newpath)if err != nil {return}defer func() {file.Close()os.Remove(path)}()upload2OssB(file)}()
}

在异步routine, 创建硬链接文件,上传到oss b

  • 优点:代码简洁
  • 缺点:需要维护硬链接
  • 总结:利用了文件系统的引用计数,硬链同一个文件,只要将硬链接当成普通文件处理,进行异步上传



总结

任何一个方式都需要结合业务场景进行权衡,没有高下之分,仅提供思路,以上代码都以伪代码的形式,如有其他方案,欢迎提供。



巨人的肩膀

从他人的工作中汲取经验来避免自己的错误重复,正如我们是站在巨人的肩膀上才能做出更好的成绩。



VChat

一个没有哆啦A梦和静香的IT码农,不专业Gopher
在这里插入图片描述

http://www.ds6.com.cn/news/27725.html

相关文章:

  • 做网站小程序重庆seo什么意思
  • Wordpress屏蔽模仿站爬虫ip苏州百度推广代理商
  • 信息技术网站建设专业百度的特点和优势
  • 在哪个网站做一照一码网上推广的平台有哪些
  • 高端广告公司网站建设东莞网络营销全网推广
  • 网页设计培训机构推荐seo搜索铺文章
  • 咋么做网站在电脑上网站google搜索优化
  • 有口碑的武进网站建设百度关键词搜索技巧
  • 管理员网站后台上传本地视频互联网平台推广怎么做
  • 做点心的网站信息流投放平台
  • 镇江域名注册广州市口碑seo推广
  • 制作团购网站志鸿优化网官网
  • 杭州网站建设迅雷磁力链bt磁力天堂下载
  • 西安做网站的公司维护百度网盘电话人工服务
  • 外国黄色网站自己的网站怎么做seo
  • 重庆网站建设联系电话推广运营是做什么的
  • 免费企业名录网站手机百度账号登录入口
  • 企业网站建设费用计入哪个科目石家庄全网seo
  • 手机优化不到100怎么办网站排名优化手机
  • 国产99做视频网站长沙seo公司排名
  • 温州网页网站制作怎样在网上做推广
  • 石家庄 外贸网站建设网站维护一般怎么做
  • 企业网站快速备案服务网络营销课程培训机构
  • 做相册本哪个网站好用福州短视频seo
  • 山西省建设注册中心网站搜索关键词的软件
  • 为什么上传网站模板网站上没有文字和图片上海网络推广渠道
  • wordpress硬盘seo科技网
  • 消防有哪些网站合适做百度seo如何优化
  • 网站域名备案后公示市场营销方案范文5篇
  • 机械厂做的网站模板叫什么seo常见的优化技术