您的位置 首页 > 数码极客

c如何批量读写文件内容如何批量修改文件内容!

这是学习笔记的第 2387篇文章

想起来最近跨团队的一次数据交付的事情,都是远程办公中通过电话会议的方式沟通解决的,整个过程持续时间在半个小时左右,但是在其中也是不断地调整方案,事后想了想还是蛮有意思的。

事情的起因是有三个团队,分别为A,B,C, 团队C需要将一个数据库的数据导出,然后把数据迁移到一个线上的MySQL集群中,我们是团队B,从一开始就是建议使用一个中间库的模式来进行异步的数据迁移。

所以整个迁移的链路大家最初是这样想的,即团队A导出数据然后把数据导入到中间库,团队C负责通过应用程序去批量读取数据然后把数据迁移到线上的集群中。

本来这是一件看起来很简单的事情,但是在沟通中也收到了团队A交付的数据样本,主要存在2类问题:

1)数据格式和MySQL线上的数据格式差异很大,比如源端是2个字段,其中包含有JSON字段,线上是完全结构化的数据存储,可能有5个字段,也就是字段不是一一映射的模式

2)因为包含JSON数据,所以导出数据的时候,有些数据因为格式的差异,会有跨多行的情况。

3)导出的csv文件中分隔符是逗号,在JSON中本身也存在大量的逗号,所以导入的过程中存在很多潜在的风险和不确定性。

所以就上面的问题我们进行沟通的时候,就会出现所谓的边界,即有些事情好像怎么做都可以,多做一点,少做一点都可以,但是大家都更倾向于少做一些,其实也可以理解,我们回归问题的本质,看看影响是什么?

团队A: 如果导出数据时自带一些逻辑处理,其实是有一些业务倾入性的,而且很难保证额外的逻辑处理一定满足期望

团队B: 数据的质量难以保证,因为难以衡量团队A导出的数据是否完整,准确,同时又无法保证团队C能够合理的使用数据,因为团队B的工作就是导入数据,但是数据如何有问题,还是需要找团队A确认,是一种黑盒操作

团队C: 如果上游的数据存在问题,那么团队C后续的工作就可能丢数据

所以我没有把这句话说满,而是做了两种假设:

1)既然团队B的工作就是数据导入,而且数据导入失败还得需要团队A的支持,团队A是否可以直接完成导出导入的工作?团队A的直接回答就是不同意

2)团队A既然不同意这种处理方案,如果从全局来看,是否存在一种可能,即团队C直接从源库读取数据,然后写入中间库中,后续从中间库的处理模式和原计划保持一致?因为这种方案从全局来看都是团队C来一手控制,而且通过应用程序直接读取看起来也比较合理。 整体的方案类似下面的形式:

团队C想了下说,对啊,这也是一种可选方案,从应用层面来说,还是比较可控的,可能迁移的过程中需要控制频度和批次数量。

这个时候团队A开始有些担心了,因为团队C读取数据的时间比较长,按照当前的数据量可能需要好几天,而这个过程中团队C尤其需要注意频度和批次数量,否则可能会在一定程度上影响现有的数据服务负载等。

所以这个时候团队A开始动摇了自己的方案,反而更支持刚建议的方案,即从源端导出导入的操作,因为这样一类操作是运维侧相对可控的,而且导出导入的过程也是相对比较快的,比如通过程序批次的读取可能每秒钟1000条,但是通过加载csv的方式可能就会直接提升好几倍的效率。

折中后的方案如下:

到了这个时候就算是一种比较合理的数据交付状态了,但是我所在团队B不是偷懒,而是需要在事后做如下的补充测试:

1)csv文件中存在JSON跨行的情况下,数据导入的换行分隔符配置和测试

2)csv存储引擎是否支持包含JSON数据的格式,如果可以的话,这个事情反而就更简单了。

所以表面上看起来我们是偷懒了,但是从全局来看,整个执行过程是相对可控的,而且我们的后备方案还是在同步测试中,一旦出现不可控的情况,我们的支持和后备方案就可以及时进行修正。

这也是我希望的一种跨团队数据交付中需要的一些思考,从本质来看,最怕出现的情况则是,每个人都没有错,但是结果却不理想,所以我个人式更推崇在不同的场景中应该如何变通。

各大平台都可以找到我

  • 微信公众号:杨建荣的学习笔记

  • Github:@jeanron100

  • CSDN:@jeanron100

  • 知乎:@jeanron100

  • 头条号:@杨建荣的学习笔记

  • 网易号:@杨建荣的数据库笔记

  • 大鱼号:@杨建荣的数据库笔记

  • 腾讯云+社区:@杨建荣的学习笔记


原创热文:

维护之夜,说点故事和经验

我们为什么在MySQL中几乎不使用分区表

新年大吉 总结了如下的感想

《大江大河2》最触动我的一段经典对话

MySQL 8.0给开发方向带来的一些困扰

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“c如何批量读写文件内容,如何批量修改文件内容,如何批量替换文件内容,如何批量搜索文件内容”边界阅读