数据库保存或单个批量保存的多个事务
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 失败,则将事务放在循环之外。如果它们是离散事务,并且一个失败不应使其他失败,则将它们放入循环中(并捕获失败并根据需要 continue
或 break
)。
如果这无关紧要,并且您对性能非常感兴趣,那么事务确实会增加开销。慢多少取决于大量变量,包括单个查询大小和性能、数据库类型和配置以及 hardware/virtualization 资源。对于慢速查询(查询本身占用大部分时间)或非常大(对于琐碎的查询),它可能是 trivial/unmeasurable。
多少由你衡量。
寻找关于这个的建议/意见。您认为将所有项目保存在单个数据库事务中更好,还是将每个项目保存在自己的事务中,项目有子项目等...所以它们需要保存在一个事务中,但整个 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 失败,则将事务放在循环之外。如果它们是离散事务,并且一个失败不应使其他失败,则将它们放入循环中(并捕获失败并根据需要 continue
或 break
)。
如果这无关紧要,并且您对性能非常感兴趣,那么事务确实会增加开销。慢多少取决于大量变量,包括单个查询大小和性能、数据库类型和配置以及 hardware/virtualization 资源。对于慢速查询(查询本身占用大部分时间)或非常大(对于琐碎的查询),它可能是 trivial/unmeasurable。
多少由你衡量。