我尝试使用sqlite,但是在多线程下,只有一个线程能够同时更新数据库。我需要多线程同时更新数据库。是否有其他数据库可以胜任这个任务?
附注:我使用的是Delphi6。
我发现sqlite可以支持多线程,但是在我的asgsqlite测试中,当一个线程插入数据时,其他线程将无法插入。
我仍在进行测试。
我尝试使用sqlite,但是在多线程下,只有一个线程能够同时更新数据库。我需要多线程同时更新数据库。是否有其他数据库可以胜任这个任务?
附注:我使用的是Delphi6。
我发现sqlite可以支持多线程,但是在我的asgsqlite测试中,当一个线程插入数据时,其他线程将无法插入。
我仍在进行测试。
Firebird可以用作嵌入式版本,但在本地使用标准(服务器)安装也没有问题。非常小巧,易于部署,支持并发访问。与Delphi配合良好,您应该考虑将其作为选项。
另请参阅StackOverflow问题“在Delphi应用程序中使用哪个嵌入式数据库?”
SQL Server 2008 Express支持并发,以及SQL Server的大多数其他功能。而且它是免费的。
为什么需要多个线程同时更新它?我相信sqlite会确保更新正确完成,即使这意味着一个线程等待另一个线程完成;这对应用程序是透明的。
实际上,让几个线程同时更新很可能不利于性能。也就是说,看起来可能像是几个线程在同时更新,但实际上结果是更新比没有并发更新时更慢(因为它们需要持有许多页面锁等以避免问题)。
ElevateSoft的DBISAM在多线程模式下运行非常好,并具有自动会话命名功能,使其变得更加容易。请务必遵循帮助页面上的说明,确保一切安全,工作完成。
我目前正在使用Sybase ASE上进行多线程Java进程性能测试,该进程解析1GB文件并将其插入表格。
一开始我很担心,因为许多资深程序员警告我要注意“表锁定”,并表示对数据库进行并发访问是多么危险。但是我还是进行了测试(因为我想亲自了解情况)。
我创建并比较了单线程进程和使用4个线程的进程。总执行时间只减少了20%。我重试了使用不同的线程数和批量插入大小的进程。我能够挤出的最大值为20%。
我们将很快切换到Oracle上,届时我会分享Oracle在处理并发插入时的方法。