[請益] 交易方面的知識(DB)

看板Soft_Job作者 (脫俗仙子談無慾)時間5年前 (2019/05/30 19:01), 5年前編輯推噓9(9042)
留言51則, 14人參與, 5年前最新討論串1/2 (看更多)
最近要開始搞 DB了 不過對於交易這塊不知道要怎樣去寫CODE EX 進入帳 錢匯進來 可能有兩處的DB的不同TABLE要更新資訊 (兩個要一起成功 只要一個失敗就是得ROLLBACK) 但有張TABLE可能會經常被其他支程式LOCK住(需要頻繁的UPDATE) 不知道關於這方面大家都是怎樣學的 是書上建議怎樣做就照著做了嗎? 還是看前人的CODE這樣用就用了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.194.180.20 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1559214112.A.D66.html

05/30 19:17, 5年前 , 1F
錢進來要邏輯不給進嗎? rollback後退錢?
05/30 19:17, 1F

05/30 19:21, 5年前 , 2F
transaction-like:saga , w/r分離:cqrs
05/30 19:21, 2F
銀行方通知到帳後 需要把錢加上去 然後再回傳給銀行SUCCESS 的這種需求

05/30 19:44, 5年前 , 3F
寫db慢不意外吧,改用c寫,自己用socket去對接送資料給
05/30 19:44, 3F

05/30 19:44, 5年前 , 4F
你的server,進來的資料肯定有文件跟你說body怎麼拆,想
05/30 19:44, 4F

05/30 19:44, 5年前 , 5F
辦法串封包之後再解析出這些body,另外資料存在memory,
05/30 19:44, 5F

05/30 19:44, 5年前 , 6F
自定義一些資料結構去接你要的data,一般電腦的處理速度
05/30 19:44, 6F

05/30 19:44, 5年前 , 7F
絕對來的及在交易所送下筆封包給你時把他處理完
05/30 19:44, 7F
資料要留存的 ※ 編輯: MOONY135 (123.194.180.20), 05/30/2019 19:53:10

05/30 19:56, 5年前 , 8F
2PC 3PC
05/30 19:56, 8F

05/30 20:01, 5年前 , 9F
fwrite啊…,證交所+期交所日盤,整天的封包量也不過3gb
05/30 20:01, 9F

05/30 20:01, 5年前 , 10F
多,大致分給尖峰時段4小時,其實資料量相比電腦運算速
05/30 20:01, 10F

05/30 20:01, 5年前 , 11F
度少的可憐,更何況當中還有很多format是重複發送,也有
05/30 20:01, 11F

05/30 20:01, 5年前 , 12F
不少根本是heartbeat不用存
05/30 20:01, 12F

05/30 20:07, 5年前 , 13F
還是你很執著要寫在db? 指MySQL嗎?
05/30 20:07, 13F
就會用到DB MSSQL ※ 編輯: MOONY135 (123.194.180.20), 05/30/2019 20:15:19

05/30 20:20, 5年前 , 14F
db不是很熟,你lock住是直接離開嗎?還是會卡在那個點?
05/30 20:20, 14F

05/30 20:22, 5年前 , 15F
有沒有類似waitevent之類的東西,就交給os幫你等待
05/30 20:22, 15F
應該說會設計成有人在使用 那張TABLE就會被鎖住(要確保資料的完整性) 但我不知道怎樣去測試有沒有UPDATE成功 或者是UPDATE成功 卻只有一邊成功這樣 ※ 編輯: MOONY135 (123.194.180.20), 05/30/2019 20:25:05

05/30 20:24, 5年前 , 16F
假設只是要ack就單向寫入cmd進多少錢, 並不需要立刻處理
05/30 20:24, 16F

05/30 20:25, 5年前 , 17F
一開始沒看仔細,以為是指那種交易,然後要trigger多種
05/30 20:25, 17F

05/30 20:25, 5年前 , 18F
價格之類的任務
05/30 20:25, 18F

05/30 20:26, 5年前 , 19F
只有花錢需要確定不會透支,所以並不需要等扣錢的lock
05/30 20:26, 19F

05/30 20:28, 5年前 , 20F
如果是你自己的系統,流量不大任務又簡單的話,可以考慮
05/30 20:28, 20F

05/30 20:28, 5年前 , 21F
在外面掛一個所有人共同的event,所有讀寫都先檢查這個e
05/30 20:28, 21F

05/30 20:28, 5年前 , 22F
vent,就不用擔心不同步的問題
05/30 20:28, 22F

05/30 20:36, 5年前 , 23F
自己的系統也不用event了吧,一個exception 兩個都rol
05/30 20:36, 23F

05/30 20:36, 5年前 , 24F
lback
05/30 20:36, 24F

05/30 20:40, 5年前 , 25F
他的問題我猜是擔心一張寫一張沒寫,帳目上的錯誤在金融
05/30 20:40, 25F

05/30 20:40, 5年前 , 26F
領域是很危險的,所以我才覺得統一用一個event,要嘛整
05/30 20:40, 26F

05/30 20:40, 5年前 , 27F
個db都是你的要嘛就是乖乖排隊
05/30 20:40, 27F
你說的需求沒錯! 不過是兩個DB的兩個TABLE ※ 編輯: MOONY135 (123.194.180.20), 05/30/2019 20:42:50

05/30 20:46, 5年前 , 28F
沒有SA,這樣子大家會很擔心你,PM知道這件事嗎
05/30 20:46, 28F
這只是我自己在練習的部分而已 不是公司用的 如果公司可以讓我這樣亂來 也是心蠻大的

05/30 20:48, 5年前 , 29F
解法很多 但你這樣沒能做的範圍,很難回答
05/30 20:48, 29F

05/30 20:54, 5年前 , 30F
頻繁的UPDATE這點不太正常.
05/30 20:54, 30F

05/30 20:56, 5年前 , 31F
常用的資料就 dirty read 就好, 整個拿到前端都可以
05/30 20:56, 31F

05/30 20:59, 5年前 , 32F
另外,為什麼是不同DB ? 做確認頂多另外開個 temp table
05/30 20:59, 32F

05/30 21:00, 5年前 , 33F
不同DB 是指一個是MSSQL 另一個是 Redis 這樣?
05/30 21:00, 33F
兩個都是MSSQL 那我應該指的是同一個DB不同資料庫(?)

05/30 21:00, 5年前 , 34F
會計DB? 借貸要平衡齁
05/30 21:00, 34F

05/30 21:02, 5年前 , 35F
以前的做法是每天對帳一張表,給你參考,雖然我看了也傻眼
05/30 21:02, 35F
XDDDDDDDDDDD

05/30 21:35, 5年前 , 36F
two phase commit
05/30 21:35, 36F
※ 編輯: MOONY135 (123.194.180.20), 05/30/2019 22:16:38

05/30 22:18, 5年前 , 37F
不同Schema...警察 !!
05/30 22:18, 37F

05/31 00:13, 5年前 , 38F
https://bit.ly/2QzhvHj,先解決Blocking或Deadlock問題
05/31 00:13, 38F

05/31 00:21, 5年前 , 39F
也可以寫入不同帳務暫存檔,再整批過帳到主檔,避免lock
05/31 00:21, 39F

05/31 00:22, 5年前 , 40F
感覺你需求只要日終帳正確,悠遊卡和ATM系就不能這樣處理
05/31 00:22, 40F

05/31 02:01, 5年前 , 41F
要悠遊卡那種的 不能整天過完在算
05/31 02:01, 41F

05/31 03:00, 5年前 , 42F
2 phase commit
05/31 03:00, 42F

05/31 03:55, 5年前 , 43F
需求不清楚下,直接給你關鍵字distributed transactio
05/31 03:55, 43F

05/31 03:55, 5年前 , 44F
n去翻文章看比較快
05/31 03:55, 44F

05/31 09:05, 5年前 , 45F
拿第三個 db 紀錄那兩個 table trans 有沒有各自完成,第
05/31 09:05, 45F

05/31 09:05, 5年前 , 46F
三個 db 有收到那兩個 trans 都完成,就完成本次交易。當
05/31 09:05, 46F

05/31 09:05, 5年前 , 47F
然上述流程是在 ap 端做,只是借用 db trans 的成熟度來當
05/31 09:05, 47F

05/31 09:05, 5年前 , 48F
log 確保交易進度
05/31 09:05, 48F

05/31 09:14, 5年前 , 49F
感謝各位大大的回覆
05/31 09:14, 49F

06/01 17:38, 5年前 , 50F
另開一個table紀錄本次交易 再弄一個批次去更新別的資料庫?
06/01 17:38, 50F

06/01 23:02, 5年前 , 51F
可以看看阿里開源的https://github.com/seata/seata
06/01 23:02, 51F
文章代碼(AID): #1SxxWWrc (Soft_Job)
文章代碼(AID): #1SxxWWrc (Soft_Job)