c++ - 并行线程中的数据库访问,可行的选择?

标签 c++ database multithreading oracle11g

我有以下情况

main()
{

   hnd = CreateTHread( func1 );

   // Call fun2()

   wait(hnd);

   return ;

}


fun2()
{
  //Access database to perform some read operation on TAble A
}


func1()
{

//Access database to perform some read operation on TAble A
// Recursive operations
}

我观察到,如果我使用线程方法,fun2() 需要更长的时间才能完成。难道是因为 THread func 和 fuc2 在同一张表上工作。请注意,这两个函数中只有读取操作。 AWR 报告建议,使用线程方法时查询执行次数增加了

最佳答案

类似的问题 - Multi-threaded database read access

Oracle JDBC 接口(interface)以及 Oracle native 驱动程序(我想)能够处理多线程请求 (http://www.cs.umbc.edu/portal/help/oracle8/java.815/a64685/tips1.htm)

然而,当涉及到数据库引擎中的实现时,这还不清楚。根据当前文档,我的理解是,只要您的请求是只读的且无意更新,就不会发生锁定,您应该会看到性能提升(至少是次要的)。

然而,还有许多其他因素决定引擎是否会使用并行性。服务器的硬件配置(多核)等也可以确定查询引擎是采用并行还是排队的方法。

顺便说一句,您在尝试过的两种方法中观察到的时间差异有多大。您的数据有多大?

关于c++ - 并行线程中的数据库访问,可行的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6728986/

相关文章:

database - 具有 1000 多个带索引列的 CUBRID 的性能如何

java - 有什么理由不总是使用 AtomicInteger 作为数据成员吗?

多线程 Java 代码的 java.util.ConcurrentModificationException

node.js - 仅使用一个回调并行运行异步

c++ - 具有默认值的参数化构造函数是什么意思?

c++ - 为枚举重载代字号 "~"运算符

c++ - 将现有 C 项目转换为 WPF

c++ - "reserved for any use"是什么意思?

node.js - 可用于部署应用程序的最简单的服务器和数据库服务(特别是 AWS)

database - 无法在xcode中打开sqlite数据库