是否有支持多线程的本地数据库?

时间:2009-03-31 09:09:18

标签: database multithreading delphi

我试过sqlite, 通过使用多线程,只有一个线程可以同时更新数据库.. 我需要同时多线程更新数据库。 是否有任何DB可以完成这项工作?

ps:我使用的是delphi6。


我发现sqlite可以支持多线程,

但在我对asgsqlite的测试中,当一个线程插入时,其他线程将无法插入。

我还在测试。

8 个答案:

答案 0 :(得分:8)

SQLite可用于多线程环境。

查看this link

答案 1 :(得分:4)

Firebird可用于嵌入式版本,但在本地使用标准(服务器)安装也没有问题。非常小,易于部署,并发访问。适用于Delphi,您应该将其作为一种选择。

另请参阅StackOverflow问题"Which embedded database to use in a Delphi application?"

答案 2 :(得分:2)

Sqlite在更新时锁定整个数据库(除非自上次使用以来此更改)。第二个线程无法同时更新数据库(即使使用完全独立的表)。但是,有一个超时参数告诉第二个线程在失败前重试x毫秒。我认为ASqlite在数据库组件中显示了这个参数(我想我实际上写了一些代码,所有3行,但是几年前就已经写过了。)

将超时设置为大于0的值将允许多个线程更新数据库。但是可能会有性能影响。

答案 3 :(得分:1)

从版本3.3.1开始,SQLite的线程要求为greatly relaxed。在大多数情况下,它意味着它simply works。如果你真的需要更多的并发性,那么使用数据库服务器可能会更好。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

实际上,同时更新多个线程很可能对性能没有好处。也就是说,它可能看起来像几个线程同时更新,但实际上结果是更新变得比它们没有更慢(由于他们需要持有许多页锁等以避免问题)

答案 6 :(得分:1)

ElevateSoft的DBISAM在多线程模式下工作得非常好,并且具有自动会话命名功能,可以轻松实现。请务必按照帮助中的页面进行操作,了解如何确保安全,并完成工作。

答案 7 :(得分:0)

我实际上正在使用Sybase ASE上的多线程Java进程进行性能测试。该进程解析1GB文件并插入表中。

起初我很害怕,因为许多高级程序员警告我“表锁定”以及并发访问数据库是多么危险。但是我继续进行测试(因为我想找到自己)。

我使用4个线程创建并将单线程进程与进程进行比较。我的总执行时间减少了20%。我使用不同的线程数和批量插入大小重试了该过程。我可以挤压的最大值是20%。

我们很快就会转向Oracle,所以我会分享Oracle在发生这种情况时如何处理并发插入。