2012-08-02 136 views
0


我想为我的应用程序设计日志文件解析器。我有数千个具有相同数据模式的日志文件,我的目标是首先解析数据并将其存储在数据库中。
日志文件具有以下图案 -Java中的日志文件解析器

a=some_value_1 b=some_value_2 c=some_value_3 d=some_value_4 
a=some_value_5 b=some_value_6 c=some_value_7 d=some_value_8 
a=some_value_9 b=some_value_10 c=some_value_11 d=some_value_12 
a=some_value_13 b=some_value_14 c=some_value_15 d=some_value_16 

我最初的想法是阅读所有使用InputStreamReader线和在每条线上的每个文件挑中的数据,并获取它的DB文件行。似乎对一些文件很好,但性能明智,我需要改进我的设计。有人可以提出一些更好的设计模型/体系结构吗?

+1

默认Java IO不被称为快... – tucuxi 2012-08-02 19:00:38

+0

您的约束是什么?多少个记录,多少个文件?例如,如果您有足够的内存,则可以将这些文件映射到内存中...... – tucuxi 2012-08-02 19:01:49

+0

请您详细说明一下吗? – 2012-08-02 19:01:50

回答

2

我建议用BufferedReader代替InputStreamReader会更好。你的任务的解析部分现在看起来不是很难。

+0

任何特定的设计模式? – 2012-08-02 19:06:02

+0

我过去有过类似的任务。我使用了BufferedReader,它很棒。您的应用程序的另一部分在数据库交互中结束。在我的情况下,我的同事编写了一个存储过程,它接受一个固定格式的xml文件并将其放入数据库表中。然后DB作业醒来并将其解析为不同的表以获取日志记录。事实上,日志文件的读取和解析速度足够快(每秒几百MB),但DB服务器在xml解析中非常慢。所以,你可以考虑存储过程以避免多次插入。 – gkuzmin 2012-08-02 19:12:40

+1

但意识到存储过程缓慢。通常这种任务很简单,没有任何基石。所以,我不知道任何具体的模式,我可以建议你解决这个问题。 – gkuzmin 2012-08-02 19:18:18

1

模式很棒,但只有当它们有意义时才应该使用它们。这里不需要特殊的模式:只需遍历文件;对于每个文件,请阅读它,并根据需要进行插入操作。使用main []方法,程序不应该在单个文件/类中占用超过50行。小而干净的代码比复杂的大代码好得多。