数据库保存或单个批量保存的多个事务

Multiple transactions for a database save or a single bulk save

寻找关于这个的建议/意见。您认为将所有项目保存在单个数据库事务中更好,还是将每个项目保存在自己的事务中,项目有子项目等...所以它们需要保存在一个事务中,但整个 group/list 没有。我认为几乎每个人都会进行批量保存,但我很好奇。下面为每个示例伪代码。

单笔交易:

    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() 
    }
       

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

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

多少由你衡量。