gpt4 book ai didi

c# - 有什么方法可以将 Sql 和 Mongo 更新包装到单个事务中

转载 作者:可可西里 更新时间:2023-11-01 09:34:56 25 4
gpt4 key购买 nike

大家早上好

我正在开展一个项目,我将数据保存到 Mongo DB 以及 Sql Server( Entity Framework 代码优先)。在许多情况下,我会在单个代码块中对每个数据库执行写入操作。我想知道,你们中的任何人都可以建议一种类似于交易的方式来处理这个问题吗?这样如果代码块的任何部分失败,整个事情都应该失败并回滚?

最佳答案

我认为没有任何万无一失的方法可以做到这一点,因为您不仅有两个独立的连接,而且还有两个不同的架构。

假设您的 SQL Server 具有更复杂的数据模型(由于某种原因更有可能失败的模型)我过去想出了一种对我有用的方法:

  1. 按顺序执行操作,而不是同时执行
  2. 先执行SQL语句,失败不执行MongoDB语句,保持一致
  3. 如果成功,接下来执行MongoDB语句
  4. 如果 MongoDB 语句失败,则写入错误日志。确保日志不在远程机器上,以便日志记录失败的可能性尽可能小。

您稍后可以使用错误日志手动或自动挽救您的数据。在任何情况下,您都应该为所有语句实现重试策略,因为操作失败的最可能原因是(假设您的代码是正确的)时间问题并且重试通常可以解决这个问题。如果你做对了,一个月可能会出现一个奇怪的错误。

当然,在第 4 步中,您可以尝试还原 SQL 操作,而不是(或除此之外)写入日志条目。但这主要是很麻烦,并且会让您产生如果还原失败该怎么办的问题。

也许仍然有一些神奇的中间件可以将 MongoDB 语句集成到 SQL 事务中,但目前我只承认数据一致性和使用不同的数据库是相反的目标。尝试密切监视错误并减少错误的可能性。

关于c# - 有什么方法可以将 Sql 和 Mongo 更新包装到单个事务中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38198810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com