亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

并發環境下mysql插入檢查方案

2024-07-24 13:08:52
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了并發環境下mysql插入檢查方案的相關資料,需要的朋友可以參考下
 

業務背景: 
基本業務場景是這樣的,請求數據(車輛vin信息)進入到接口中,需要先判斷其在數據庫中的狀態,如果庫中不存在該vin,或者該vin狀態位為“1(已完成)”,則執行一些檢查操作后,將數據插入到數據庫中,此時新增vin狀態為0,調用人工處理接口,十分鐘后返回結果,將狀態置為1。如果其狀態位為“0(正在處理)”則駁回操作,返回提示信息。 
在單線程環境下,這樣的業務沒有問題,然而當并發訪問接口時,會出現同時進入兩條vin相同的請求AB,正常情況應該插入一條A,駁回一條B。然而并發環境下,B執行檢查狀態時A還沒有插入,因此AB都進入到了數據庫中,數據就錯誤了。

解決方案一: 
首先想到的是使用sql處理,對數據庫對應字段加唯一索引,保證一致性。如果插入重復的數據,則catch該異常,做出提示。

ALTER tableName ADD UNIQUE [indexName] ON (tableColumns(length))

但是由于業務限制,vin在庫中是可以重復的,多條重復數據查詢最新,所以不能再vin上添加唯一索引。

解決方案二: 
使用mysql事務操作,將檢查是否存在和插入作為一個事務進行處理,當檢查失敗的時候,不進行插入。從網上搜索了一下,大致思路如下:

 

public static void StartTransaction(Connection con, String[] sqls) throws Exception {     try {       // 事務開始       con.setAutoCommit(false);  // 設置連接不自動提交,即用該連接進行的操作都不更新到數據庫       sm = con.createStatement(); // 創建Statement對象       //依次執行傳入的SQL語句       for (int i = 0; i < sqls.length; i++) {         sm.execute(sqls[i]);// 執行添加事物的語句       }       con.commit();  // 提交給數據庫處理       // 事務結束     //捕獲執行SQL語句組中的異常       } catch (SQLException e) {       try {         System.out.println("事務執行失敗,進行回滾!/n");         con.rollback(); // 若前面某條語句出現異常時,進行回滾,取消前面執行的所有操作       } catch (SQLException e1) {         e1.printStackTrace();       }     } finally {       sm.close();     }   }

但是這樣實際上還是沒有解決并發的問題,這樣只是把兩個操作變成了一個原子的sql操作,可以用于同時插入兩條數據一致性的情況,但并不適合需求。

既然sql層面沒有解決問題,就考慮從java的并發編程方向解決。 
解決方案三: 
java解決并發問題,首先想到的是使用內置鎖或者可重入鎖,基本語法如下: 
·內置鎖: 
由于是在Servlet中進行的處理,因此使用synchronized(this)直接處理業務代碼,使得并發情況下,只能有一個線程訪問到該段業務代碼:

synchronized(this){  //todo1:檢查vin是否存在  //todo2:如果不存在插入vin}

·可重入鎖: 
相當于更靈活的內置鎖,在這里與內置鎖基本相同

public class DashengCallBack extends HttpServlet {  private static ReentrantLock lock= new ReentrantLock();  protected void doGet(HttpServletRequest request, HttpServletResponse response){    lock.lock();    try{      //todo1:檢查vin是否存在      //todo2:如果不存在插入vin    }finally{      lock.unlock();    }  }}

經過測試,這個方案是可行的,最終沒有采用的原因是因為直接使用這種方式加鎖,加鎖的代碼太多,影響效率。

解決方案四: 
設置一個查詢Map,插入前存儲數據,插入后刪除數據,代碼如下:

    ConcurrentHashMap<String, String> vinMap=new ConcurrentHashMap<String,String>();    if(vinMap.containsKey(vin)){      // todo1: vin 請求完畢后, 從vinInRequestMap里刪掉這個vinNo      // todo2: 返回正在查詢    }    vinMap.put(vin, "");    //todo3:插入vin到數據庫    vinMap.remove(vin);  }

這個方案基本滿足了業務需求,唯一的問題是要求接口的更新時間要與業務時間錯開,否則更新接口會清空vinMap,導致庫中數據混亂,出現錯誤。

以上就是本文的全部內容,希望對大家的學習有所幫助。



注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕九色91在线| 中文字幕亚洲无线码在线一区| 韩国日本不卡在线| 欧美激情免费观看| 日韩精品视频在线观看网址| 久久亚洲精品国产亚洲老地址| 欧美成人一二三| 国产日产欧美a一级在线| 欧美性极品xxxx娇小| 成人午夜激情网| 夜夜躁日日躁狠狠久久88av| 欧美亚洲另类激情另类| 欧美激情视频给我| 亚洲免费av片| 丰满岳妇乱一区二区三区| 国精产品一区一区三区有限在线| 欧美日韩国内自拍| 久久伊人色综合| 国产69精品99久久久久久宅男| 欧美在线视频网站| 超在线视频97| 亚洲午夜性刺激影院| 最近2019免费中文字幕视频三| 成人黄色激情网| 日韩成人在线视频| 久久精品99无色码中文字幕| 日韩高清av一区二区三区| 亚洲成人网av| 成人有码在线播放| 日韩精品免费视频| 国产欧美一区二区三区在线| 国产精品久久久久久久久久新婚| 国产精品久久久久久久久久| 色婷婷亚洲mv天堂mv在影片| 欧美日韩一区二区免费在线观看| 欧美精品少妇videofree| 国产精品成人v| 亚洲欧美另类在线观看| 亚洲精品一区中文| 欧美日韩国产精品| 97超级碰在线看视频免费在线看| 一区二区三区视频观看| 亚洲电影成人av99爱色| 最近2019中文字幕一页二页| 欧美视频专区一二在线观看| 欧美日韩在线观看视频小说| 国内外成人免费激情在线视频网站| 欧美色xxxx| 亚洲jizzjizz日本少妇| 欧美福利视频在线观看| 欧美国产第一页| 国产欧美一区二区白浆黑人| 日韩的一区二区| 国产精品欧美亚洲777777| 欧美激情喷水视频| 伊人久久久久久久久久| 国产精品免费观看在线| 国产精品亚洲视频在线观看| 欧美疯狂xxxx大交乱88av| 国产精品亚洲片夜色在线| 原创国产精品91| 成人免费网站在线看| 亚洲美女www午夜| 国产又爽又黄的激情精品视频| 91精品国产沙发| 精品中文字幕在线观看| 国产成人短视频| 国产精品久久久久7777婷婷| 日韩av电影在线播放| 精品国产乱码久久久久久天美| 精品国产乱码久久久久酒店| 国内精品美女av在线播放| 欧美大片网站在线观看| 欧美天天综合色影久久精品| 97超视频免费观看| 国产精品自拍偷拍视频| 欧美电影在线观看完整版| 亚洲女人被黑人巨大进入al| 91wwwcom在线观看| 国产一区二区日韩| 亚洲在线观看视频网站| 精品久久久999| 国产精品丝袜一区二区三区| 欧美日韩免费区域视频在线观看| 91精品国产综合久久香蕉的用户体验| 国产一区二区三区在线观看网站| 国产精品视频久| 亚洲网址你懂得| 久色乳综合思思在线视频| 精品国产区一区二区三区在线观看| 亚洲欧美一区二区精品久久久| 国产精品成人一区二区三区吃奶| 欧美国产日韩一区二区在线观看| 在线成人一区二区| 国产精品福利片| 欧美裸体男粗大视频在线观看| 国产欧美日韩中文字幕| 黑人与娇小精品av专区| 久久精品国产欧美亚洲人人爽| 亚洲电影在线观看| 亚洲一区二区三区成人在线视频精品| 日韩福利伦理影院免费| 亚洲乱码国产乱码精品精| 日韩av在线影院| 亚洲aⅴ男人的天堂在线观看| 日韩在线视频观看| 国产+成+人+亚洲欧洲| 久久精视频免费在线久久完整在线看| 成人写真福利网| 亚洲午夜激情免费视频| 精品亚洲男同gayvideo网站| 亚洲欧美日韩中文在线制服| 欧美电影免费观看电视剧大全| 精品国产区一区二区三区在线观看| 亚洲精品乱码久久久久久金桔影视| 欧美电影《睫毛膏》| 国产精品嫩草影院久久久| 亚洲天堂网在线观看| 欧美老少配视频| 久久久久久久久国产| 欧美激情一区二区三区成人| 亚洲精品视频免费在线观看| 亚洲人成电影在线| 久久99精品视频一区97| 国产精品羞羞答答| 国产精品视频公开费视频| 日韩欧美视频一区二区三区| 亚洲经典中文字幕| 久久九九亚洲综合| 日韩精品极品在线观看播放免费视频| 日韩激情av在线播放| 欧美一级片免费在线| 国产在线播放91| xxxx欧美18另类的高清| 亚洲天堂久久av| 久久久久成人精品| 久久97精品久久久久久久不卡| 欧美肥臀大乳一区二区免费视频| 欧美成在线视频| 亚洲剧情一区二区| www欧美日韩| 91夜夜未满十八勿入爽爽影院| 国内精品视频在线| 97在线视频免费| 中文字幕在线观看亚洲| 国产成人精品久久二区二区| 日韩中文理论片| 日韩av在线直播| 国产精品观看在线亚洲人成网| 亚洲成人免费在线视频| 黑人精品xxx一区| 中文字幕欧美精品在线| 国产精品久久久久久av下载红粉| 日本高清不卡在线| 久久久久99精品久久久久| 永久免费毛片在线播放不卡| 日韩精品视频免费在线观看| 亚洲精品国产拍免费91在线| 欧美中文字幕在线观看| 久久久久国产精品一区| 国产成人精彩在线视频九色| 欧美在线激情视频| 国模极品一区二区三区| 日韩精品亚洲精品|