我使用单个连接使用 Java 在 Oracle 数据库上执行查询。使用多个线程而不是从单个结果集中读取一个线程会更快吗?
考虑我将自己实现读取操作的线程安全。
我只是想知道,通过具有多个线程的单个连接从单个结果集中读取是否有任何性能提升?
我使用单个连接使用 Java 在 Oracle 数据库上执行查询。使用多个线程而不是从单个结果集中读取一个线程会更快吗?
考虑我将自己实现读取操作的线程安全。
我只是想知道,通过具有多个线程的单个连接从单个结果集中读取是否有任何性能提升?
通过具有多个线程的单个连接从单个结果集中读取是否有任何性能增益?
如果所有这些线程都在阅读,那么不会。多个线程甚至可能使其变慢,因为您必须进行某种同步以防止并发读取。因此,您的多个线程最终会按顺序执行。您甚至可能会发现,除了创建它的线程之外,任何线程都无法访问单个连接。
现在,如果您想从一个数据库读取并写入另一个数据库,您最好使用某种生产者-消费者关系。生产者从数据库中读取数据并将数据放入队列中。消费者线程从队列中读取并写入另一个数据库。
所以生产者这样做:
while not end of data
read record
put record on input queue
end-while
mark end of queue
消费者:
while not end of queue
remove item from input queue
write record to database
end-while
使用这种配置,您可以获得非常大的性能提升,因为线程彼此独立运行,除了共享队列,它通常是一种以这种方式针对并发访问进行优化的数据结构。例如,.NET 就有BlockingCollection
这个功能。其他环境可能有一些非常相似的东西。