【发布时间】:2017-11-06 09:39:42
【问题描述】:
假设,我们必须通过java代码在一个mysql表中插入20行。以下哪种方法会有效以及为什么。
1) 使用executeBatch将所有的insert语句变成一个batch,然后使用Preparedstatement的commit方法一次性插入所有行。
2)为每次插入创建线程。每个线程插入一行。
PS:插入是通过web API完成的,所以我们需要实时的状态(是插入失败还是成功)。
【问题讨论】:
-
我会说 executeBatch 是更好的选择,因为它会在一个 db 调用中进行插入并且性能很高,多线程本身会使这些插入变慢,并且可能来自 DB 池的多个套接字连接被使用,如果你只有一个连接,那么所有其他线程将等待使用该连接。
-
取决于数据的价值。在某些情况下,当我需要存档某些东西时,当不需要实时数据时,我有一个带有linkedqueue的线程,它确实写入数据库,主线程只需将记录添加到该队列以进行处理。
-
@Marvin 。这是否意味着多线程比第一个选项慢。我需要它实时。
-
我有单线程来处理顺序插入而不阻塞主进程。
标签: java mysql multithreading jdbc prepared-statement