1. 程式人生 > >支付系統對賬演算法優化方案

支付系統對賬演算法優化方案

一、目前對賬的演算法:

1、從上游渠道(銀行、銀聯等金融機構)獲取對賬檔案,程式逐行解析入庫

2、在儲存過程中,以上游對賬檔案的表為基準,程式逐行讀取並與我們系統的交易記錄/賬務記錄(有賬務系統情況下,合理方案應該是於賬務記錄)對比,查找出差異記錄。

3、以我們系統的交易記錄/賬務記錄為基準,程式逐行讀取與上游對賬檔案對比,查找出差異記錄

二、目前對賬演算法問題:

1、使用儲存過程,對賬過程都在資料庫端完成,對資料庫效能影響較大,而且對賬邏輯擴充套件極為麻煩

2、逐行比對演算法效率較低,但演算法上並無好的優化餘地。如果採用資料庫INTERSECT、MINUS對資料庫壓力也高。

3、在業務量大的情況下(例如有上百家上游渠道需要對,每一家都有幾十萬條交易記錄),對賬伺服器及資料庫伺服器負荷較高。即便採用讀寫分離,對賬時候使用讀庫,壓力一樣很大。

4、匯入批量檔案,逐行入庫效率較為低下(每一次都需要建立網路連線、關閉連線)

三、對賬演算法優化思路:

1、涉及網路傳輸的,儘量採用批量方式操作,減少網路消耗及時間消耗

2、使用Redis等NOSQL資料庫,降低資料庫伺服器的壓力。同時在擴充套件上也容易,一臺Redis伺服器不夠,可以無限制增加用於對賬用的伺服器。

3、使用Redis的set集合的sdiff功能,利用Redis sdiff演算法的高效能,比對上游記錄和我方記錄的差異

四、對賬演算法說明:

1、利用Oracle/Mysql的load data infile將對賬檔案批量匯入到資料庫

2、程式讀取上游賬務記錄表,對上游賬戶記錄執行select  concat(channel_id, “:” , order_id , “:” , HASH_MD5(channel_id , order_id , amount , status , timestamp1 , timestamp2 ,…) )  as hashid from table ,得到對應的SET集合。

這裡思路是將需要對賬的記錄拼成格式為:channel_id:order_id:hashid形式的串,以便作為Redis SET集合的item。

其中channel_id和order_id用於標識對應的渠道及訂單,只是例子,根據實際需要補充。之所以要在hashid前面帶上channel_id和order_id,主要目的是在sdiff後,能夠作為主鍵,根據set結合的item查找出對應的資料庫記錄。

3、對我方的交易記錄表/賬戶歷史表採用上一步的類似演算法,得到對應的SET結合

4、採用Redis的pipeline功能(Redis的各種客戶端,包括java客戶端jedis 都提供此功能),將上游賬務記錄SET集合和我方的交易記錄/賬務歷史記錄SET集分別批量執行sadd插入Redis,得到兩個SET集合。

由於單條記錄sadd 插入Redis效率較差(每一次都涉及網路open、close、傳輸消耗),因此使用Redis的pipeline功能,已實現批量入庫功能。

5、利用redis的sdiff功能查找出上游賬務集合與我方記錄集合的差值

6、從sdiff 集合中channel_id:order_id:hash,定位對應的資料庫記錄,更新對賬狀態。

具體效能及實現可以在實現後測試對比一下,應該會有大幅的效能提升。

相關推薦

支付系統演算法優化方案

一、目前對賬的演算法: 1、從上游渠道(銀行、銀聯等金融機構)獲取對賬檔案,程式逐行解析入庫 2、在儲存過程中,以上游對賬檔案的表為基準,程式逐行讀取並與我們系統的交易記錄/賬務記錄(有賬務系統情況下,合理方案應該是於賬務記錄)對比,查找出差異記錄。 3、以我們系統

支付業務的流程

先清理幾個概念: 1.對賬: 對賬系統根據使用者設定的對賬條件進行逐筆檢查,對達到對賬標準的記錄進行勾對,未勾對的即為未達賬項。 2.對賬條件: 一般包括業務發生的日期、結算式、結算票號、發生金額相同等。其中,發生金額相同是賬的基本條件; 對於其他條件,使用者可以根據需要自定義選擇。 3.T+1

java後臺實現支付功能

完成支付寶支付、查詢的介面之後,我們應該還需要定時與支付寶進行對賬,以確保商戶系統的訂單資訊是正確的,想知道支付寶支付、查詢介面實現過程的親們,可移步到上一篇有詳細過程。現在我們來講一下支付寶對賬的功能,關於與支付寶互動的關鍵程式碼,其實支付寶的API已經講得很清楚,如果親們

大型的支付系統,如支付寶、財付通,後系統是如何、風控的呢

1.對賬週期:A公司對玩家開放了包括支付寶、財付通在內的十餘種電子支付渠道,大部分都是按月對賬的,即當月1-10號(視渠道有差異)進行對賬,然後11號開始打款/轉賬。部分渠道可能是本月對上上個月的賬,即3月對1月的賬,如簡訊渠道(還分本地和外地)。還有的可能是周結算,如中騰神州行。2.各渠道成交額:

支付寶等大型支付系統後臺系統是如何和風控的

作者:天順 連結:http://www.zhihu.com/question/20091391/answer/15591658 來源:知乎 著作權歸作者所有,轉載請聯絡作者獲得授權。 先扯淡一下對賬,這坑有點大,容我慢慢填。剛剛打了半小時的草稿由於沒儲存,宕機後被系統吃掉了……知乎貌似原來有自動儲存

從 0 開始學支付系統搭建——解析「核算核心」

清算對賬系統 支付公司提供的所有金融服務是建立在銀行資金體系之上的,支付公司賬務系統內賬戶的資金都與其在銀行的存款資金一一對應,為了保證真實的資金賬戶和虛擬賬戶的資金轉換正確,支付公司必須及時與銀行進行各類業務的資金核對,所有資金核對都依賴於銀行的系統。 資金流入與銀行的

支付系統怎麼設計?

https://mp.weixin.qq.com/s/I13R8xydwD-9BS0_fgkOCg 支付對賬系統是整個支付清結算體系中具體基礎性意義的一個環節,是確保支付平臺與各類第三方支付渠道資料一致性的關鍵系統,是商戶資金結算、資金劃撥、資金報表等邏輯準確執行的重要前提。 &n

大型支付系統後臺系統的控制和管理

1.對賬週期:A公司對玩家開放了包括支付寶、財付通在內的十餘種電子支付渠道,大部分都是按月對賬的,即當月1-10號(視渠道有差異)進行對賬,然後11號開始打款/轉賬。部分渠道可能是本月對上上個月的賬,即3月對1月的賬,如簡訊渠道(還分本地和外地)。還有的可能是周結算,如中騰

支付系統處理:,軋,平,交易記錄,退款記錄

關鍵詞:對賬,軋賬,平賬,交易記錄,退款記錄對賬是支付系統最頭疼的事情。每一筆交易,都要做到各參與者的記錄能夠吻合,沒有偏差。 對賬系統的工作,是發現有差異的記錄,即軋帳;然後通過人工或者自動的方式,解決這些差異,即平帳;對電商系統來說,每一筆交易,在所有相關主體側都要能對得

面向象-構造函數-優化-方案1

對象 style ont code new blog var cnblogs spa 1 //優化前 2 function Person (name,age){ 3 this.name=name; 4 this.age=

系統產品設計(一)

例如 產品經理 表模塊 放心 比較 div 第一篇 訂單 系列 我是做技術的,為什麽會要寫產品設計呢?就像一句俗話“久病成醫”,當你負責一個系統足夠久了,可能你就懂的比較多了。我想把自己遇見的聽見的做一個系列,算是對自己過去工作的總結。 本文的基調是,少專業術語,全用大白話

如何做一個系統

讀寫分離 偏差 管理系統 images 重復 聯網 sset 數據庫服務器 接收 在互聯網行業中只要涉及到支付,必然就會有對賬的需求,幾乎所有互聯網公司的業務中多多少少的都會涉及到支付,大一點的公司甚至都標配有了自己的第三方支付公司,因此對賬具有普遍性。對賬系統是支付體系中

支付平臺--清結算流程詳解及詳解

                                         

金融類的系統

在網際網路行業中只要涉及到支付,必然就會有對賬的需求,幾乎所有網際網路公司的業務中多多少少的都會涉及到支付,大一點的公司甚至都標配有了自己的第三方支付公司,因此對賬具有普遍性。對賬系統是支付體系中最重要的一環,也是保證交易、資金安全的最後一道防線。在大多數的網際網路公司中,一

如何利用ERP系統的資料探勘功能企業進行優化

目前為止,ERP系統對企業未來的戰略策劃僅限於各個模組中,譬如人員管理、財務收支、生產情況等等;對於利用半結構化、結構化以及需要整合資料制定戰略決策的企業來講,絕大多數使用的EPR處理效率仍然非常低。最大限度地開發利用ERP系統提供出的豐富資料資源,充分發揮出資料資源對企業戰略策劃的作

一號店簽名爆破&應用啟動速度優化方案X2C&修改系統類載入器&另類啟動元件方式

一、前言 今天的套路和之前不同,因為最近看到了一些零散的知識,我不想一些簡單的知識單獨寫一篇文章,因為我想要的是每篇文章都能讓你們看很長時間,這樣我一週發一篇才算合理,所以本文就把四個零碎的不太熟知的知識點介紹一下吧: 第一、如何將一號店應用簽名爆破 第二、應用啟動速度

系統技術架構

      很多時候會碰到新業務上線之後,發現由於程式bug導致一些髒資料,但是這些髒資料並不會立即告訴你我這邊出問題了,你趕緊修復或者回滾。往往是等若干小時之後,陸續有使用者反饋,資料或應用出現問題了,然後通知客滿,客滿再反饋給開發同學。       在做對賬的時候要

css選擇器與JQ選擇器的效能比優化方案

css和JQ的選擇器寫起來似乎很相似,但他們的寫法在效能上有一定的區別。以下就較為常用的選擇器進行比對和優化:CSS選擇器效率高到低:1.id選擇器(#id)2.類選擇器(.class)3.標籤選擇器(div,h1,p)4.後代選擇器(li a)優化方案: 1.優先考慮用class選擇器,雖然id選擇器效率最

詳解第三方支付之關於會計

會計學有一個很重要和很出名的公式,相信很多人都見過: 資產 = 負債 + 所有者權益 + 收入 – 費用 但會計學上還有另外一個比較隱蔽的公式,雖然不像上面的公式那麼出名,但也經常能見到它(或者變種運用)的身影。 那就是,即期末值=期初值+期間變化值,也就是

區塊鏈支付系統開發,點支付系統開發

支付行業發展最快的領域是移動支付,但是現在最吸引大家眼球的當屬區塊鏈。現下,區塊鏈成為金融科技領域的大熱門,區塊鏈技術在各個行業領域有著廣泛的應用。那麼,“區塊鏈與支付”這個組合能不能友好的合作,是否能達到人們的預期,還要進一步驗證。跨境支付主要有銀行電匯、第三方支付和提現三種主要方式,但是均存在手續費高、流