根据我上面的问题,我需要在我的数据库的一个表中插入超过20000个行。根据表现,我正在寻找提高这一过程效率的方法。我的第一个想法是用Java.Thread实现这一点,但我不太确定这是否足够节省。有人对我有什么好建议吗?
修改:我已使用preparedStatement.addBatch()
答案 0 :(得分:1)
对我来说是安全的,只要每个线程使用不同的Connection对象,然后正确处理资源。
无论如何,请注意,数据库本身对并发运行的请求(MySQL中的max_connections)有限制,因此它无法创建比此数字更多的线程。另外,请考虑其他优化,例如batch inserts。
答案 1 :(得分:1)
从不同的线程访问数据库没有任何问题。正如Eyal所写,只要确保像Connections这样的东西只能用于一个线程并妥善处理。
另一个问题是,如果这实际上有助于您的表现。在使用多个线程之前,我确保你做了其他所有事情。特别是使用批处理语句似乎是第一个要查看的选项,如果你还没有。
答案 2 :(得分:0)
如果我理解正确,您需要一种方法将数千个查询写入您的数据库。 你知道你可以执行一批MySQL查询吗? Stackoverflow上已经存在一个问题, Java: Insert multiple rows into MySQL with PreparedStatement
你可以使用:PreparedStatement#addBatch()http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#addBatch%28%29
和 PreparedStatement的#则ExecuteBatch() http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#executeBatch%28%29
在上面的链接中查看@BalusC的答案以获取更多详细信息。
答案 3 :(得分:0)
“20000千”听起来不太像(数据库维度)。
在通过多个线程添加复杂性之前,最好探索预处理语句和批处理语句的可能性。
这取决于您特定类型的数据库,但大多数RDBMS都有允许执行此类任务的批处理加载器。
如果你想添加一些信息(数据库类型,记录长度,数据库在与应用程序不同的机器上运行的剂量,并且它具有足够的处理能力来实际处理多个高压线程而不会因此而停顿理由)人们可能能够更好地帮助。