大數據並發生成唯一訂單號


公司現在有個需求要生成唯一的訂單號,自己也把自己的思路總結一下,發出來給大家分享,一起討論。

一開始的思路:

1、時間戳+隨機數

2、數據庫建個數字表,每次生成遞增+1

---------------------------------------------------------------------

上面方法經過多線程同時操作測試,會生成重復的訂單號,那怎么辦呢?想到幾個可能的辦法:

1、數據庫加鎖

2、單例

3、寫個wcf,專門生成id

--------------------------------------------------------------------

逐個分析:

1、數據庫加鎖,就是寫存儲過程中進行加鎖,一次只能生成一個,其他的要訪問數據庫只能等待。

begin tran
set xact_abort on 
update baseNumber set basenumber=basenumber+@randomNumber;
select baseNumber from basenumber;
commit tran

這里說下,當執行update時,就會把表鎖住,其他進程訪問就會等待,一直到commit時才會釋放鎖,所以select basenumber一定是當前進程更新后number。

在300個線程,每個線程進行1000次操作,測試下,沒有出現重復結果。

2、單例

 我們web系統,要做服務器集群,一套應用程序,會跑在不同的服務器上,單例是行不通的。

3、寫wcf,就是專門開一個web服務,專門用來生成訂單號,這樣做沒有驗證,理論是可以的,也是要考慮加鎖處理。

-------------------------------------------------------------------------------------

以上也都是自己摸索的,有什么不對的,還請博友們,提出指正,謝謝了,有什么問題的,也可以直接回復。

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM