ODBC3多语句与多个连接

时间:2016-03-11 17:17:15

标签: windows multithreading sql-server-2008 odbc

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

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

微软说:

  
    

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

         

2:拥有多个连接句柄,每个连接句柄都有一个语句句柄和单个线程。

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

  • 这2个线程与1个方法会加速吗?

两个线程在不同的SQL表中都是独占的(即项目的线程只使用ITEMS_TABLE,它永远不会使用LOGIN_TABLE,反之亦然)

目前我正在使用以下功能(C ++):

SQLSetEnvAttr with SQL_OV_ODBC3
SQLConnect

SQLAllocHandle
SQLBindParameter
SQLExecDirect

1 个答案:

答案 0 :(得分:0)

回答你的问题:

Q1:两种方法的区别是什么?

<强>答案:

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

    Q2:这2个线程与1个方法会加速吗?

    <强>答案:

    不认为你会发现任何差异。

    在两种情况下,在多个线程之间共享相同的Environment句柄应该没问题。