Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows ODBC3多语句与多连接_Windows_Multithreading_Sql Server 2008_Odbc - Fatal编程技术网

Windows ODBC3多语句与多连接

Windows ODBC3多语句与多连接,windows,multithreading,sql-server-2008,odbc,Windows,Multithreading,Sql Server 2008,Odbc,所以现在我只有一个线程来处理对数据库的所有请求。假设我每秒有400个登录/注销/其他内容的请求,每秒有400个仅与项目相关的请求(移动、更新、删除等) 显然,问题是如果我想从数据库加载一个项目,但数据库当前正在处理一个登录请求,那么会有延迟。我希望它是即时的,这就是为什么我想创建另一个线程,专用于处理项目请求,另一个线程用于处理登录/注销等 微软说: 1:在一个连接句柄上有多个语句句柄,每个语句句柄有一个线程 2:有多个连接句柄,每个连接句柄只有一个语句句柄和一个线程 这两种方法的具体区别是什

所以现在我只有一个线程来处理对数据库的所有请求。假设我每秒有400个登录/注销/其他内容的请求,每秒有400个仅与项目相关的请求(移动、更新、删除等)

显然,问题是如果我想从数据库加载一个项目,但数据库当前正在处理一个登录请求,那么会有延迟。我希望它是即时的,这就是为什么我想创建另一个线程,专用于处理项目请求,另一个线程用于处理登录/注销等

微软说:

1:在一个连接句柄上有多个语句句柄,每个语句句柄有一个线程

2:有多个连接句柄,每个连接句柄只有一个语句句柄和一个线程

  • 这两种方法的具体区别是什么?我显然需要同时在两个线程中获取数据和插入/更新

  • 这种2线程对1线程的方法会加快速度吗

这两个线程将在不同的SQL表中以独占方式工作(即项目的线程将只使用项目表,它将永远不会使用登录表,反之亦然)

目前我正在使用以下函数(C++):


回答您的问题:

问题1:两种方法的具体区别是什么

回答:

  • 第一种方法跨多个线程共享相同的连接句柄。因此,基本上您首先连接,然后启动线程,每个线程将创建自己的语句句柄
  • 第二种方法对不同的线程使用不同的连接句柄。这意味着创建线程,每个线程启动自己的连接并创建自己的语句句柄
  • 我会避免第一种方法(在多个线程之间共享连接句柄),因为它有几个限制。例如,假设您的一个线程想要打开或关闭自动提交。由于自动提交是一个连接属性(所有线程共享同一个连接句柄),因此此设置的更改将影响所有其他线程

    问题2:这种2线程对1线程的方法会加快速度吗

    回答:

    不要认为你会注意到任何不同

    在这两种情况下,在多个线程之间共享相同的环境句柄应该是可以的

    SQLSetEnvAttr with SQL_OV_ODBC3
    SQLConnect
    
    SQLAllocHandle
    SQLBindParameter
    SQLExecDirect