七月份就在网上找到了纯真IP数据库,想自己试着做一个IP查询系统,做那个出来纯粹是想接触接触NET与sql的结合,到目前为止,一直是用的access。认识都是一个过程,都是从未知到已知,从陌生到熟悉。
下载的软件生成了一个TXT文本文件,17MB多。在设计数据库的时候,我照搬了txt文本的格式.
222.211.147.82 222.211.147.82 四川省成都市 崇州市奔驰网吧(西街)
222.211.147.83 222.211.147.91 四川省成都市 电信ADSL
222.211.147.92 222.211.147.92 四川省成都市 崇州市奔驰网吧(西街)
222.211.147.93 222.211.161.24 四川省成都市 电信ADSL
222.211.161.25 222.211.161.25 四川省成都市 大邑县黄师网吧
把里面的IP分成了8部分ipp1,ipp2,ipp3,ipp4,ipp5,ipp6,ipp7,ipp8,ipp9以及地址address共计9列,用了一个正则表达式插入到了sql数据库,才发现数据库占用空间达120MB,更要命的是,我如此设计的初衷是想用一个IP的四部分(ip1 ip3 ip3 ip4)分别与上面的ip1-ip8进行比较,即
ip1∈[ipp1 ipp5] ip2∈ [ipp2 ipp6] ip3∈[ipp3 ipp7] ip4∈[ipp4 ipp8]之间,可问题出现了:虽然绝大多数情况满足我预期设想,但像上面蓝色IP部分就成了“漏网之鱼”,如此一查询,结果显然——不出来。想了半天也没想出来,准备把上面的情况一一分解看有多少种情况再创建不同的sql语句,呜呼哀哉,天杀我也!
可能是想睡觉,一上床得到点“安慰”,猛然想起IP不是一个"255进制"的数吗?如此而已,原来是自己没把对象搞清楚,忙头乱想搞得自己晕头转向。
一切重新开始,定义了IP1 IPP2 address三列,
ip1=ipp1*255^3+ipp2*255^2+ipp3*255+ipp4
ip2=ipp5*255^3+ipp6*255^2+ipp7*255+ipp8
如此,数据库剧减为21MB,速度不用我说,更重要的是不会有上面那种无结果的现象了。
此次教训,数据库乃软件生命之躯!~
以下是放在自己电脑的样本: