【问题标题】:Are there any local DB that support multi-threading?是否有任何支持多线程的本地数据库?
【发布时间】:2009-03-31 09:09:17
【问题描述】:

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

ps:我用的是delphi6。


发现sqlite可以支持多线程,

但是在我对asgsqlite的测试中,当一个线程插入时,其他线程会插入失败。

我还在测试中。

【问题讨论】:

    标签: database multithreading delphi


    【解决方案1】:

    SQLite 可用于多线程环境。

    查看this link

    【讨论】:

      【解决方案2】:

      Firebird可以在嵌入式版本中使用,但是在本地使用标准(服务器)安装也没有问题。非常小,易于部署,并发访问。与 Delphi 配合得很好,您应该将其作为一个选项进行研究。

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

            • AFAIK 它只会为所有 SPID 使用一个 CPU,但它会很高兴地支持并发 SPID...
            【解决方案6】:

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

            确实,同时更新多个线程很可能对性能没有好处。也就是说,看起来可能有多个线程同时更新,但实际上结果是更新完成的速度比没有更新的慢(因为它们需要持有许多页面锁等以避免出现问题) .

            【讨论】:

            • 假设所有线程都在更新相同的记录或至少相同的表。即便如此,还有其他允许快速多线程更新的数据库引擎,例如 Firebird。
            • 我使用多线程来区分操作,比如一个线程读取数据,一个线程处理数据。
            【解决方案7】:

            来自 ElevateSoft 的 DBISAM 在多线程模式下工作得非常好,并且具有自动会话命名功能,使这变得容易。请务必遵循帮助中的页面,了解如何确保一切安全并完成工作。

            【讨论】:

              【解决方案8】:

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

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

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

              我们将很快切换到 Oracle,因此我将分享 Oracle 在发生这种情况时如何处理并发插入。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2018-05-17
                • 1970-01-01
                • 2017-08-15
                • 1970-01-01
                • 1970-01-01
                • 2017-12-16
                • 2011-11-10
                • 1970-01-01
                相关资源
                最近更新 更多