当发生外部事件(传入测量数据)时,我的 Java 代码中的事件处理程序将被调用。数据应写入 MySQL 数据库。由于这些调用的频率很高(每秒> 1000),我想有效地处理插入。不幸的是,我不是专业的开发人员,也不是数据库白痴。
忽略效率方面,我的代码大致如下所示:
public class X {
public void eventHandler(data) {
connection = DriverManager.getConnection()
statement = connection.prepareStatement("insert …")
statement.setString(1, data)
statement.executeUpdate()
statement.close()
connection.close()
}
}
我的理解是,通过在语句上调用addBatch()和executeBatch() ,我可以将物理磁盘访问限制为假设每 1000 次插入。但是,正如您在我上面的代码草图中看到的那样,语句对象是在每次调用eventHandler()时新实例化的。因此,我的印象是批处理机制在这种情况下不会有帮助。关闭自动提交然后在连接对象上调用commit()也是如此,因为每次插入后都会关闭该对象。
我可以将局部变量的连接和语句转换为类成员,并在程序的整个运行时重用它们。但是始终保持数据库连接打开不是不好的风格吗?
一种解决方案是手动缓冲数据,然后仅在收集适当的批次后才写入数据库。不过到现在我还是希望各位聪明的能告诉我如何让数据库为我做缓冲。