[请益] 交易方面的知识(DB)

楼主: MOONY135 (谈无欲)   2019-05-30 19:01:50
最近要开始搞 DB了
不过对于交易这块不知道要怎样去写CODE
EX 进入帐
钱汇进来 可能有两处的DB的不同TABLE要更新资讯
(两个要一起成功 只要一个失败就是得ROLLBACK)
但有张TABLE可能会经常被其他支程式LOCK住(需要频繁的UPDATE)
不知道关于这方面大家都是怎样学的
是书上建议怎样做就照着做了吗?
还是看前人的CODE这样用就用了
作者: alan3100 (BOSS)   2019-05-30 19:17:00
钱进来要逻辑不给进吗? rollback后退钱?transaction-like:saga , w/r分离:cqrs
作者: worcdlo (worcdlo)   2019-05-30 19:44:00
写db慢不意外吧,改用c写,自己用socket去对接送资料给你的server,进来的资料肯定有文件跟你说body怎么拆,想办法串封包之后再解析出这些body,另外资料存在memory,自定义一些资料结构去接你要的data,一般电脑的处理速度绝对来的及在交易所送下笔封包给你时把他处理完
作者: x000032001 (版废了该走了)   2019-05-30 19:56:00
2PC 3PC
作者: worcdlo (worcdlo)   2019-05-30 20:01:00
fwrite啊…,证交所+期交所日盘,整天的封包量也不过3gb多,大致分给尖峰时段4小时,其实资料量相比电脑运算速度少的可怜,更何况当中还有很多format是重复发送,也有不少根本是heartbeat不用存还是你很执著要写在db? 指MySQL吗?db不是很熟,你lock住是直接离开吗?还是会卡在那个点?有没有类似waitevent之类的东西,就交给os帮你等待
作者: alan3100 (BOSS)   2019-05-30 20:24:00
假设只是要ack就单向写入cmd进多少钱, 并不需要立刻处理
作者: worcdlo (worcdlo)   2019-05-30 20:25:00
一开始没看仔细,以为是指那种交易,然后要trigger多种价格之类的任务
作者: alan3100 (BOSS)   2019-05-30 20:26:00
只有花钱需要确定不会透支,所以并不需要等扣钱的lock
作者: worcdlo (worcdlo)   2019-05-30 20:28:00
如果是你自己的系统,流量不大任务又简单的话,可以考虑在外面挂一个所有人共同的event,所有读写都先检查这个event,就不用担心不同步的问题
作者: ripple0129 (perry tsai)   2019-05-30 20:36:00
自己的系统也不用event了吧,一个exception 两个都rollback
作者: worcdlo (worcdlo)   2019-05-30 20:40:00
他的问题我猜是担心一张写一张没写,帐目上的错误在金融领域是很危险的,所以我才觉得统一用一个event,要嘛整个db都是你的要嘛就是乖乖排队
作者: lwtech   2019-05-30 20:46:00
没有SA,这样子大家会很担心你,PM知道这件事吗
作者: Caninee (i Love u GA~)   2019-05-30 20:48:00
解法很多 但你这样没能做的范围,很难回答
作者: lwtech   2019-05-30 20:54:00
频繁的UPDATE这点不太正常.常用的资料就 dirty read 就好, 整个拿到前端都可以另外,为什么是不同DB ? 做确认顶多另外开个 temp table不同DB 是指一个是MSSQL 另一个是 Redis 这样?
作者: hsnuyi (羊咩咩~)   2019-05-30 21:00:00
会计DB? 借贷要平衡齁
作者: lwtech   2019-05-30 21:02:00
以前的做法是每天对帐一张表,给你参考,虽然我看了也傻眼
作者: snick (无风)   2019-05-30 21:35:00
two phase commit
作者: lwtech   2019-05-30 22:18:00
不同Schema...警察 !!
作者: rexhuang (BlueCancer)   2019-05-31 00:13:00
https://bit.ly/2QzhvHj,先解决Blocking或Deadlock问题也可以写入不同帐务暂存盘,再整批过帐到主档,避免lock感觉你需求只要日终帐正确,悠游卡和ATM系就不能这样处理
楼主: MOONY135 (谈无欲)   2019-05-31 02:01:00
要悠游卡那种的 不能整天过完在算
作者: flowwinds (..)   2019-05-31 03:00:00
2 phase commit
作者: ripple0129 (perry tsai)   2019-05-31 03:55:00
需求不清楚下,直接给你关键字distributed transaction去翻文章看比较快
作者: alihue (wanda wanda)   2019-05-31 09:05:00
拿第三个 db 纪录那两个 table trans 有没有各自完成,第三个 db 有收到那两个 trans 都完成,就完成本次交易。当然上述流程是在 ap 端做,只是借用 db trans 的成熟度来当log 确保交易进度
楼主: MOONY135 (谈无欲)   2019-05-31 09:14:00
感谢各位大大的回复
作者: jej (晃奶大馬桶)   2019-06-01 17:38:00
另开一个table纪录本次交易 再弄一个批次去更新别的数据库?
作者: dsakryk   2019-06-01 23:02:00
可以看看阿里开源的https://github.com/seata/seata

Links booklink

Contact Us: admin [ a t ] ucptt.com