前一段时间做的技术探索,在前天的千万记录的测试中瘫痪,郁闷

花了两个多月实现了系统原型。老大发话了:后续的开发先停,用这个数据库测试看看,说罢给了我一个2G的数据库。数据库是一个CSV, 不是规则的CSV,有自己的字段规则。刚开始我想先用C++写个程序,把这些数据按照占位符隔开,然后存入数据库。后来担心2G是Windows文件系统的单个文件大小的最大值,想先把这个2G的东东拆开。胡乱在网上找了几个不能达成目标的工具,再打开Windows Help,才发现FAT32系统文件最大值是4G(附:NTFS无单个文件最大限制,取决于硬盘大小,FAT最大值2G),于是放心的写了C代码。为了避免出错,先做了几个Demo文件,没有问题之后才开始转换这个2G的东西。

事情不是想象那么顺利,在转换到1.08G的时候,不知道出了什么问题,程序停止了(估计是数据中有不规则的行,我也没办法打开看。2G的文本,呵呵,任何编辑器都会死得很难看。Editplus直接悄悄的退出,Notepad, Wordpad直接告诉我内存不足)……胸闷中

准备再来一次的时候,突然想到,为什么不直接将它写入数据库?……我真是个笨蛋……于是打开Eclipse,连上Mysql,首先读出文件中的每一行,然后转换为相应字段,最后写入数据库,一个while(Not File.EOF)循环,加上Log记录……运行过程中又出现了ArrayIndexOutOfBoundsException, DateFormatException,要命的是运行了十几分钟的时候……该死的不规则的数据……没办法,只好改代码,捕获异常,Re-Build, run…一个小时后,这个2G的文本终于进了数据库……

随手来了一个select count(*), 结果赫然是12841782!一千多万条记录!我怀着自信的心情在系统中进行了一个最简单的查询……我没能等到结果出来就睡觉去了,起床的时候再看结果,仅仅初始化的工作就进行了500多秒(也就是select distinct的操作),后来进行的Query的操作就恐怖的不行,几乎每个操作耗时都在130s以上……按照事先定义的要求,千万级数据操作时间响应应该在一分钟以内,也就是说,我前一段时间的工作根本毫无作用!

今天上班,我简直不知道怎么办好了,郁闷得要死 : ( 我为这个项目付出了相当大的努力和汗水,现在却根本不能使用!

现在头脑乱糟糟的,需要清醒。

Comments are closed.