㈠ java如何處理高並發
你指的高並發量大概有多少?
幾點需要注意:
盡量使用緩存,包括用戶緩存,信息緩存等,多花點內存來做緩存,可以大量減少與資料庫的交互,提高性能。
用jprofiler等工具找出性能瓶頸,減少額外的開銷。
優化資料庫查詢語句,減少直接使用hibernate等工具的直接生成語句(僅耗時較長的查詢做優化)。
優化資料庫結構,多做索引,提高查詢效率。
統計的功能盡量做緩存,或按每天一統計或定時統計相關報表,避免需要時進行統計的功能。
能使用靜態頁面的地方盡量使用,減少容器的解析(盡量將動態內容生成桐早靜態html來顯示)。
解決以上問題後,使用伺服器集群來解決單台的瓶頸慶輪陸問題。
基本上以上述問題解決後,達到系統最優。
至於樓上有人提到別用JAVA來做,除非是低層的連接數過大(如大量的譽頃埠佔用需求),這種情況下考慮直接C來寫,其他的可以用JAVA來做。
可以網上購買視頻做教育學習。
㈡ JAVA解決資料庫並發問題
幾百人報名就叫並發嗎?
概念錯了!
幾百人操作幾百條互不相關的數據那個不叫並發,只有同時操作同一條數據的情況才叫並發。
如果兩人同時修改同一條數據的話,那個要不就使用行鎖(悲觀鎖),要不就用version(樂觀鎖)控制。
其它情況無需考慮的。
㈢ java多用戶同時訪問和資料庫進行交互,如何能夠高並發
我覺得1萬的數據並發量並不大,想oracle資料庫,mysql承載這些並發是沒有問題的
我覺得,主要的問題在於你GPS是一直在修改的,因為車輛在不斷的行駛,這樣的話,可能會影響資料庫的性能
我覺得,你可以用一個內存行的資料庫,比如,redis,用這個來存放GPS信息,redis是基於內存的,讀寫要比關系資料庫速度快(忽略網路因素),你可能要問GPS入庫怎麼弄,可以做一個定時任務,每隔多少時間來將redis的數據寫入到資料庫中,當然,redis也支持一些演算法,比如LRU,來設置何時將數據同步到資料庫
㈣ JAVA如何實現並發
對於並發操作,都斗搏要上鎖的,設置一個欄位記錄抽到獎的人數,每抽到一個就讓update該欄位值+1,更新過程中數據態游庫會自動給資料庫上鎖,直到commit提交,這里就避免了你說的同時查詢的帆銷銷問題。
㈤ 為什麼Java程序在並發的情況下資料庫會出現重復記錄
這是一個高並發,多線程問題
如果數據粒度沒有設計到行級鎖,
比方說A這條記錄 是100,並發情況下兩個人拿到A記錄100 一個更新為70,一個更新為80
實際是拿走了50的量,但是因為是並發情況 導致數據不正確。所以這個地方是一個數據鎖的概念,至於為什麼會這樣,道理也很簡單,一個排隊做事情,一個並行做事情,能一樣嗎?
㈥ Java多線程並發操作資料庫能否提高運行速度。
優化建議:
1. 在你的代碼里大點評測下 每個操作花的時間. 譬如 dom4j解析花了多久, 存儲到資料庫花了多久等等.
2. 評測哪些地方可以並行操作以提高CPU利用率;
3. 資料庫操作部分也可以做適當優化, 譬如批量提交可以顯著提高插入速度, 譬如去除索引/主鍵後插入等;
4. 不同機器的IO速度是不同的, 因此應該能提供運行時的任務調度參數化, 譬如多少個dom4j解析線程, 入庫的批量數量等;
㈦ java並發問題求解
具體思路如下:
假設你要更新t_table表,其中FLAG=0表示待取數據,1表示已取數據。
1,更新狀態為0的一條數據,如:update t_table set flag=1 where flag=0 and rownum=1
2,更新成功記錄滾喚數不為0則表示該進程可以修改該條游者記錄。
3,更新成功記錄數為0則表示沒有記錄
這樣通過資料庫的鎖,保證神備薯多線程並發操作資料庫記錄的問題。希望對你有幫助。
㈧ 關於JAVA編寫的WEB程序多次並發訪問資料庫的問題
有一個思路,你可以用ajax局部刷新數據,不刷新整個頁面,同時用緩存,例如第一個30秒的數據放入緩存,頁面從緩存里取數據,第二個30秒,你從資料庫取出數據後,寫個對象對比的方法,來比對新數據和第一個30秒存入緩存的數據,如果數據沒有改變,那頁面什麼操作也不用做,因為數據沒變化,刷新也沒意義,如果第二個30秒數據發生變化,那麼就刷新緩存為第二個30秒的數據,並且局部刷新頁面數據。資料庫的查詢是避免不了的,所以沒發減輕資料庫的壓力,只能是優化數據的顯示。就象我上邊提到的,如果前後2個30秒數據沒有變化,那麼就不要刷新頁面。
㈨ java多線程訪問資料庫怎麼優化啊,並發很大
個人覺得高寫入並發的話先用緩存緩沖一下,可以合並的寫入合並成批量寫入可以管一些用但終歸寫入量很大的話還是要在資料庫端優化了,把並發寫均衡到多台伺服器上,應該沒有別的辦法了。如果瓶頸不再資料庫那就是應用伺服器處理能力不足,升級應用伺服器。
㈩ Java中高並發下怎麼保證數據一致性
以mysql來說,可能出現臟讀、不可重復讀以及幻讀,mysql默認設置是可重復讀,即一次事務中不會讀取到不同的數據。
可以做如下操作:
1)打開兩個客戶端,均設置為RR;
2)在一個事務中,查詢某個操作查到某份數據;比如是某個欄位version=1存在數據;
3)在另一個事務中,刪除這份version=1的數據;刪除後,在2所屬的事務中查詢數據是沒有變化的,還是存在version=1的數據;
4)當我們在2所屬的事務中繼續更新數據,那麼會發現更新不了,明明我們就看到了這份version=1的數據;
緩存一致性:
緩存一致,與什麼一致?是與資料庫一致,對外查詢每個時刻一致;所以在針對於緩存與資料庫之間該先更新哪一個呢?可能有人覺得我先更新資料庫,再更新緩存不就行了嗎?但是有想過個問題嗎?
當用戶已經支付成功了,更新到資料庫,但是呢?你還在緩存中顯示未支付,在用戶點擊頻率很高並且資料庫壓力過大,來不及同步到緩存時,那你是不是很尷尬,這就是典型的不一致了。此時用戶再支付,那你又告訴他已經支付了,那他會把你罵死的
那該怎麼來做呢?我們可以這樣,先更新緩存再更新資料庫,那麼存在什麼問題呢?
1)緩存更新成功,但是資料庫更新失敗,而被其它的並發線程訪問到
2)緩存淘汰成功,但是資料庫更新失敗,這也會引發後期數據不一致