动态表分区技术在网络安全审计系统中的应用
0引言
基于内容的网络安全审计系统,为了进行事后统计分析和提供证据,需要将用户指定范围内所有采集到的数据信息存入数据库以及相对应的文件中。能够保存较长时间范围内的历史数据信息对于网络安全审计系统来说是非常重要的,通常情况下需要保存最近三个月的历史数据信息。 经过前期需求和数据测试分析,1G的电信网络中每天大约会增加6 000万个数据文件和数据记录,这样其存储的数据库规模非常大。 ,数据库规模的不断变大,将会导致数据库系统性能的急剧下降,使得数据库维护的成本不断上升,甚至造成周期性的停机。 1表分区 表分区技术就是当数据库中的某个表变得特别大时,可以根据一定的条件或者规则,将一个大表划分为多个包含少量数据的分区,每个分区都是一个逻辑实体,是表的一个子集。通过将一个大表拆分成为多个更小的单个表,使得只访问一小部分数据的查询执行得更快。另外,对于这些小表可以更快地执行维护任务(如重建索引、数据备份或导入导出等)。 在超大型数据库中,通常不使用单个分区中的大数据集,而采用经过优化设计的本地分区和访问策略,能够使查询性能提高一倍以上,甚至几十倍。采用表分区技术的优点: 1)可以极大地缩短查询时间; 2)减少数据加载时间,改善数据库的可维护性; 3)解决从活动数据库中删除历史数据时出现的数据修剪问题。 2动态表分区 表分区按照实现的方式不同可以分为静态和动态两种。所谓静态表分区就是在数据库初始化的时候按照预定格式一次性生成所有分区。而动态表分区则是应用程序根据一定的规则动态创建所需分区,并对这些分区进行动态管理和维护。采用静态表分区技术的应用程序实现比较简单,但是可扩展性较差。采用动态表分区技术的应用程序实现要复杂一些,但是开发出来的应用程序可扩展性较好,能够根据不同的需求进行扩展。 静态表分区是目前超大型数据库系统解决方案中普遍采用的一种技术,到目前为止,还未见一种比较完善的基于动态分区的解决方案。另外,将基于动态分区的超大型数据库系统性能问题的解决方案应用到网络安全领域是一个需要特别研究的问题。 设计开发的网络安全审计系统产品定位于100M~1000M以上的高端网络用户(兼容中低端用户),其数据存储和处理规模非常巨大,为了使得产品具有更好的扩展性能,该系统采用动态表分区技术。 3多表查询 在采用分区视图技术实现多表联合查询之前必须动态创建一个包含多个成员表的分区视图。对于超大型数据库来说,动态创建几个表的分区索引视图需要大量的时间。另外,分区视图技术是通过使用联合查询运算符来实现的,很多个大数据量表的联合查询性能是比较低的,这将在下面的性能测试中进行说明。 采用临时表技术则没有多表联合查询的那些限制,实现也比较简单,性能比执行联合查询要好得多,但是产生的事务日志信息比较多。另外,采用临时表技术的时候还可以利用多表分页查询机制来控制每次数据查询时需要访问的数据范围以及返回的记录数,以提高数据查询的速度。对于性能要求比较高的超大型数据库应用程序来说,建议采用临时表技术来满足动态分区的数据库查询统计的性能要求。 4解决方案 本文采用一种如图2所示的解决方案,来解决基于动态表分区的网络安全审计系统超大型数据库的性能问题,并为开发人员提供独立于数据库设计的基于动态表分区的数据库通用访问接口。 此方案在普通数据库应用程序的基础上增加一个的基于动态表分区的访问接口的模块,并对该模块进行优化。 5结论 由于采取了动态表分区技术并对相关接口进行优化,使得网络安全审计系统的性能得到了很大提高。 在千兆环境压力测试中每秒能提交9000条左右的数据记录,各种数据库查询统计操作都能够得到快速响应,经相同环境下的压力测试其性能比同类产品都要响应迅速。