首页 新闻 会员 周边 捐助

如何保证数据一致性?

0
悬赏园豆:5 [已解决问题] 解决于 2015-04-08 15:31

如果几个网站操作同一个数据库的数据,在不用存储过程的情况下,用什么办法保证数据一致性比较好?

泰德的主页 泰德 | 初学一级 | 园豆:6
提问于:2015-04-08 09:17
< >
分享
最佳答案
0

1、分布式事务;

2、幂等操作;

收获园豆:5
Launcher | 高人七级 |园豆:45050 | 2015-04-08 09:26

我这个只是一个小项目,用不上这些技术

泰德 | 园豆:6 (初学一级) | 2015-04-08 09:41

@泰德: 你谈到小项目用不上这些技术,那么说明你对保证数据一致性的技术了解的比较透彻了,请问,除此之外,你还有什么别的方案吗?

Launcher | 园豆:45050 (高人七级) | 2015-04-08 10:19

@泰德: 我给你解释下如何使用“幂等操作”解决“A站在充值,同时B站在消费,就可能不一致了”的问题。其实很简单,就是使用 SQL 语句更新“余额”字段的值时,使用 RowVersion 字段的值作为 WHERE 条件,更新失败时提示用户“余额不足”。当然,通常的做法是再增加一个“冻结”字段,消费时先“冻结”,成功后再更新“余额”。

Launcher | 园豆:45050 (高人七级) | 2015-04-08 14:00

@Launcher: 谢谢

泰德 | 园豆:6 (初学一级) | 2015-04-08 15:16

@Launcher: 追问一下:我用的EF,没有直接用SQL语句更新,是不是也可以用您说的方法?

泰德 | 园豆:6 (初学一级) | 2015-04-08 15:17

@泰德: 用 EF 也可以,写起来更简单,比如给 Model 类添加 byte[] RowVersion 属性,然后设置该字段为 Property(w => w.RowVersion).IsRowVersion(),更新的时候 EF 会自动做判断。

Launcher | 园豆:45050 (高人七级) | 2015-04-08 15:29

@Launcher: 再次感谢

泰德 | 园豆:6 (初学一级) | 2015-04-08 15:30
其他回答(2)
0

你一个小项目,数据还能怎么不一致呢?反正不一致也没人看到,管他呢。

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-04-08 10:34
0

你都是闲得没工作可做了,才会考虑这些奇怪的问题的吧,几个网站,用同一个数据库,怎么不一致????同一个数据库,同一个数据库怎么会不一致?

需要格局 | 园豆:2145 (老鸟四级) | 2015-04-08 10:40

A站在充值,同时B站在消费,就可能不一致了

支持(0) 反对(0) 泰德 | 园豆:6 (初学一级) | 2015-04-08 11:43

@泰德: 你需要学习事务概念

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2015-04-08 12:24

@泰德: 你的想法真奇怪…… A站有A站的事务,B站有B站的事务,怎么不一致了。

支持(0) 反对(0) 需要格局 | 园豆:2145 (老鸟四级) | 2015-04-08 13:26

你们的意思是说:A站修改数据库某一条记录时,B站就修改不了这条记录了吗?如果是这个意思,请问怎么实现的?

支持(0) 反对(0) 泰德 | 园豆:6 (初学一级) | 2015-04-08 15:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册