【问题标题】:Multiple transactions for a database save or a single bulk save数据库保存的多个事务或单个批量保存
【发布时间】:2022-01-03 10:41:52
【问题描述】:

寻找这个问题/意见。您认为最好将所有项目保存在单个数据库事务中,还是将每个项目保存在自己的事务中,这些项目有子项目等......所以它们需要保存在一个事务中,但整个组/列表才不是。我认为几乎每个人都会进行批量保存,但我很好奇。下面的示例伪代码。

单事务:

    BeginTransaction()

    for (int i = 0; i < items.Count; i++)
        items[i].Save();

    CommitTransaction()
    
    

多事务:

    for (int i = 0; i < items.Count; i++)
    {
      BeginTransaction()
      items[i].Save();
      CommitTransaction() 
    }
       

【问题讨论】:

    标签: c# mysql sql database transactions


    【解决方案1】:

    这可能更好地取决于其中一个事务失败时发生的情况的要求。如果事务是相关的并且它们应该全部失败,则将事务置于循环之外。如果它们是离散事务,并且一个失败不应使其他事务失败,请将它们放入循环中(并根据需要捕获失败和continuebreak)。

    如果这无关紧要,并且您对性能非常感兴趣,那么事务确实会增加开销。慢多少取决于大量变量,包括单个查询大小和性能、数据库类型和配置以及硬件/虚拟化资源。对于慢速查询(查询本身占用大部分时间)或非常大(对于琐碎的查询),它可能是微不足道的/不可测量的。

    多少由你来衡量。

    【讨论】:

    • 在这种情况下,该项目只需要交易,而不是整个列表。所以物品保存也很快,一点也不慢。所以基本上我假设的测量只是列表保存的总长度,以确定事务是否打开太久。好的,谢谢只是重新评估我的想法。
    猜你喜欢
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    相关资源
    最近更新 更多