代码之家  ›  专栏  ›  技术社区  ›  linjunhalida

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

  •  3
  • linjunhalida  · 技术社区  · 17 年前

    通过使用多线程,只有一个线程可以同时更新db。。 有DB可以做这项工作吗?

    ps:我用delphi6。


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

    我还在测试中。

    8 回复  |  直到 17 年前
        1
  •  7
  •   Yuval Adam    17 年前

    结账 this link .

        2
  •  4
  •   Community Mohan Dere    9 年前

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

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

        3
  •  2
  •   SeanX    17 年前

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

        4
  •  1
  •   Javier    17 年前

    自3.3.1版本以来,SQLite的线程要求一直是 greatly relaxed 在大多数情况下,这意味着 simply works 如果你真的需要更多的并发性,最好使用DB服务器。

        5
  •  1
  •   John Saunders    17 年前

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

        6
  •  1
  •   MarkR    17 年前

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

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

        7
  •  1
  •   mj2008    17 年前

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

        8
  •  0
  •   Jose    17 年前

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

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

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

    我们很快就会切换到Oracle,所以我将分享Oracle在这种情况下如何处理并发插入。