日志数据库存储解决方案

在Oracle中,基本的结构是表,Oracle10g支持多种类型的表,包括:


外部表:

可以把存储在平面文件中的数据看做是一个表,用户可以对其直接进行查询,并在查询中把它和其他表关联起来。可以使用外部表在不需要把大量数据导入到数据库中的情况下就可以对这些数据进行访问。在创建一个外部表之前,必须在Oracle中创建一个目录别名,使这个目录指向外部文件的物理位置。 外部表的局限性使其不适合于某些联机事务处理应用程序。不能对外部表执行任何update和delete操作。表的动态性越大,越不适合使用外部表。可在操作系统级动态地更改相应的文件,如果用户的应用程序只生成insert语句,就能将那些要插入的数据写入一个外部文件而不是数据表。 不能对外部表进行检索,缺乏索引并不一定会对性能产生负面影响,外部表的查询速度非常快,外部表可能会涉及IO,但现在IO操作系统使用高速缓存和RAID技术极大的降低了对相同文件进行重复扫描性能的负面影响。 限制访问特性还允许实施有关于数据访问的复杂安全规则,拥有READ权限的用户能够使用外部表并将其与别的表连接,没有访问权限的用户只能使用公共可访问表中的数据。


LOB

用户可以使用LOB数据类型来存储长数据,如果使用这些数据类型中的一种存储大对象,就可以利用新功能来浏览和操作数据,还可以使用Oracle Text对CLOB数据执行文本搜索。

Oracle支持以下四种LOB数据类型:

BLOB:二进制LOB,存储在数据库中的二进制数据

CLOB:字符型LOB,存储在数据库中的字符型数据

BFILE:二进制文件,存储在数据库外部的只读二进制数据

NCLOB:支持多字符集的CLOB列。

LOB列的数据可能和表在物理上完全隔离,对于BLOB和CLOB类型来说,定位器指向由数据库创建的用来保存LOB数据地址的独立数据位置,因此LOB数据与表里的其他数据不必直接存储在一起,默认情况下LOB数据长度小于4000字节就可以和其他数据存储在一起。 将数据存储在外部,可以避免每次读取数据库中的多个行时都扫描LOB数据,而LOB数据只有在需要的时候才读取;否则只读取其定位器的值。

Oracle Text所支持的查询方法:

一个单词的精确匹配搜索

多个单词精确匹配搜索

短语精确匹配搜索

搜索互相接近的词

搜索具有相同词根的词

模糊匹配搜索

搜索发音相似的词。


分区表:

可以把一个表分成多个部分,并单独管理每一部分,可以添加新的分区、割舍已经存在的分区并在独立于其他分区的情况下管理某个分区。对表进行分区操作能够简化维护操作,或提高用户查询效率。可以按照一定的数据范围,在一个列表中的数据、列数据的哈希值来进行分区。

 

建议解决方案: 根据数据库模型中日志信息部分各表的设计,我们推荐采用CLOB数据类型来存储解析后的日志各个字段。原因如下:

1. 基本上不用对原有的数据库设计进行较大改动,只是修改数据类型(将VARCHAR替换为CLOB)。

2. 可以支持模糊查询。

3. 每个字段的长度都不是很长,只是记录条数比较多,可以采用分区表进行优化再加上索引

你可能感兴趣的:(J2EE)