回覆列表
-
1 # 網際網路技能圖譜
-
2 # 使用者993866542822
1.最佳化資料結構,每張資料表字段4-5個,加上索引。還可以將不同的種類的資料存入不同的資料庫。減少單個數據庫的壓力。
2.寫入資料只是存的問題,問題在於讀取資料會變慢。建議使用快取memcache,redis在向你招收哦。將使用者資料存入記憶體,再次讀取避免從資料庫查詢。
3.分散式,搞叢集,擴大配置。
-
3 # 使用者540603506501400
可以用樂觀鎖方案解決
1.在表裡增加個欄位,版本號
2.每次更新前先從資料庫裡獲取這個版本號的值,然後更新時要同步更新版本號+1,並且增加更新條件版本號=查詢出來的值。
3.因為更新時每次只可能有一個執行緒更新到資料,等到另外一個執行緒再去更新資料的時候版本號已經+1了,所以會更新失敗,重新獲取版本號再走更新流程,這樣就解決了多執行緒併發更新被覆蓋的問題。 而且樂觀鎖機制避免了長事務中的資料庫加鎖開銷(多個執行緒操作過程中,都沒有對資料庫資料加鎖),大大提升了大併發量下的系統整體效能表現。
高併發最可能遇到的就是思索問題了。
首先根據業務確定使用的什麼隔離級別,一般要麼是確認讀,要麼是可重複讀。
確認讀有可能兩次讀的資料不一致
可重複讀也叫快照讀,能確保每次讀的資料一致,但不保證能讀到最新commit的資料。
其次要考慮更新語句是否會產生死鎖,要確認表中相關欄位都有什麼鎖。
主鍵:主鍵索引上鎖,資料行上鎖
唯一索引:索引上鎖,主鍵索引上鎖,資料行上鎖
普通索引:會鎖住所有符合條件的索引和行,還會上間隙鎖
無索引:會鎖全表,逐漸釋放不符合條件的鎖
因此要儘可能只鎖需要的行,避免不同事務鎖住互相需要的行,造成死鎖。