sql並發處理
『壹』 面試java開發時問到高並發怎麼處理的,還有sql優化有哪些辦法,有哪位大神知道啊,新手!!
Java開發高並發的處理方法:
最基礎的地方做起,優化我們寫的代碼,減少必要的資源浪費
避免頻繁的使用new對象,對於整個應用只需要存在一個實例的類,我們可以使用單例模式。對於String連接操作,使用StringBuffer或StringBuilder,對於工具類可以通過靜態方法來訪問。
避免使用錯誤的方式,盡量不用instanceof做條件判斷。使用java中效率高的類,比如ArrayList比Vector性能好。
圖片伺服器分離
對於web伺服器來說,圖片是最消耗資源的,於是我們有必要把圖片與頁面進行分離,我們把圖片放到獨立的圖片伺服器。這樣的架構可以降低提供頁面訪問請求的伺服器系統壓力,並且可以保證系統不會因為圖片的問題而崩潰。在圖片伺服器上,我們可以對不同的配置進行優化。
具體接觸過的緩存機制是hibernate的緩存機制。為了避免每次都向資料庫中取得數據,我們把用戶常常訪問到的數據放到內存中,甚至緩存十分大的時候我們可以把內存中的緩存放到硬碟中。還有高級的分布式緩存資料庫使用,都可以增加系統的抗壓力。
分批傳送
在做某項目的時候,一次傳遞的參數太多,而且資料庫規定一次最多傳遞的參數最多是三萬條,當時有五萬條記錄,那怎麼傳送呢?最終是分批傳送,電梯里一次乘不下那麼多的人,會報超重的bug,那就分批把人送上去。
還有一次在考試系統中,如果那麼多的考試人員同時提交到資料庫中,資料庫的壓力增大,有時會被down掉,當時採用的方法是使用ajax非同步傳輸,沒有等待考生點擊提交按鈕的時候,就把考生的答案自動提交,這樣也避免了突然斷電考生前面做過的題出現丟失的現象。
DB優化
在資料庫設計的時候就要考慮到後期的維護,資料庫三範式是我們設計資料庫索要遵循的原則。
索引的建立:建立索引要適當,如果一個表經常用來被查詢,對於增加和修改很少被用到,我們就可以為這個表建立索引,因為對於增加和修改和刪除操作時,我們對索引的維護要大大超過索引給我們帶來的效率。
表欄位的類型選擇要恰當。包括欄位的長度、類型等,要根據實際存儲的數據進行選擇,長度不要過長,否則會影響效率。
外鍵要慎用,因為主鍵代表這一張表,而外鍵代表一群表,對表之間進行了關聯,在刪除修改等需要我們關聯。
在資料庫操作上。 盡量使用prepareStatement,少用Statement,因為PrepareStatement是進行預編譯的。
connection設置為readOnly,Connection是對書庫連接,屬於重量級,我們使用即可。
連接池的使用,我們可以修改資料庫默認的連接數。
『貳』 在用MQ處理高並發sql時,有什麼方法能得到返回結果么
對於大量並發請求,我們暫且認為這個量已經超過了資料庫正常的處理能力。那麼僅僅通過資料庫層面已經無法解決了。這需要在JAVA程序端通過緩存的方式進行優化。Hibernate本身對OR對象進行了一定程度的緩存處理,但如果這仍不能解決問題,那麼就要考慮從業務層面來定義緩存的粒度。例如:在一個WEB應用中首頁上會有很多需要從資料庫中讀取的內容,但其更新頻率往往很慢,那麼首頁的可以作為緩存的顆粒。 這里介紹一個輕量級的緩存工具OSCache,它既可以在JSP頁面中加入特殊的Tag來進行頁面內容的緩存,也可以在後台邏輯中處理對象級緩存。 還有,對於高並發應用的優化是一個系統工程。上述的緩存技術只是一個方面,還有包括資料庫優化,SQL優化,日誌優化,負載均衡等等方法。這就不是一句兩句能講清楚的了。
『叄』 代碼中並發執行同一個sql會影響sql的速度嗎
對單次sql執行來講,影響不會太大,除非並發數超過了資料庫瓶頸,導致sql執行需要等待;
對整個並發執行來講,肯定會比執行單個sql要慢的,因為雖然多次執行的sql是一樣的,但是對資料庫來講還是需要進行多次處理的,只是在資料庫中sql只需要解析
一次就好
『肆』 關於SQL Server2000數據並發導致存儲慢的問題
主要有兩種方法
1、優化sql的邏輯,使得邏輯越簡單越好。
2、使用到的表結構要建索引