实习单位:***公司
职 位:Java研发实习生 时间:2012.06 - 2012.07
工作内容:
1、 编写Electronic Shipping InstructionSystem(电子装运指示系统)中的PDF解析代码
(使用时间:1个星期左右)
涉及到的主要的包:PDFTextStream-2.2.1.jar(用了里面的PDFTextStream对象获得pdf的stream和RegionOutputTarget对象得到pdf里面某一区域的内容)
2、数据库查询统计用户的邮箱中邮件情况(derby数据库+mysql数据库)
查询半年前存在的客户,但是半年内没有流量的folder(使用时间:2-3个星期左右)
(1)因为我了解了系统的这部分流程后发现有部分邮箱的文件夹名字是配在spring的bean中的,所以在数据库中的数据是不完整的。所以我找了我们的老大确认了下,他同意了我的想法,然后我就开始想办法获得配置文件里面的folder名字集合,我一开始采用的方法是先打印出来,然后复制到xls文件里面,再写代码读进数据库。在这做的过程中想过了可以直接在打印那地方嵌入我的代码,但是后来没有这样做,因为有些地方会影响到原来系统。
(1)因为有一部分数据库是在mysql里面的,而mysql数据库是在远程的机子上,所以需要先想办法得到这部分数据,因为那机子负责着公司的主要业务,要求有几点:不能停机,不能对数据库的操作长时间影响性能。针对上面的特点我就开始了我的工作:
A/我先分析了备份数据的方式:
文本备份是指使用mysqldump、sqlhotcopy等mysql自带的工具进行备份,适合于不关闭数据库进行备份,但是缺点是速度较慢,其中sqlhotcopy不合适于windows系统下操作,并别只针对isam表。
二进制备份可以是直接拷贝和使用命令拷贝数据库。直接拷贝,如果正在备份的表正被读写就容易导致表损坏,而且不建议对isam表使用直接拷贝的方法来备份,因为ISAM表只能在相似的硬件结构的机器上拷贝。二进制备份要求最好关闭数据库,至少保证没有表的写操作同时进行。
B/在自己机子上进行大数据量的查询,看对机子性能的影响
开始插入10000条数据后查看各种参数发现
Cpu和内存的使用率没太大变化,由于不断波动,观察不出什么变化
而Number of SQLQueries如果开始查询则一开始查询是几乎都是达到最高值128,一会之后就会少点在60-90徘徊,平均是60左右(应该是ms)
C/选择了mysqldump备份和source恢复
(2)对数据库的查询如果涉及到比较复杂或者语句比较多的,最好先建立中间表先存入中间的查询结果,这样有利于查询后对语句进行检查和如果有错进行修改
(3)对查询结果和查询过程数据存在问题的时候可以自己先验证,然后再找上级老大确定,而不是叫老大去验证,例如期间就有一次我查询的数据明显觉得比较少,不是很合理,因为据我的估计的不止的,我就自己验证:我是使用query brower先看了数据,对里面某些符合的值进行查询,然后看是否在结果里面。然后反复检查了我的SQL语句,最后发现有一个地方我的条件里面没有把要比较的String的大小写统一起来再比较。
还有一次就是里面备份和现在的数据存在一些重复的数据,后来反映后才知道是上一个备份的人犯的错误,这也教会了我要先验证数据的时间段,即是表的名字已经明确跟你说是某年某月到某年某月的,你只需要几条语句就可以验证,然后再开始你的工作。
3、参与现有数据库的重构工作(mysql数据库)(使用时间:1个星期左右)
因为在之前的系统中每次添加一个用户都是必须由员工给用户配一个路径,是将一些写在xls里面,然后上传到某个文件夹,然后定期的去取出需要创建的用户的信息,但是由于前面信息部分是业务部的员工填写的,又比较多,就有时候会出错和造成效率不高,我听到这问题后,我了解了系统对这部分的处理后,我觉得是可以优化的,就提出了将一些默认的值设置到数据库,还有给其中一张表设置主键。然后写了一份比较完整的报告,正式提出我的想法,这个过程中带我的老大也给我很多的建议,在这过程中我学会了应该怎样把我的想法用文档的形式表达得很清楚,例如我的文档包括了以下几项:
A/修改的地方
B/修改前和修改后的对比表
C/每一项修改,对系统和数据库可能造成的影响(包括利和弊)
D/修改的详细步骤
还包括一些业务流程的熟悉,对系统的熟悉等等
系统架构