会话(session)和事务的区别
一个session可以启动多个事务,session指一次连接。一个session中可以完成多个事务。
一个事务 是指一个操作单元,要么成功,要么失败,没有中间状态。
会话,在应用程序中连接数据库要执行连接,然后会关闭,这算一次会话。
事务呢,就好比在打开会话后要执行程序中的某一个或多个对数据库进行的操作。
session怎么创建关闭,及其对性能的影响
开启了事务之后,Session会一直占用一个连接,所以一个http请求对应一个Session会降低数据库的并发性能,应该怎么解决?
一个好的办法是交给Spring去管理。下面给出一个例子:
表现层:
假如页面上有一个Button用于调用应用层的转账服务:
应用层:
public void TransferAccountService(int id1,int id2) {
ITransaction tx = _session.BeginTransaction(); //开始事务
Account a1 = session.Get<Account>(id1);
Account a2 = session.Get<Account>(id2);
//由于业务逻辑很慢,但是已经开始了事务,
//有一个数据库连接会被始终被占用。导致数据库的并发性能很低
LogicTransferAccount(a1,a2)
otherFunc();
tx.Commit(); //提交事务,为了简单,先不考虑回滚事务的情况。
}