纪念第一次线下拉数据

722 阅读3分钟

Created Equal by Jean-Michel Basquiat c.1984

背景

作为一名工作N年的前端攻城狮,一直在前端的围栏里面安全的待着。一直参与的是前后端分离的项目,跟后端协作一直也比较和谐,多次参加过后端的技术评审,一直有听过 拉数据 刷数据。算是 虽没吃过猪肉,也算见识过猪跑。

当时每每听见PM对着server同学提出这些诉求时,server同学往往都是眉头一皱,当时我的心里只暗自觉得此一件善事

现在在一个全栈(此处的全栈包括:端内RN、H5,PC前端,PC后端,DB。。。)小组,心里早有预期要接触到这些数据的事儿。但仰仗着组内的小伙伴们都比较给力,加之PM的不给力,故入组2月,一直相安无事😅。

万般没想到,在一个月黑风高的大半夜(晚上10点+),被老板拉到一个小黑群,让我支援去拉下数据,非常紧急。当时脑子一头愣清。连命call了组内的的大神们,大神们非常友善,细心的指导了我该怎么做。(还好这两个月也开发过了组内的Api, RPC层的项目),于是就走马上任接手了这个紧急需求。

开发经过

大神指导思路是:

  • 线上地址代理到本地前端项目
  • 本地前端项目代理接口到本地API
  • 本地API寻址到本地RPC
  • RPC项目连着线上数据库
  • 在API层修改前端的请求
  • 前端是发送请求即触发跑数据

通完电话,感觉可行,于是开搞!(11点了😢还是太年轻,不知道轻重)

试了下大神告知我的,生成csv文件的方式,真的生成了,开心😄

fs.appendFileSync(`result-uid-detail-${timeR}.csv`, `A,B,C,D,E\n`);
for (const item of musicianMap) {
  console.log('writing......');
  fs.appendFileSync(`result-uid-detail-${timeR}.csv`, `${item.uid},${item.name},${item.fanCount},${item.passedSongCount},${item.songCount}\n`);
}

剩下的就是怎么获取最终数据的问题了,这个是业务逻辑,这个我知。遂开跑, 哼哧哼哧,2小时过去了。。。出来一份数据,结果,错误!❌ 👋

交给PM,PM半夜跟我沟通,表示数据不可信,此时我已两眼昏花🙅,。询问今晚就要吗? PM表示越快越好,PM的嘴🔪

实在太晚,眼中全是血丝,遂沟通第二天上班前给他。

------------------------我是休息♨️😴分割线 -------------------

翌日清晨早起,脑袋清醒了,重新理了下思路,重写了下脚本。于是开跑,眼看到10点上班,3份数据,就跑了2份,另一份数据就是跑不完。

遂先将2份给PM,沟通这一份可能要很久。一共 4706 * 20 次,近10W次。 冷静预估了下,1/6s一次,也要 4.3+ 小时,🐸

估算了一下时间后,跟PM沟通,调整了下条件限制,4706 * 3 次,预计 40 ~ 50分钟左右。

最终在完全不动电脑处理任何其他工作的情况下,跑了将近 30分钟。

终于可以交付了。😭

收获总结

终于吃上猪肉了!

名为拉数据,但开发的思路与其他需求形式是类似的。

  • 接需求需谨慎,需求对清楚,用途和目的是什么(有时沟通下,可能会发现,PM的诉求可以有简单解法)
  • 时间预估准确 (提前预估下PM要的时间节点,估算下跑数据需要的时间,可以适当沟通调整边界条件)

遇事莫方,多求帮助。⛽️