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

  处理任务为两个输入文件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. IDEA13中配置struts错误:ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter +找不到java程序包 解决办法

    问题一:ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter解决办法 1.确保所有strut ...

  2. 深入剖析tomcat的类加载机制

    1JVM类加载机制 JVM的ClassLoader通过Parent属性定义父子关系,可以形成树状结构.其中引导类.扩展类.系统类三个加载器是JVM内置的. 它们的作用分别是: 1)引导类加载器:使用n ...

  3. OC-7-内存管理

    课程要点: 内存管理的必要性 MRC(手动管理) 自动释放池 ARC是怎么对内存进行管理的 内存管理的必要性 OC是一门面向对象的语言,在软件运行过程中会创造大量的对象,每创建一个对象系统就会给其分配 ...

  4. 【Python + ATX基于uiautomator2】之编写unittest自动化测试脚本

    不说废话上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/08/31 09:43 # @Author : zc # @ ...

  5. HTML5实现端访问时禁止放大和缩小网页

    <title>html5禁止和移动.缩放网页</title><meta name="viewport" content="width=dev ...

  6. python 爬虫3 异常处理

    1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的服务器 服务器不存在 在代码中,我们需要用try-except语句来包围并捕获相应的异常.下 ...

  7. apache+svn No installed service name 'Apache2' 【转载】

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://zys0597.blogbus.com/logs/32763815.html 问题:第一次在winxp下   安装apac ...

  8. Codeforces 455A Boredom 取数字的dp

    题目链接:点击打开链接 给定一个n长的序列 删除x这个数就能获得x * x的个数 的分数,然后x+1和x-1这2个数会消失.即无法获得这2个数的分数 问最高得分. 先统计每一个数出现的次数.然后dp一 ...

  9. hdu 5374 Tetris(模拟)

    pid=5374">题目链接:hdu 5374 Tetris 模拟.每次进行操作时推断操作是否合法,合法才运行,否则跳过.每次一个token落地,推断一下是否有消除整行. #inclu ...

  10. PostgreSQL tips

    tip 1 在sql中我们可以设置一个列自增长identity(1,1),但在postgresql中却没有这个关键字定义.但postgresql也有实现相关功能,那就是只需要将该列数据类型标记为ser ...