如果几个网站操作同一个数据库的数据,在不用存储过程的情况下,用什么办法保证数据一致性比较好?
1、分布式事务;
2、幂等操作;
我这个只是一个小项目,用不上这些技术
@泰德: 你谈到小项目用不上这些技术,那么说明你对保证数据一致性的技术了解的比较透彻了,请问,除此之外,你还有什么别的方案吗?
@泰德: 我给你解释下如何使用“幂等操作”解决“A站在充值,同时B站在消费,就可能不一致了”的问题。其实很简单,就是使用 SQL 语句更新“余额”字段的值时,使用 RowVersion 字段的值作为 WHERE 条件,更新失败时提示用户“余额不足”。当然,通常的做法是再增加一个“冻结”字段,消费时先“冻结”,成功后再更新“余额”。
@Launcher: 谢谢
@Launcher: 追问一下:我用的EF,没有直接用SQL语句更新,是不是也可以用您说的方法?
@泰德: 用 EF 也可以,写起来更简单,比如给 Model 类添加 byte[] RowVersion 属性,然后设置该字段为 Property(w => w.RowVersion).IsRowVersion(),更新的时候 EF 会自动做判断。
@Launcher: 再次感谢
你一个小项目,数据还能怎么不一致呢?反正不一致也没人看到,管他呢。
你都是闲得没工作可做了,才会考虑这些奇怪的问题的吧,几个网站,用同一个数据库,怎么不一致????同一个数据库,同一个数据库怎么会不一致?
A站在充值,同时B站在消费,就可能不一致了
@泰德: 你需要学习事务概念
@泰德: 你的想法真奇怪…… A站有A站的事务,B站有B站的事务,怎么不一致了。
你们的意思是说:A站修改数据库某一条记录时,B站就修改不了这条记录了吗?如果是这个意思,请问怎么实现的?