1. 程式人生 > >高併發系統資料冪等的解決方案,併發冪等解決方案

高併發系統資料冪等的解決方案,併發冪等解決方案

http://www.bkjia.com/MsSql/1151376.html

前言

在系統開發過程中,經常遇到資料重複插入、重複更新、訊息重發傳送等等問題,因為應用系統的複雜邏輯以及網路互動存在的不確定性,會導致這一重複現象,但是有些邏輯是需要有冪等特性的,否則造成的後果會比較嚴重,例如訂單重複建立,這時候帶來的問題可是非同一般啊。

什麼是系統的冪等性

冪等是資料中得一個概念,表示N次變換和1次變換的結果相同。

高併發的系統如何保證冪等性?

1.查詢

查詢的API,可以說是天然的冪等性,因為你查詢一次和查詢兩次,對於系統來講,沒有任何資料的變更,所以,查詢一次和查詢多次一樣的。

2.MVCC方案


多版本併發控制,update with condition,更新帶條件,這也是在系統設計的時候,合理的選擇樂觀鎖,通過version或者其他條件,來做樂觀鎖,這樣保證更新及時在併發的情況下,也不會有太大的問題。

例如:update table_xxx set name=#name#,version=version+1 where version=#version# ,或者是 update table_xxx set quality=quality-#subQuality# where quality-#subQuality# >= 0 。

3.單獨的去重表

如果涉及到的去重的地方特別多,例如ERP系統中有各種各樣的業務單據,每一種業務單據都需要去重,這時候,可以單獨搞一張去重表,在插入資料的時候,插入去重表,利用資料庫的唯一索引特性,保證唯一的邏輯。

4.分散式鎖

還是拿插入資料的例子,如果是分佈是系統,構建唯一索引比較困難,例如唯一性的欄位沒法確定,這時候可以引入分散式鎖,通過第三方的系統,在業務系統插入資料或者更新資料,獲取分散式鎖,然後做操作,之後釋放鎖,這樣其實是把多執行緒併發的鎖的思路,引入多多個系統,也就是分散式系統中得解決思路。

5.刪除資料

刪除資料,僅僅第一次刪除是真正的操作資料,第二次甚至第三次刪除,直接返回成功,這樣保證了冪等。

6.插入資料的唯一索引

插入資料的唯一性,可以通過業務主鍵來進行約束,例如一個特定的業務場景,三個欄位肯定確定唯一性,那麼,可以在資料庫表新增唯一索引來進行標示。

這裡有一個場景,API層面的冪等,例如提交資料,如何控制重複提交,這裡可以在提交資料的form表單或者客戶端軟體,增加一個唯一標示,然後服務端,根據這個UUID來進行去重,這樣就能比較好的做到API層面的唯一標識。

7.狀態機冪等

在設計單據相關的業務,或者是任務相關的業務,肯定會涉及到狀態機,就是業務單據上面有個狀態,狀態在不同的情況下會發生變更,一般情況下存在有限狀態機,這時候,如果狀態機已經處於下一個狀態,這時候來了一個上一個狀態的變更,理論上是不能夠變更的,這樣的話,保證了有限狀態機的冪等。

以上就是高併發系統資料冪等的解決方案的資料整理,後續繼續補充相關知識,謝謝大家對本站的支援!


相關推薦

併發系統資料解決方案併發解決方案

http://www.bkjia.com/MsSql/1151376.html 前言 在系統開發過程中,經常遇到資料重複插入、重複更新、訊息重發傳送等等問題,因為應用系統的複雜邏輯以及網路互動存在的不確定性,會導致這一重複現象,但是有些邏輯是需要有冪等特性的,否則造成

記錄一次MySQL兩千萬資料的大表優化解決過程提供三種解決方案

問題概述 使用阿里雲rds for MySQL資料庫(就是MySQL5.6版本

windows7系統開機一直顯示正在更新無法正常開機解決辦法

操作 處理 info 如果 行處理 完成 解決辦法 今天 pos 今天早上打開電腦提示正在進行更新,請勿關閉計算機。但是當它更新到35%時不在往前進行一直停留在 這個頁面無法開機。 自己重啟了好多次依舊無法正常開機,在網上找了好多解決辦法,總算把這個問題解決了,現將處理方法

IDEA建立maven的web專案時main資料夾下沒有javaresources目錄原始檔夾

我們在用IDEA建立maven webApp專案的時候,建立完成後發現main資料夾下並沒有java,resources等原始檔夾目錄。這時,我們需要手動新增這些原始檔夾: 建立後的專案目錄結構: 手動新增原始檔夾: 選擇File->Project S

mysql 並行寫資料導致重複的問題加間隙鎖解決

   前期設計只會有一個客戶端,現在變為多個客戶端接收同樣的資料,向本地伺服器寫同樣的資料,採用的是mysql的預設事務級別,頻繁導致資料重複。     先是加個行鎖 ,兩個客戶端都執行這段程式碼時,第一個會鎖住;後面的只能等待,類似lock概念;但是未解決資料重複的

轉載:ORA-01034和ORA-27101的解決方法oracle無法開啟解決辦法

1 先看oracle的監聽和oracle的服務是否都啟動了。啟動oracle監聽: cmd的命令列視窗下,輸入lsnrctl start,回車即啟動監聽。 2 檢視oracle的sid叫什麼,比如建立資料庫的時候,例項名叫“orcl”,那麼先手工設定一下oralce的sid,

不懂這些併發分散式架構、分散式系統資料一致性解決方案你如何能找到高新網際網路工作呢?強勢解析eBay BASE模式、去哪兒及蘑菇街分散式架構

網際網路行業是大勢所趨,從招聘工資水平即可看出,那麼如何提升自我技能,滿足網際網路行業技能要求?需要以目標為導向,進行技能提升,本文主要針對高併發分散式系統設計、架構(資料一致性)做了分析,祝各位早日走上屬於自己的"成金之路"。 目錄:問題分析概念解讀Most Simple原理解讀eBey、去哪兒、蘑菇街分

針對併發系統解決思路與方案

總體上: 開濤大神在部落格中說過:在開發高併發系統時有三把利器用來保護系統:快取、降級和限流。 1.擴容 根據業務系統的型別,考慮不同的針對在資料庫方面的擴容: 2.快取(特別重要) 快取設定的地方 手段 主要是Redis、CDN、瀏覽器等,其次

系統架構師培訓要點:減少資源消耗靠虛擬代理方案解決了!

解決方案 虛擬代理 應用程序 系統性能和吞吐量的需求決定了單純在數據庫中操作整個倉庫拓撲數據是不現實的。這種大量的服務器端對象,會消耗大量的服務器內存和活動對象表的空間,如果這些對象使用得比較少,就很容易造成數據庫服務端資源的浪費。把倉庫拓撲數據存放在本地內存中,形成內存數據對象(數據緩存),以便

CC2540是一款性價比低功耗片上系統(Soc)解決方案它適合藍牙低功耗應用領域

數字 醫療 保持 國內 定時 技術 定位 集成電路 性能 CC2540是一款高性價比,低功耗片上系統(Soc)解決方案,它適合藍牙低功耗應用領域,極少的外圍元器件以及強大網絡節點建立成為可能。CC2540是一款含有高速和低功耗8051內核的RF收發器。適用於低功耗系統,有超

併發快取處理之——快取穿透的幾種形式及解決方案

快取失效的幾種形式 1 快取穿透 快取穿透是指查詢一個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。在流量大時,可能DB就掛掉了,要是有人利用不存在

VS2010低版本軟體開啟VS2012版本工程檔案原因及其解決方案

在vs2010中開啟vs2012的專案   今天在自己的電腦上裝了vs2010然後要開啟之前在vs2012上建立的sln檔案   被提示-- 無法開啟在新版本上建立的sln--解決方案--檔案      其實vs2010與vs2012上的sln檔案沒有本質區別。   打不開

併發程式設計與併發解決方案學習(併發程式設計初體驗)

以下都是發生執行緒安全的案例: 模擬5000個請求,併發數200 package vip.fkandy.chapter02; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.CountDown

併發】壓力測試 java.io.IOException: Too many open files解決方案

 對作業系統做相關的設定,增加最大檔案控制代碼數量。Linux在Linux核心2.4.x中需要修改原始碼,然後重新編譯核心才生效。編輯Linux核心原始碼中的 include/linux/fs.h檔案,將 NR_FILE 由8192改為65536,將NR_RESERVED_FILES 由10 改為 128。編

Mac系統10.11及以上升級numpy、scipypython包報錯解決方案

最近看到引力波相關內容,其中關於科學家們使用了一個python的第三方包:GWPY包。好奇之下,自己也安裝了一下這個python包。但是發現一個問題。Mac系統自帶的python無法更新第三方包,其中報錯的是numpy包,錯誤如下: Collecting

redis學習系列--Redis 併發下的快取穿透問題解決方案

下面這段程式碼 如果1W個人同時訪問的話,  從redis 拿 allUser 時, userList為空時,那麼1W個人都要進入if判斷語句,查詢資料庫,資料庫壓力承受不住 package com.

ES8388_MS8413音訊系統解決方案成熟穩定,價效比

主要效能指標 ■內建高效能音質改善處理Audio DSP — 24 bit DSP ■一路數字音訊輸入I2S Digital Audio — 取樣率44.1KHz和48KHz;位元率16bit、24bit ■ 兩路立體聲模擬輸入Analog Audio

CSS網頁背景圖片比例占滿整個頁面的解決方案

100% 放大縮小 所有 功能 cnblogs 高度 圖片 版本 class 想做一個個人展示類的網站首頁,用整張圖片來當背景,瀏覽器窗口放大縮小時背景圖片不會變形,需要用到分層來實現其他功能,就用DIV來實現了 #bodycontainer { width:10

掛載文件系統出現"kernel panic..." 史上最全解決方案

某個文件 table sha mount nic mic 2.6 完成 又是   問:掛載自己制作的文件系統卡在這裏:    NET: Registered protocol family 1    NET: Registered protocol family 17   

RecyclerView常見問題解決方案RecyclerView嵌套自動滾動RecyclerView 高度設置wrap_content 無作用問題

design card ont mpi 焦點 goods rap rfi 高度 1,ScrollView或者RecyclerView1 嵌套RecyclerView2 進入頁面自動跳轉到recyclerView2上面頁面會自動滾動 貌似是RecyclerVie