[这篇博客主要是我个人对这个任务的总结, 主要目的不是拿来和分享的, 所以难免让人感觉不知所云, 请直接忽视这篇即可.]

  处理任务为两个输入文件comfe(1,000,000行,文件结构"域名 NS 该域名的权威服务器")和iplab.txt(64万行, 文件结构

"IP起始地址 CN 中国 地区编号 地区名称 省编号 省名称 市编号 市名称"), 要求将"权威服务器位于中国"的域名及其所在的

省市输出.

  整个程序主要包括5个部分:

    1.得到无重复的权威域名服务器(输出结果文件名ANS);时间46秒

    2.通过多线程dig得到ANS的IP地址数值(输出结果文件名ANS-IPNum);时间288秒(4分钟多)

    3.压缩处理iplab.txt,得到不同省市对应的IP地址数值范围(输出结果文件名IPRegion);时间26秒

    4.对比IPRegion文件和ANS-IPNum文件得到权威所在的省市(输出结果文件名ANS-Region);时间1290秒(21分钟)瓶颈

    5.对比ANS-Region文件和comfe文件得到最终结果(输出结果文件名result);时间639秒(10分钟)瓶颈

  总用时2289秒(38分钟),找到的权威在国内的域名有60463个.

  两个对比的地方占用了超过3/4的时间,是程序的主要瓶颈.

  每个部分的主要工作,用下面的简单伪代码来描述如下:

    1. 处理comfe文件: sort -u $2--> ANS, 结果为8万多行

    2. 处理ANS文件: dig $0 --> ANS-IPNum(由于dig操作的对象数量较多,速度较慢,因此采用多进程), 结果为8万行左右

    3. 处理iplab.txt文件: 压缩处理,得到IPRegion文件,结构为"IP起始 IP结束 省市名称",结果为2万多行

    4. 对比ANS-IPNum和IPRegion文件,得到文件ANS-Region, 结构为"权威服务器名称 所在省市名称", 结果为2490行

    5. 对比comfe和ANS-Region文件,得到最终结果文件result, 结构为"域名 权威服务器名称 所在省市名称", 结果为

  代码略.

  整个程序要注意的地方:

    1. 要仔细分析每个输入文件的格式,对正确率和效率都有很大的影响:

      (1) 在comfe文件中不是以"."结尾的域名要加COM处理

      (2) 压缩处理iplab文件

    2. 对于每个文件的处理顺序是非常重要的, 对整个程序的效率也有很大的影响.此处详细分析:

      情况A:先对比ANS-IPNum和IPRegion得到ANS-Region,然后对比ANS-Region和comfe得到文件resultA

         对比ANS-IPNum和IPRegion得到ANS-Region: 8万行 * 2万行, 结果ANS-Region (<= 8万行)

         对比ANS-Region和comfe得到resultA: (<= 8万行) * 100万行

         粗略的估计复杂度: 8万行 * 2万行 + (<= 8万行) * 100万行 -> 8万行 * 100万行

      情况B:先对比ANS-IPNum和comfe得到NS-ANS-IPNum,然后对比IPRegion和NS-ANS-IPNum得到文件resultB

         对比ANS-IPNum和comfe得到NS-ANS-IPNum: 8万行 * 100万行, 结果 <=100万行

         对比ANS-Region和NS-ANS-IPNum得到文件resultB: <=100万行 * 2万行

         粗略的估计复杂度: 8万行 * 100万行 + (<= 100万行) * 2万行 -> 10万行 * 100万行

      尽管这两种情况,看起来差别不是很大, 但在实际运行时,时间差距还是比较大的.

  总结:

    1. 对于输入文件要仔细分析, 注意一些细节(为什么有的域名以"."结尾有的不是以"."结尾),默认缺省COM是为了减小文件的

      大小.(也算是一种压缩存储)

    2. 刚刚更改的程序的第一次运行尽量要守着观察,因为可能会有死循环或工作量很大时要及时终止任务的执行.

    3. 不要再把实验室的服务器弄死机了!

Shell Script Practice 2 Summary的更多相关文章

  1. How to Create a First Shell Script

    How to Create a First Shell Script   Shell scripts are short programs that are written in a shell pr ...

  2. 学习shell script

    摘要:概述.script的编写.test命令.[]判断符号.默认变量($1...).if...then条件判断式. 一.概述 [什么是shell script] 针对shell所写的脚本,将多个命令汇 ...

  3. Shell script之How to write

    Write shell script: 1) Editor like vi or mcedi 2) Set execute permission for your script chmod  perm ...

  4. shell及脚本4——shell script

    一.格式 1.1 开头 必须以 "# !/bin/bash"  开头,告诉系统这是一个bash shell脚本.注意#与!中间有空格. 二.语法 2.1 数值运算 可以用decla ...

  5. shell script

    一.shell script的编写与执行 1.shell script 的编写中还需要用到下面的注意事项: a.命令的执行是从上到下,从左到右地分析与执行 b.命令.参数间的多个空白都会被忽略掉 c. ...

  6. (copy) Shell Script to Check Linux System Health

    source: http://linoxide.com/linux-shell-script/shell-script-check-linux-system-health/ This article ...

  7. shell script练习

    执行脚本的几种方式: 1. sh a.sh 或者  bash a.sh  调用的是 /bin/bash 进程执行的,所以脚本不需要执行权限. 2. 直接使用绝对路径执行, /home/script/a ...

  8. 这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script

    这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4378224.html ...

  9. CentOS Linux下一个tomcat起停,查看日志的shell script

    CentOS 的tomcat安装目录:/usr/local/tomcat vi MyTomcatUitl.sh          创建文件chmod u+x MyTomcatUtil.sh   赋执行 ...

随机推荐

  1. C#类库帮助类

    前言 此篇专门记录一些常见DB帮助类及其他帮助类,以便使用时不用重复造轮子. DBHelper帮助类 ①首当其冲的就是Sql Server帮助类,创建名为DbHelperSQL 的类 ,全部代码如下: ...

  2. mysql之load语句

    LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE tbl_name

  3. plsql programming 13 其他数据类型

    bolean 类型 raw 类型, 用来保存和操作少量的二进制数据. urowid 和 rowid 类型, 这两种数据类型表示数据库的 rowid. 所谓 rowid 就是一个标识符-用来表示数据库中 ...

  4. android:clearTaskOnLaunch的用法

    比如你的应用里有N个Activity,其中有个是设置页面,你从主页面进入到设置页面设置了一些东西之后,突然,按了下Home键,回到了Android的Home,这时候你做了些别的事情,然后你再次点击你的 ...

  5. C++标准库之condition_variable

    conditon_variable(条件变量)用于线程间同步 condition_variable有5个函数,函数名及对应的功能如下: wait阻塞自己,等待唤醒 wait_for阻塞自己,等待唤醒, ...

  6. [浪风推荐]javascritp中倒计定时器和循环定时器

    在javascritp中,有两个关于定时器的专用函数,分别为: 1.倒计定时器:timename=setTimeout(“function();”,delaytime); 2.循环定时器:timena ...

  7. Struts2 是什么?

    Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架. Struts2不只是Struts1下一个版本,它是一个完全重写的Struts架构. WebWork框架开始以Struts框架为基础 ...

  8. ThinkPHP带表情无限级评论回复

    今天就tp中(含表情)无限级评论回复做一个个人总结. 1.准备TP基本框架 2.数据库,数据表的建立 A.先说说数据库(表)的建立. a-1,数据库:blog a-2,数据表:bolg_comment ...

  9. Oracle 11R2 linux上新建实例

    Step1. root用户远程登陆到linux主机上.执行下面的命令切换到oracle用户,使对应的环境变量配置文件生效. # su oracle# source ~/.bash_profile St ...

  10. Python如何利用多核处理器

    Python中,如果想使程序充分利用多核处理器,有以下几个方案: l 使用threading模块,然后将程序运行在IronPython或Jython之上. l 使用Python自带的multiproc ...