Java SQL连接性能
我正在尝试将组合模式的tomcat日志加载到MySQL数据库中,现在我在解析每个记录时将其推送到数据库中 首先,从InputStream中读取一行 然后将其解析为用于包装日志记录的LogItem 然后使用MySQLDbManager将记录插入数据库 MySQLDbManager持有数据库连接池的引用,一旦调用它来推送日志,它将请求一个连接来执行sql操作,然后释放它 我担心如果这是低性能的,因为MySQLDbManager将在日志推送期间始终获取并释放连接 我曾经想过制作一个列表来保存所有的登录项,在日志文件被读取后,我将这个列表传递给MySQLDbManager,但是日志文件可能拥有太多的记录,也就是说,它会导致一个登录项日志被放入列表中,这安全吗 这是两种方法:Java SQL连接性能,java,database,connection,Java,Database,Connection,我正在尝试将组合模式的tomcat日志加载到MySQL数据库中,现在我在解析每个记录时将其推送到数据库中 首先,从InputStream中读取一行 然后将其解析为用于包装日志记录的LogItem 然后使用MySQLDbManager将记录插入数据库 MySQLDbManager持有数据库连接池的引用,一旦调用它来推送日志,它将请求一个连接来执行sql操作,然后释放它 我担心如果这是低性能的,因为MySQLDbManager将在日志推送期间始终获取并释放连接 我曾经想过制作一个列表来保存所有的登录
MySQLDbManager dbm = MySQLDbManager.getInstance();
private void pushLogToDbByStream(BufferedReader br) {
String line;
int total = 0;
int error = 0;
try {
while ((line = br.readLine()) != null) {
LogItem li = LogParser.parser(line);
dbm.writeLogItemToDb(li);
total++;
}
} catch (IOException e) {
log.error("Error occur when read log from file");
} catch (IllegalStateException e) {
error++;
total++;
}
log.info(total + " items have been processed, " + error + " failed");
}
public int writeLogItemToDb(LogItem item) {
//get a connect from the connect pool
DBConnection dbc = pool.alloc();
String insertSql = "insert into log values" + item.buildSQLInsertValues();
//The buildSQLInsertValues() will return something like this--('127.0.0.1','GET','http://www.google.com'...)
int res;
try {
res = dbc.updateSQL(insertSql);
return res;
} catch (SQLException e) {
log.error("error occur when try to insert the item to db +\n" + insertSql + "\n");
return 0;
} finally {
//release the connection
pool.release(dbc);
}
}
有更好的办法吗
顺便说一句,如果男生认为我的问题太简单而无法回答,你可以拒绝回答,但请不要投票否决我的帖子,我很难赢得声誉。:) 如果您使用的是连接池,那么“MySQLDbManager将在日志推送过程中始终获取并释放连接”就没有实际开销,因为您实际上不会为每个请求打开和关闭物理连接。这就是连接池的全部用途 此外,每当你担心某件事情会如何表现时,你能做的最好的事情就是自己测试它。编写一个快速测试台,看看这段代码有多快——每秒可以将多少日志推送到数据库?将100MB日志推送到数据库需要多长时间
只有通过实际测试代码,您才能确定答案。是的,这是真的,我可以测试将日志推送到db所需的时间,但我不知道测试最多可以在列表或映射中放置多少对象,只需将对象放在它们上,直到系统本身停止工作?不管怎样,你的回答“你实际上不会为每个请求打开和关闭物理连接。”对我很有帮助。谢谢