【问题标题】:How to use the same SQLite3 database from multiple Perl processes?如何在多个 Perl 进程中使用同一个 SQLite3 数据库?
【发布时间】:2012-06-20 19:32:37
【问题描述】:

我有一个不幸的情况,多个 Perl 进程同时写入和读取同一个 SQLite3 数据库。

这通常会导致 Perl 进程崩溃,因为两个进程会同时写入,或者一个进程正在从数据库中读取数据,而另一个进程试图更新同一条记录。

有谁知道我如何协调多个进程以使用同一个 sqlite 数据库?

我将努力将此系统移至不同的数据库引擎,但在此之前,我需要修复它以使其按原样工作。

【问题讨论】:

  • 您可以考虑使用 DBIx::Connector 对象连接到数据库,并通过 DBIx::Connector 的run( fixup => ... ) API 运行您的查询。它在失败时重试,并且具有很强的容错能力。在这种情况下,txn() 函数可能会更好。

标签: perl sqlite


【解决方案1】:

SQLite 旨在用于多个进程。如果您将 sqlite 文件托管在网络驱动器上,则存在一些例外情况,并且可能有一种方法可以编译它以使其期望从一个进程中使用,但我经常从多个进程中使用它。如果您遇到问题,请尝试增加超时值。 SQLite 使用文件系统锁来保护数据不被同时访问。如果一个进程正在写入文件,则第二个进程可能必须等待。我将超时设置为 3 秒,对此几乎没有问题。

Here is the link to set the timeout value

【讨论】:

猜你喜欢
  • 2016-10-03
  • 2013-04-22
  • 2011-11-06
  • 1970-01-01
  • 2014-06-12
  • 2015-07-02
  • 2014-08-18
  • 2019-06-29
  • 2017-05-18
相关资源
最近更新 更多