[問題] C#與MySql的問題

作者: StupidGaGa (笨嘎嘎)   2014-12-25 12:29:13
有些問題魯蛇的我不太清楚,想請問鄉民。
1. 連線ID與指令ID?
資料庫連線的時候有個連線的 thread ID,
取得的時候用 MySqlConnection.ServerThread,
這在資料庫是可以觀察到的。
但是公司的前輩說,
PHP內除了有連線ID可以查到之外,還有個指令的ID可以查,
是叫做Resource ID,具公司前輩說明此ID是資料庫給的。
例如我同一條連線做三次查詢,會像下面這樣,
Thread ID : 11325, Rexource ID: 475
Thread ID : 11325, Rexource ID: 476
Thread ID : 11325, Rexource ID: 477
想請問C#如何可以查到指令的ID?
2. 多執行緒中的資料庫連線該如何設計?
我知道這問題很菜,但是google我查不太到,
不知道是太菜的問題還是我關鍵字找錯。
我到現在有三種設計,不過我覺得都有些問題
(1) 一個執行緒內有一條連線,open->指令->close、open->指令->close
(2) 一個執行緒內有一條練限,open->指令->指令->close
(3) 多個執行緒共用一條連線、用Lock,應用程式開始時open,應用程式結束close
想請各位鄉民指點我一下,
又或者有可參考的書籍。
先謝謝各位有回答的鄉民
作者: Peruheru (還在想)   2014-12-25 13:34:00
連線無所謂吧,是寫入才比較有lock的問題多開幾條連線應該不會怎樣...吧這樣阿,好吧XD
作者: GoalBased (Artificail Intelligence)   2014-12-25 15:31:00
連線當然不能過多啊 不然跟被攻擊有甚麼差別
作者: Peruheru (還在想)   2014-12-25 15:32:00
那不然這樣,就是獨立sql查詢的部分為一個執行緒所有人的查詢動作都丟到一個池內,然後sql執行緒去執行這樣永遠都是同一個執行緒在使用同一條連線,沒有衝突只是變成原本sql查詢的部分變成要等待執行緒執行到他們的查詢結果才行,每個人就領個號碼牌等叫號就是把SQL查詢的部分獨立為一個代理的意思可能長時間未偵測到查詢,就關閉連線,要用再開甚至可以做出優先權高的查詢優先執行這種事不知道這樣行不行?不然就像窗口一樣多開幾個窗口嘛一個服務員處理不來,就多兩個服務員,時間就剩三分之一
作者: Litfal (Litfal)   2014-12-25 18:07:00
這得看你的多執行續是做啥、怎樣設計的。一般來說我會用(1)+Connection Pool

Links booklink

Contact Us: admin [ a t ] ucptt.com