我试过sqlite, 通过使用多线程,只有一个线程可以同时更新数据库.. 我需要同时多线程更新数据库。 是否有任何DB可以完成这项工作?
ps:我使用的是delphi6。
我发现sqlite可以支持多线程,
但在我对asgsqlite的测试中,当一个线程插入时,其他线程将无法插入。
我还在测试。
答案 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在发生这种情况时如何处理并发插入。