问题:
例如有三个步骤:1.更新Couchbase数据;2:更新MongoDB,3:更新Redis;
这三个步骤如何能用事务这种操作,如何保证任何一个失败其他回滚,保障数据一致性?
不同的db,并不是同一个db
那你只能自己写代码控制了,当任意一个失败,回滚所有已经做过的更改(可能需要在操作之前记录下老数据,像redis就不支持回滚吧),注意需要考虑如果恢复到老数据时出错怎么办,还有是不是有多个用户可以同时操作,是否要加锁。
或者你找找有什么第三方的,没有的话就自己写吧,类似这样:
interface IRollBackEnable
{
void RollBack();
bool Run()
}
IRollBackEnable one = ...
IRollBackEnable two = ...
IRollBAckEnable three = ...
list = [one, two, three];
for i = 0, i < 3 ; i++:
if list[i].Run() == false:
for(j = 0; j < i; j++):
list[j].RoolBack();
引用System.Data.Entity;
using (var trans = db.Database.BeginTransaction())
{
try
{
if ("ok")
{
tran.Commit();
}
}
catch (Exception ex)
{
tran.Rollback();
}
}
}
}
你好,你写的这个db是哪个?我这分别有三个不同的db啊,Couchbase,Mondo,Redis;并不是操作同一个db啊
@天空自由: 能不能设三个bool的flag,如果有一个为false,那么三个db就都回滚
代码逻辑控制,每个db操作记录好异常。并对其使用成功/失败进行打标记(比如boolean、int值等);然后事物提交时进行状态判断,有一个不满足即rollback。否则提交事物
想想代码怎么实现事务过程,如安装、数据库写入等等,那么实现无非也是如此。