支付宝用的是什么数据库?

支付宝用的是什么数据库?,第1张

支付宝采用框架spaner。\x0d\x0apaner 全球级的分布式数据库 Google Spanner原理\x0d\x0aGoogle Spanner简介\x0d\x0aSpanner 是Google的全球级的分布式数据库 (Globally-Distributed Database) 。\x0d\x0aSpanner的扩展性达到了令人咋舌的全球级,可以扩展到数百万的机器。\x0d\x0a数已百计的数据中心,上万亿的行。\x0d\x0a除了夸张的扩展性之外,还能 同时通过同步复制和多版本来满足外部一致性。\x0d\x0a可用性也是很好的,冲破CAP的枷锁,在三者之间完美平衡。

你这是要模拟手机支付吧。实际系统中银行的数据库肯定是不能碰的。

既然是模拟就简单多了。“转账”就是把一个账户的钱减掉,加到另一个账户上。因为用户/商家和银行账户是分开的表,需要做表连接查询。

因为不知道你用什么数据库,连接数据库的就不写了。用户,银行和商家3模块在当前情况下就是数据库的3张表:其关键字段如下:

用户表:手机号、卡号(银行账户的卡号)

商家表:商家编号、卡号(银行账户的卡号)

银行帐户:卡号、账户余额

Dim cnn as New ADODB.Connection

Dim rst as New ADODB.Recordset

Dim rsAccount as New ADODB.Recordset

'初始化变量cnn,连接数据库

'查询余额。查询手机号”12345678900"的用户的余额。这里默认一个手机号对应一个账户

rst.Open "select 账户余额 from 银行账户 join 用户表 on 银行账户.卡号=用户表.卡号 where 用户表.手机号='"12345678900'", cnn, adOpenForwardOnly, adLockReadOnly, adCmdText

if rst,Recordcount=0 then

msgbox '该手机对应的卡号不存在!"

else

'显示余额 rst.Fields("账户余额")

end if

rst.close

'支付转账,从用户A(手机12345678900)转500到商家B(编号222)

‘转出

rst.Open "select 银行账户.卡号 from 银行账户 join 用户表 on 银行账户.卡号=用户表.卡号 where 用户表.手机号='12345678900', cnn, adOpenForwardOnly, adLockReadOnly, adCmdText

if rst.Recordcount=0 then

'手机号不存在或者卡号不存在

else'修改余额

rsAccount.Open "select 账户余额 from 银行账户 where 卡号='" &rst.Fields("卡号") &"'",cnn, adOpenKeyset, adLockOptimistic, adCmdText

rsAccount.Fields("账户余额")=rsAccount.Fields("账户余额")-500

rsAccount.Update

rsAccount.close

end if

’转入。同样默认一个商家编号对应一个银行账户。

rst.Open "select 银行账户.卡号 from 银行账户 join 商家表 on 银行账户.卡号=商家表.卡号 where 商家表.编号='222', cnn, adOpenForwardOnly, adLockReadOnly, adCmdText

if rst.Recordcount=0 then

'账户不存在或者编号不存在

else'修改余额

rsAccount.Open "select 账户余额 from 银行账户 where 卡号='" &rst.Fields("卡号") &"'",cnn, adOpenKeyset, adLockOptimistic, adCmdText

rsAccount.Fields("账户余额")=rsAccount.Fields("账户余额")+500

rsAccount.Update

rsAccount.close

end if

以上代码未优化,就是个大概方法,一些细节需要自己完善,比如余额不足时的处理,比如用户已经转出,在转入商家时出错时的处理。

通常在实际转账系统中需要保证转出和转入全部完成,其中有一个出错就取消整个 *** 作。用 cnn的下列方法发起一个数据库事务(当然看你老师的要求,要求不高的可以忽视):

cnn.BeginTrans 开始事务。在对余额修改前调用。

cnn.CommitTrans 提交事务。在对余额修改完成后调用(注意是转出、转入都完成时)。

cnn.RollbackTrans 撤销事务。通常在错误处理程序里用,取消之前对记录所做的修改。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10010236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存