csv文件到SQL路由的性能问题和优化

时间:2013-11-18 13:55:34

标签: apache-camel

对Camel来说很新,但到目前为止很有趣。

我用它来处理FTP的fsv文件:d到特定目录,解析它们然后将数据放在相关的MySql数据库表中(所有这些都在同一主机上)。

我有一个包含4个路由的简单CamelContext,每个路由处理不同的文件类型并将解析后的数据放在其关联的表中。许多这些文件可以每15分钟出现在FTP目录中(时钟15,30 45,50分钟)。

驼峰上下文注册表只有一个条目,即dataSource(由org.mariadb.jdbc.MySQLDataSource提供的简单Mysql数据源......我们正在迁移到MaraiDb)

4条路线中的每条路线都遵循以下模式,区别仅在于“从文件”名称模式和处理器的选择:

from("file:" + FilePath + "?include=(.*)dmm_all(.*)csv.gz&" + fileAction + "&moveFailed=" + FaultyFilePath)
                        .routeId("myRoute")
                        .unmarshal().gzip()
                        .unmarshal().csv()
                        .split().body()
                        .process(myProcessor)
                        .choice()
                        .when(simple("${header.myResult} != 'header removed'"))
                        .to("sql:" + insertQuery.trim() + "?dataSource=sqlds")
                        .end();

每个处理器只删除文件头(列名),并使用给定的插入查询将插入体设置到关联的MySql表中。

对于传入的文件,它就像一个魅力。

但是当应用程序/ Camel进程未启动时,FTP目录可能会填满大量文件。 在这种情况下启动应用程序时会出现性能问题。

我使用某个文件ammount阈值获得以下异常:

Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: 
Could not get JDBC Connection; 
nested exception is java.sql.SQLNonTransientConnectionException: 
Could not connect to localhost:3306 : Cannot assign requested address

我尝试在每条路线上添加一个延迟,但是进展顺利,但速度很慢。

我在猜测(我可能会添加)路由线程之间存在争用(如果这是每个路由的一个线程如何工作?)和dataSource的单个数据库连接。

是不是这样,如果解决这个问题的最佳策略(连接池?或者对所有路由使用单个共享线程或......)?

我在上面使用的Camel场景中有哪些其他策略可以提高性能?

非常感谢任何意见和反馈。

欢呼声。

0 个答案:

没有答案