跨多个 DbContex 存储/更新数据时使用什么方法?性能比较:以及在这种情况下何时使用什么:
using (var scope = new TransactionScope())
{
using (var context1 = new ItemContext(userOptions))
{
context1.Items.Add(item);
context1.SaveChanges();
}
using (var context2 = new OrderContext(orderOptions))
{
testOrder.ItemId = item.Id;
context2.Orders.Add(testOrder);
context2.SaveChanges();
}
if(testOrder.SunIsShining){
using (var context1 = new ItemContext(itemOptions))
{
item.SunIsShining= true;
context1.Items.Update(item);
context1.SaveChanges();
}
}
scope.Complete();
}
A. 上面的示例使用事务范围并在同一物理服务器中的不同上下文之间更改/更新记录。
B. 使用消息。例如在将用户保存到 db 之后。调用消息服务,将信息 msg 插入队列(项目信息记录)。然后 ItemOrderProcessingService 将读取该队列,说每 10 秒读取一次其中的所有新记录。并且批量创建订单,如果需要,也可以批量更新项目表中的某些项目状态。(如果需要,有回滚更改的逻辑)
何时使用哪种方法,优点/缺点是什么?fe 如果我们每天有大约 2k 笔交易,这是相当低的。每天有多少笔交易应该使用 B. 队列方法?
这是完全不同的方法。当您使用事务时,对所有上下文进行回滚要简单得多。在基于消息的系统中需要一些时间,直到您的消息将被所有服务处理,并且您应该处理服务失败并检查数据一致性
基于消息的团队需要付出更多努力来维护和支持处理消息的微服务,对于像您这样的小型应用程序,使用单体应用程序是可以的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句