单位的外网计算机有好几千台,出口网关配置有一台流控设备,还有一台防火墙设备,现在为了应付公安局的检查,需要将所有用户的上网日志记录下来,而且可以随时查询出近三个月任意用户的上网记录,我的想法是接收防火墙的日志然后存入数据库,然后做查询,现在查询我做起来没有问题,关键是没有好软件来采集日志并存入数据库,我找了一个kiwi syslod的软件,我现在通过kiwi Syslogd采集的防火墙的日志,存入数据库做日后查询使用,
现在已经可以把数据存入sql Server数据库了,格式如下图
数据库中数据格式:
Date            Time            Priority        HostName         Message
04-23-2010      09:51:41     Local7.Debug   172.16.88.10 <PNB0>tvkoo.udp 1272015958-1272016133 172.16.10.23:1167-220.167.212.11:52600 46597 1260
04-23-2010      09:51:41     Local7.Debug   172.16.88.10 <PNB0>default.udp 1272016012-1272016133 172.17.36.72:6048-221.6.235.6:22757 42 0
04-23-2010      09:51:41     Local7.Debug   172.16.88.10 <PNB0>default.udp 1272016012-1272016133 172.17.36.72:6051-124.160.125.5:1814 41 0
04-23-2010      09:51:41     Local7.Debug   172.16.88.10 <PNB0>http.tcp 1272016068-1272016133 172.16.126.158:2438-119.42.233.243:80 970 2541我的要求也很简单,就是通过一条sql语句检索一个关键词(如IP地址),可以检索到Message字段的有此关键词的所有字段记录。但是每天2000万条记录,我需要保存三个月的记录,我现在已经实现每天把记录存一个表,可以一天一天检索,但是2000万记录检索起来也是很慢。
我的想法是
1、能不能通过一个途径把现在的表中的数据按照Message字段的信息头分别存入不同的分类表(如http,tvkoo,default),
2、将Message字段信息按照空格分成五个字段,我仅仅需要检索ip所在的那个字段,如下图所示,
3、另外听说建立索引可以优化检索速度,因为以前没有搞过用索引优化查询,请各位明示我这个索引应该怎么建立? 
我的想法是给转换成这种格式:
Date            Time            Priority        HostName         Message_A        Message_B                Message_C                               Message_D   Message_E
04-23-2010 09:51:41 Local7.Debug 172.16.88.10 <PNB0>tvkoo.udp   1272015958-1272016133    172.16.10.23:1167-220.167.212.11:52600  46597       1260
04-23-2010 09:51:41 Local7.Debug 172.16.88.10 <PNB0>default.udp 1272016012-1272016133    172.17.36.72:6048-221.6.235.6:22757     42          0
04-23-2010 09:51:41 Local7.Debug 172.16.88.10 <PNB0>default.udp 1272016012-1272016133    172.17.36.72:6051-124.160.125.5:1814    41          0
04-23-2010 09:51:41 Local7.Debug 172.16.88.10 <PNB0>http.tcp    1272016068-1272016133    172.16.126.158:2438-119.42.233.243:80   970         2541

解决方案 »

  1.   

    虽然是2000万条记录
    但是按天检索还是可以实现的
    我试验了1000万条记录检索大概需要五六分钟,因为我的Message字段信息很简单的
      

  2.   

    1.首先,这么大数据量的查询已经没有意义了.
    2.如果要做,建议换到oracle去,不要用sql server了.
    3.建立相关索引.
    4.提高硬件配置.
    5.合理优化查询.
    http://topic.csdn.net/u/20080722/21/4501e9cb-a9fa-437e-aaf6-7b629bd26215.html?seed=1110065108
    http://topic.csdn.net/u/20080716/11/2317d040-48e7-42da-822e-040b4c55b46d.html