有哪些本地数据库支持多线程?

3

我尝试使用sqlite,但是在多线程下,只有一个线程能够同时更新数据库。我需要多线程同时更新数据库。是否有其他数据库可以胜任这个任务?

附注:我使用的是Delphi6。


我发现sqlite可以支持多线程,但是在我的asgsqlite测试中,当一个线程插入数据时,其他线程将无法插入。

我仍在进行测试。

8个回答

7

SQLite可以在多线程环境中使用。

请查看此链接


4

2
Sqlite在更新时会锁定整个数据库(除非自从我上次使用它以来发生了改变)。第二个线程不能同时更新数据库(即使使用完全不同的表)。但是有一个超时参数,告诉第二个线程在失败之前重试x毫秒。我认为ASqlite在数据库组件中显示了这个参数(我想我实际上写了那段代码,只有3行,但那是几年前的事了)。
将超时设置为大于0的值将允许多个线程更新数据库。但是可能会影响性能。

1

自从版本3.3.1以来,SQLite的线程要求已经大大放宽。在大多数情况下,这意味着它可以正常工作。如果您确实需要比这更高的并发性,最好使用一个数据库服务器。


1

SQL Server 2008 Express支持并发,以及SQL Server的大多数其他功能。而且它是免费的。


据我所知,它只会使用一个CPU来处理所有SPID,但是它可以支持并发的SPID。 - Marc Gravell

1

为什么需要多个线程同时更新它?我相信sqlite会确保更新正确完成,即使这意味着一个线程等待另一个线程完成;这对应用程序是透明的。

实际上,让几个线程同时更新很可能不利于性能。也就是说,看起来可能像是几个线程在同时更新,但实际上结果是更新比没有并发更新时更慢(因为它们需要持有许多页面锁等以避免问题)。


这假设所有线程都在更新相同的记录或至少是相同的表。即使如此,还有其他允许快速多线程更新的DB引擎,比如Firebird。 - mghie
我使用多线程来区分操作,比如一个线程读取数据,一个线程处理数据。 - linjunhalida

1

ElevateSoft的DBISAM在多线程模式下运行非常好,并具有自动会话命名功能,使其变得更加容易。请务必遵循帮助页面上的说明,确保一切安全,工作完成。


0

我目前正在使用Sybase ASE上进行多线程Java进程性能测试,该进程解析1GB文件并将其插入表格。

一开始我很担心,因为许多资深程序员警告我要注意“表锁定”,并表示对数据库进行并发访问是多么危险。但是我还是进行了测试(因为我想亲自了解情况)。

我创建并比较了单线程进程和使用4个线程的进程。总执行时间只减少了20%。我重试了使用不同的线程数和批量插入大小的进程。我能够挤出的最大值为20%。

我们将很快切换到Oracle上,届时我会分享Oracle在处理并发插入时的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接