我必須首次創建一個mysql數據庫,以供多個應用程序並行使用。直到這一點我唯一的經驗與MySQL數據庫一直是單個程序(例如Web服務器)查詢數據庫。 現在我正進入一個場景,我將有幾個CXF java servlet類型的程序,以及後臺服務器編輯和閱讀相同的模式。 我正在使用Connector/J JDBC驅動程序在所有情況下連接到數據庫。在並行調用mysql數據庫時的注意事項
我的問題是:我需要做什麼才能確保並行訪問不會成爲問題。我意識到我需要在適當的時候使用交易,但是我真正迷失的地方在於管理。例如, 。 每當一個servlet完成一項工作時,是否需要關閉連接? 我是否需要訪問數據庫的每個程序的唯一用戶? 我是否必須對連接器/ J對象執行某些操作? 我是否必須以不同的方式聲明我的表格? 我錯過了什麼,或者有什麼我沒有想到的? 我對如何處理事務和SQL本身有一個很好的想法,但是當我設置數據庫時需要做的事情時,我感覺很迷茫。
另一個注意事項:使用'InnoDB'存儲引擎,而不是'MyISAM'。 'InnoDB'在處理併發性(行鎖定而不是表鎖定)方面要好得多。 – 2012-04-25 22:12:13
關於連接池的主題,我有幾個後續問題。 1.是否意味着在所有servlet之間共享,還是公平地給每個自己的連接池?原因是大多數已建立的單元測試運行在tomcat之外,我沒有看到它們使用tomcat特定的對象。 2。從我在這裏讀到的內容來看,我是否正確地假設主要關心的是避免並行訪問單個連接對象?有多個連接對象綁定到相同的數據庫用戶是好的,因爲有持久連接? – 2012-04-26 19:08:12
1)連接本身通常不共享。該池是共享的並且是線程安全的。池的主要關注點是創建數據庫連接需要多長時間。一個更簡單的解決方案是在每個請求上創建一個連接,但99%的響應時間將會協商該連接。它提前談判一堆連接並重用它們更有效率。 2)我相信連接在技術上是線程安全的,但不建議在多線程中共享它們,因爲事務的commit()由連接管理。 – nsfyn55 2012-04-27 01:31:43