1 个工作单元的 1 个数据库连接?
1 database connection for 1 unit of work?
让我从我的例子开始 "one unit of work":
我需要向数据库中插入一个事务。与该交易一起,几个唯一代码被存储在一个单独的 table 中,外键是交易 ID。我有 4 个数据库交互:1)从序列中获取下一个事务 ID; 2)插入交易; 3 & 4) 使用交易 ID 插入 2 个唯一代码。
这是一个多线程 Java 应用程序。哪条路线最好?
- 每个数据库交互都应该从池中获取自己的连接,在每个步骤后立即提交并关闭它
- 应该为 4 个步骤中的每一个检索并使用一个连接,然后在最后提交一次并关闭连接
我曾在一段时间前使用 'Akka' 框架'actors'来帮助我处理多线程部分。
我们采用了您的第二种方法。使用单一连接来完成工作。
1)从一个序列中获取下一个事务id; 2)插入交易; 3 & 4) 使用交易 ID 插入 2 个唯一代码。
让我们把这项工作变成原子的。如果四个步骤中的任何一个连接失败,则回滚完成工作。
维持 'id' 以确保重新开始这项工作。仅当工作中的所有交易完成时才更新 ID。
如果交易是不同类型的,那么您可以使用新的数据库连接让不同的线程对它们进行操作(每个交易类型对应于单独的工作)。
让我从我的例子开始 "one unit of work":
我需要向数据库中插入一个事务。与该交易一起,几个唯一代码被存储在一个单独的 table 中,外键是交易 ID。我有 4 个数据库交互:1)从序列中获取下一个事务 ID; 2)插入交易; 3 & 4) 使用交易 ID 插入 2 个唯一代码。
这是一个多线程 Java 应用程序。哪条路线最好?
- 每个数据库交互都应该从池中获取自己的连接,在每个步骤后立即提交并关闭它
- 应该为 4 个步骤中的每一个检索并使用一个连接,然后在最后提交一次并关闭连接
我曾在一段时间前使用 'Akka' 框架'actors'来帮助我处理多线程部分。
我们采用了您的第二种方法。使用单一连接来完成工作。 1)从一个序列中获取下一个事务id; 2)插入交易; 3 & 4) 使用交易 ID 插入 2 个唯一代码。 让我们把这项工作变成原子的。如果四个步骤中的任何一个连接失败,则回滚完成工作。
维持 'id' 以确保重新开始这项工作。仅当工作中的所有交易完成时才更新 ID。
如果交易是不同类型的,那么您可以使用新的数据库连接让不同的线程对它们进行操作(每个交易类型对应于单独的工作)。