当多个过程生成数据以针对单个请求更新/插入数据库中的记录时,在何处/何时开始事务?

问题描述 投票:0回答:1

我的问题涉及使用 Tcl 作为桌面应用程序的本地服务器,并使用 SQLite 作为存储。

当用户在 UI 容器中键入时,组合请求将发送到 Tcl。这些可能会调用大约十个过程,其中大多数将生成一些数据以更新或插入少量数据库表中的记录。每个请求中传递的数据很少,生成的写入数据库的数据也很少;并且请求应该像用户键入一样迅速出现(但不是每次击键时)。

请求到达并通过验证后,是否应该开始数据库事务,然后每个过程可以按照调用的顺序将其生成的数据写入数据库;如果这一切都返回到开始这一切的过程,那么事务可以提交或回滚吗?或者,是否应该将过程生成的数据(因为它很小)写入 RAM(也许在字典中),然后在所有过程返回后,启动一个事务将其全部写入,然后一起写入提交还是回滚?

只要程序在不写入相同数据库行方面是独立的,是否有理由认为一种方法优于另一种方法?

感谢您考虑我的问题。

sqlite tcl
1个回答
0
投票

您通常会立即将内容写入服务器中的数据库,因为您不知道另一个请求将会到来。将变更捆绑为有意义的整体变更是客户的一项工作,也是我们经常使客户比简单表格更厚的原因之一。 (客户端可能在本地使用 SQLite 来保存中间状态,但这与服务器部分的功能无关。)

读取和写入数据库都需要事务;如果您自己不启动一项,它会为您启动一项。使用显式事务的主要原因是,您可以将多个语句分组到一个操作中,特别是当该操作涉及写入多个表或部分依赖于读取的写入时。对于从读事务开始并升级到写入的事务,需要Care;如果并行完成,这些可能会死锁(但您可以要求它们以升级的方式启动,从而避免死锁)。即使在繁忙的服务中,保持事务简短和简单(编写时)也可以避免大多数麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.