大数据迁移总结
情况是这样的,有几张表存储爬虫爬过来的数据,用text
的数据类型的一个字段存储,这种表每张有2万多条数据,这样的数据库有20-30个,其中的数据还有很多是重复的,现在需要把这些数据迁移到一个库中,简单来说就是一句话:
XXXXXXXX…….
如果只是要插入数据我也认了,但是现在问题是我还要对其中的一些数据进行处理,就是我还要遍历每条数据。也就是说我一定要用脚本去实现它。
业务逻辑是简单的,就是对其中的一个字段进行替换,但是问题简单来说就是以下这些:
- 数据量太大了,使用脚本运行时很快就报内存耗尽
- 分布在多个库中,需要将各个库中的数据拿出来后使用脚本加入到一个库中
当时第一想法就是这玩意考的不是程序员写脚本的能力,因为你肯定可以写出处理的脚本,难点就是你的脚本服务器根本跑不动,比如你把上万条数据,每条数据还贼大的数据存储在脚本中的一个变量里,还希望他完美执行,做梦吧你,这个时候你的脚本会出现莫名其妙的错误,这里少个逗号,那里缺个冒号,这些都是轻的了,麻烦的是多给你加几个冒号之类的,你就坐着哭吧。
所以这里你写脚本的时候,不光要考虑业务的处理原则,还要兼顾服务器的性能问题,这才是难点,下面我就讲讲我的思路,当然,如果你们有更好的思路,请马上告诉我,否则我真的要完蛋了。
顺道吐槽一句,这种数据,动动脑子都知道要往mongodb
里面扔啊,扔mysql
,真是城里人会玩啊。
解决思路1
这个解决思路的核心就是将数据库的读与写分离,因为MySql数据库的读写相比Redis等是比较慢的,而且数据量级还那么大,所以如果你一边读,一边写,那么最终的结果就是这个进程运行时间很长,最终死在路上,据一个尝试过的同事说,他的程序跑了一个多小时,最终死在了服务器上,为他的创建的进程默哀。
所以我创建了下面的这个解决方案,当然,坑还是有的。