2012-03-01 114 views
0

我可以胡說八道,但:事務隔離級別數量龐大

哪個隔離級別是「最好的」爲 地段上大量的連接運行的線程,執行大量的更新和寫入使用交易? 或隔離級別只用於讀取?

- EDIT DBMS ... InnoDB mysql ... best ..以及我想要的是運行寫/更新的並行事務,如果例如我們在同一列上有兩個更新,我做不whant得到併發性問題......

所以並行寫入/更新,其所有鎖定在數據庫上運行 --edit 後夫婦讀數得出這一結論

http://dev.mysql.com/doc/refman/5.0/en/innodb-lock-modes.html

所以更新s行鎖,而不是共享鎖,所以更新時應該沒有問題。 但是,我們必須事先檢查哪個線程來用於鎖定連接.. 所以應該沒有concurent更新在同一行的DATABSE ... 所以

NO:

t1 - T1: update (id 1) 
t2 - T2: update (id 1) 

一必須注意兩個線程不會更新同一行......但從數據庫的角度來看,只要它是InnoDB並具有最低級別的隔離級別READ_UNCOMMITED,就不應該有問題 我會在更新後提供更新幾個飛蛾:D

+0

請定義「最佳」並提供有關您的DBMS的更多詳細信息。 – theglauber 2012-03-01 16:12:37

+0

我編輯了這個問題,如果你有更多的問題,請不要猶豫.. – Darwly 2012-03-01 16:30:58

回答

1

作爲一個經驗法則:隔離度越高(含義越高:隔離度越高),就會獲得更多的鎖和開銷。所以如果你想盡可能快地和平行地走,你根本就不需要隔離。

當然這可能會破壞您的業務邏輯,所以我認爲沒有其他辦法可以查看所有可用的隔離級別並根據您的要求進行檢查。

+0

嗯..我在想更多的可重複閱讀....但是你bascialy說的是,如果我使用NONE,並在應用程序中關心不更新同一個項目兩次,我不應該得到問題? – Darwly 2012-03-01 16:37:17

+0

差不多。如果當你看到或看不到其他會話的部分內容時,你根本不在乎,你應該會好起來的。 – 2012-03-01 16:54:59

+0

還有一個問題:如果兩個單獨的線程沒有隔離的兩個事務寫在同一個表上,但是不同的列(保存ID 2)(更新ID 1),這是否會導致問題? – Darwly 2012-03-02 08:15:56