0
我想问一个问题。我一直在试图找到一些有关多连接交易的信息,但我一直没能找到任何好的信息来源。具有多个连接的交易(MySql,C#)
现在为我想要做的。我有一些代码,看起来像这样:
using (var Connection1 = m_Db.CreateConnection())
using (var Connection2 = m_Db.CreateConnection())
{
Connection1.DoRead(..., (IDataReader Reader) =>
{
// Do stuff
Connection2.DoWrite(...);
Connection2.DoRead(..., (IDataReader Reader) =>
{
// Do more stuff
using (var Connection3 = m_Db.CreateConnection())
{
Connection3.DoWrite(...);
Connection3.Commit(); // Is this even right?
}
});
});
Connection1.DoRead(..., (IDataReader) =>
{
// Do yet more stuff
});
Connection1.Commit();
Connection2.Commit();
}
每个创建连接创建使用的MySqlConnection一个新的事务::调用BeginTransaction。 CreateConnection方法创建一个包装MySqlConnection的Connection对象。 DoRead函数执行一些SQL,并在完成时处置IDataReader。
每个连接都会在处置时进行回滚。
现在对于一些注意事项:
- 我有一台服务器有多个数据库。
- 我正在使用InnoDB数据库运行MySql服务器。
- 我正在读取和写入这些数据库。
- 出于性能方面的原因,不要搞乱数据库,我正在使用事务。
- 该代码是(至少,现在)完全串行。没有并发线程。所有插入和查询都以串行方式完成。
- 我使用多个连接到数据库,因为在另一个读取正在进行时(基本上读取器对象尚未处理),不允许读取或写入。
- 我基本上希望每个连接都能看到所有更改。例如,在连接3做了一些写操作之后,连接1应该看到这些。但是数据应该在事务中,而不是写入数据库(还)。
现在,我的问题:
- 工作的呢?只有在调用最后一个Commit函数后才会提交所有内容?我应该用另一种方法吗?
- 这是正确的吗?我的方法是完全彻底错误而愚蠢的吗?
- 有什么缺点?特别是关于性能。
谢谢。