sqlite中多线程INSERTS的限制

And*_*ndy 4 sqlite perl

我的perl脚本是多线程的,在每个线程中我都要写一些东西到sqlite3数据库.但正如你可能猜到的那样,我得到了很多

DBD :: SQLite :: db失败:数据库在script.pl第264行被锁定.

消息.我读到sqlite3能够处理多线程情况,甚至是INSERT语句,但我认为在同时插入8个线程时我会期待很多.

好了,所以它不可能通过这种方式,但不存在将要看到,如果数据库被锁定(或忙),然后等到再次自由之前进行检查的可能性?

我真的不想改为"真正的"DBMS,因为它只是一个简单的脚本.

谢谢

Stu*_*att 6

如果您需要阻止,直到您可以访问数据库,请尝试独占事务,即,

$dbh->do("begin exclusive transaction") or die $dbh->errstr;
#inserts here
$dbh->do("commit transaction") or die $dbh->errstr;
Run Code Online (Sandbox Code Playgroud)

这样,您将锁定委托给SQLite,而不是在Perl中进行.由于各种原因,这样更安全,尤其是您可能在Perl以外的其他内容中打开数据库,或者在另一个Perl进程而不是线程中打开数据库.

并且,正如@mob评论的那样,Perl线程是一个有点可笑的野兽.我只是在数据库中完成锁定,它属于它.