成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

在 MongoDB 上模擬事務(wù)操作來(lái)實(shí)現(xiàn)支付

crossoverJie / 1491人閱讀

摘要:因?yàn)樵谥Ц哆^(guò)程中不能保證每一次操作都成功,所以還要引入一個(gè)日志表來(lái)做數(shù)據(jù)的一致性,保證用戶資金變動(dòng)與實(shí)際相符。雖然在數(shù)據(jù)設(shè)計(jì)中遇到一些復(fù)雜結(jié)構(gòu)的問(wèn)題,比如和的問(wèn)題。

[ 玩轉(zhuǎn) LeanCloud ] 開(kāi)發(fā)者經(jīng)驗(yàn)分享:

作者:Davy

我們的產(chǎn)品叫「學(xué)海密探」,屬于在線教育行業(yè),產(chǎn)品需要有支付功能,然而支付最蛋疼是什么?有人會(huì)說(shuō)是支付寶和微信等支付接口的接入開(kāi)發(fā)!沒(méi)錯(cuò),但支付接口的開(kāi)發(fā)算是比較簡(jiǎn)單的了,我覺(jué)得凡是跟錢有關(guān)系的操作最重要的是事務(wù)問(wèn)題,這一點(diǎn)很重要,很重要,真的很重要!LeanCloud 官方文檔中有提到 MongoDB 不支持事務(wù),并建議對(duì)事務(wù)有強(qiáng)烈需求的開(kāi)發(fā)者使用其他折中方式來(lái)實(shí)現(xiàn)。我們的支付必須用事務(wù),我們經(jīng)過(guò) N 輪討后論設(shè)計(jì)了一套基于 LeanCloud 的支付場(chǎng)景的通用解決方案,也許其他團(tuán)隊(duì)比我們做得好,在這里還是分享下我們的一些見(jiàn)解吧。

我們?cè)谟脩舯?_User 中加入了一個(gè) paylogs 字段,類型是 Array,主要用于存放著每一次支付日志的 id,用它來(lái)判斷用戶的賬戶 account 的值,比如錢扣沒(méi)扣,加沒(méi)加等情況。因?yàn)樵谥Ц哆^(guò)程中不能保證每一次操作都成功,所以還要引入一個(gè)日志表 log 來(lái)做數(shù)據(jù)的一致性,保證用戶資金變動(dòng)與實(shí)際相符。log 表里有一個(gè)「狀態(tài)」字段 state,它的取值為 0 ~ 5,主要是從發(fā)起支付開(kāi)始,生成 order 表,生成 log 表等,并記錄 log 的狀態(tài),后續(xù)所有的業(yè)務(wù)都要根據(jù) state 的狀態(tài)執(zhí)行不同的業(yè)務(wù)操作,不管在哪個(gè)狀態(tài)出問(wèn)題都可以根據(jù) log表的 state 狀態(tài)重復(fù)執(zhí)行相應(yīng)的業(yè)務(wù)操作,從而保證支付過(guò)程的數(shù)據(jù)一致性!

比如在充值的時(shí)候,用戶扣費(fèi)成功后,修改用戶的 account 值成功了,但在修改 state 字段時(shí)失敗了,下一次再執(zhí)行時(shí)又怎么判斷用戶的 account 值已經(jīng)改變了呢?這個(gè)問(wèn)題真是太重要了,這就要用到那個(gè) paylogs 字段,判斷 paylogs 字段是否有值,有值說(shuō)明剛才用戶的 account 值已經(jīng)操作過(guò)了,此時(shí)可以不用操作,如果沒(méi)有再進(jìn)行操作。這里利用了 LeanCloud 數(shù)據(jù)存儲(chǔ)接口的按條件更新數(shù)據(jù)的功能(使用 query 參數(shù))來(lái)保證操作的原子性,從而也解決了并發(fā)問(wèn)題!這個(gè) query 參數(shù)真得要夸一下,在 LeanCloud 還沒(méi)提供這個(gè)功能之前,我們只能采用 log 表中的新舊值比對(duì)來(lái)解決數(shù)據(jù)一致問(wèn)題,但無(wú)法避免并發(fā)問(wèn)題,這樣當(dāng)用戶數(shù)據(jù)錯(cuò)了,我們只能認(rèn)為支付失敗,然后進(jìn)入人工干預(yù)環(huán)節(jié),很是麻煩。

最后再說(shuō)說(shuō)我們和 LeanCloud 的相遇。最初是通過(guò)朋友圈知道了 LeanCloud,后來(lái)就一直關(guān)注著。也試過(guò)一些項(xiàng)目,發(fā)現(xiàn)開(kāi)發(fā)應(yīng)用真是方便許多。原本大量的后端需求都要自己研發(fā),現(xiàn)在都省了,只需要專注于寫(xiě)應(yīng)用端的代碼,效率自然會(huì)提高一倍以上,開(kāi)發(fā)迭代速度也上去了。當(dāng)然也有過(guò)顧慮,生怕遇到一些特殊場(chǎng)景 LeanCloud 滿足不了那我們就悲劇了!但后來(lái)看到一些知名的應(yīng)用都在用 LeanCloud,心里也就安穩(wěn)了,有前輩們踩過(guò)坑,有 LeanCloud 的技術(shù)支持做后盾,我們就這樣選定了 LeanCloud。

隨著項(xiàng)目的進(jìn)行,我們從傳統(tǒng)的后端服務(wù)接口開(kāi)發(fā)變成了面向「Document」開(kāi)發(fā),服務(wù)端工作減輕了不少。雖然在數(shù)據(jù)設(shè)計(jì)中遇到一些復(fù)雜結(jié)構(gòu)的問(wèn)題,比如 Pointer 和 Relations 的問(wèn)題。記得當(dāng)時(shí) Array 不支持 Pointer 的 include,所以考慮用 Relations,但在 LeanCloud 社區(qū)中又看到幾個(gè)相關(guān)問(wèn)題都推薦使用 Array 或者 Pointer,后來(lái)通讀了相關(guān)文檔對(duì)數(shù)據(jù)模型有了更深的理解,問(wèn)題也就少了,所以說(shuō)全面了解文檔是至關(guān)重要的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/19168.html

相關(guān)文章

  • database

    摘要:它是第一個(gè)把數(shù)據(jù)分布在全球范圍內(nèi)的系統(tǒng),并且支持外部一致性的分布式事務(wù)。目的是使得開(kāi)發(fā)者閱讀之后,能對(duì)項(xiàng)目有一個(gè)初步了解,更好的參與進(jìn)入的開(kāi)發(fā)中。深度探索數(shù)據(jù)庫(kù)并發(fā)控制技術(shù)并發(fā)控制技術(shù)是數(shù)據(jù)庫(kù)事務(wù)處理的核心技術(shù)。 存儲(chǔ)過(guò)程高級(jí)篇 講解了一些存儲(chǔ)過(guò)程的高級(jí)特性,包括 cursor、schema、控制語(yǔ)句、事務(wù)等。 數(shù)據(jù)庫(kù)索引與事務(wù)管理 本篇文章為對(duì)數(shù)據(jù)庫(kù)知識(shí)的查缺補(bǔ)漏,從索引,事務(wù)管理,...

    csRyan 評(píng)論0 收藏0
  • java高并發(fā)系列 - 第21天:java中的CAS操作,java并發(fā)的基石

    摘要:方法由兩個(gè)參數(shù),表示期望的值,表示要給設(shè)置的新值。操作包含三個(gè)操作數(shù)內(nèi)存位置預(yù)期原值和新值。如果處的值尚未同時(shí)更改,則操作成功。中就使用了這樣的操作。上面操作還有一點(diǎn)是將事務(wù)范圍縮小了,也提升了系統(tǒng)并發(fā)處理的性能。 這是java高并發(fā)系列第21篇文章。 本文主要內(nèi)容 從網(wǎng)站計(jì)數(shù)器實(shí)現(xiàn)中一步步引出CAS操作 介紹java中的CAS及CAS可能存在的問(wèn)題 悲觀鎖和樂(lè)觀鎖的一些介紹及數(shù)據(jù)庫(kù)...

    zorro 評(píng)論0 收藏0
  • 聊聊分布式事務(wù)

    摘要:分布式事務(wù)技術(shù)理論定理。接下來(lái)我們看看分布式事務(wù)有哪幾種實(shí)現(xiàn)方案?;趨f(xié)調(diào)者與參與者的思想設(shè)定,分別提出了與實(shí)現(xiàn)分布式事務(wù)。 這次使用分布式事務(wù)框架過(guò)程中了學(xué)習(xí)了一些分布式事務(wù)知識(shí),所以本文我們就來(lái)聊聊分布式事務(wù)那些事。首先我們先回顧下什么是事務(wù)。 事務(wù) 什么是事務(wù)?這個(gè)作為后端開(kāi)發(fā),日常開(kāi)發(fā)中只要與數(shù)據(jù)庫(kù)有交互,肯定就會(huì)使用過(guò)事務(wù)?,F(xiàn)在摘抄一段wiki的解釋,解釋下什么是事務(wù)。 是數(shù)...

    wemallshop 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<