BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #87633同步于 2015/6/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

实现一个银行系统,求助

silvermoon
2015/6/19镜像同步17 回复
撇开基本的存储功能,在实现merge这么一个function的时候遇到了问题,借问大神们有什么好的解决方法。 背景:每一个account会有自己的存款数(deposit)以及交易记录(transaction record)。 transaction record有两种:1、from [id] [money](从谁那里收到多少钱); 2、to [id] [money] (给谁转账多少钱) 实现function:merge [id1] [pw1] [id2] [pw2] 把id2 merge 到 id1里面,也就是把id2的deposit都给id1。 另外,id2的record也要写到id1里面,同时整个系统其他user里面假如有与id2做交易的记录也都要变成是与id1做的交易。 例如id3有记录: from id2 1000 要变成 from id1 1000。(因为id2被merge进去id1,不再存在) 最后把id2这个账户删掉。 想到最蠢的办法是遍历所有users,然后一个个改..问题是有上万个user的时候,巨慢无比...
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
nuanyangyang机器人#1 · 2015/6/19
起码要说数据的存储方式,以及有哪些一致性需求吧。
silvermoon机器人#2 · 2015/6/19
这个没有要求,唯一要求就是足够快地处理完所有命令.. 所以我用了一个unordered map存储pair<id, info>,struct info里放的是double deposit和vector<record> r, struct record放的是id和money以及“from” or “to”。 不过这样子就不方便实现merge的功能,每merge一次我都不得不去遍历整个unordered map,翻找每个account去修改对应的history 【 在 nuanyangyang 的大作中提到: 】 : 起码要说数据的存储方式,以及有哪些一致性需求吧。
silvermoon机器人#3 · 2015/6/19
不知道可以怎么调整一下数据结构来方便merge的实现和处理速度。 【 在 nuanyangyang 的大作中提到: 】 : 起码要说数据的存储方式,以及有哪些一致性需求吧。
rigoroslee机器人#4 · 2015/6/20
假设你的userid是连续的,这种情况更适合使用数组,因为可以直接index 然后可以考虑在userInfo里面加入redirect target,按你的描述这个target 应当是唯一的 在处理之前最好可以预处理merge的mapping关系来解决多层跳转的问题 最后再一次遍历merge根据redirect target来进行更新操作 每个user在保存transaction时也应该根据相关的userid来partition,这样merge起来比较方便,不过不利于按时间查询,看你的权衡了
silvermoon机器人#5 · 2015/6/20
恩恩,谢谢,我也正在想要不要用disjoint set forest。userid不是连续的,是[0-9][a-z][A-Z]的任意组合,这也是比较烦的事情。 【 在 rigoroslee 的大作中提到: 】 : 假设你的userid是连续的,这种情况更适合使用数组,因为可以直接index : 然后可以考虑在userInfo里面加入redirect target,按你的描述这个target 应当是唯一的 : 在处理之前最好可以预处理merge的mapping关系来解决多层跳转的问题 : ...................
changzhu机器人#6 · 2015/6/20
银行系统,你没有使用数据库对数据进行存储? 用数据库的话,merge一个用户不是秒秒钟的事
silvermoon机器人#7 · 2015/6/20
对数据库不熟.. 【 在 changzhu 的大作中提到: 】 : 银行系统,你没有使用数据库对数据进行存储? : 用数据库的话,merge一个用户不是秒秒钟的事
UC1451427216机器人#8 · 2015/6/20
【 在 silvermoon 的大作中提到: 】 : 对数据库不熟.. : 那不正好借机学习下数据库?Mysql或者sqlsever
spicewolf机器人#9 · 2015/6/20
只记录一下 id2 已经 变成了 id1。以后读写的时候,首先看看是不是有id2,如果有,就换成id1。采用的就是延迟的思想。