加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – sqlite中多线程INSERTS的限制

发布时间:2020-12-15 23:21:57 所属栏目:大数据 来源:网络整理
导读:我的perl脚本是多线程的,在每个线程中我都要写一些东西到sqlite3数据库.但正如你可能猜到的那样,我得到了很多 DBD::SQLite::db do failed: database is locked at script.pl line 264. 消息.我读到sqlite3能够处理多线程情况,甚至是INSERT语句,但我认为在同
我的perl脚本是多线程的,在每个线程中我都要写一些东西到sqlite3数据库.但正如你可能猜到的那样,我得到了很多

DBD::SQLite::db do failed: database is locked at script.pl line 264.

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

好的,所以它不可能这样,但是在插入之前是否有可能执行检查以查看数据库是否被锁定(或忙碌)然后等待再次免费?

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

谢谢

解决方法

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

$dbh->do("begin exclusive transaction") or die $dbh->errstr;
#inserts here
$dbh->do("commit transaction") or die $dbh->errstr;

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

并且,正如@mob评论的那样,Perl线程是一个有点可笑的野兽.我只是得到数据库所做的锁定.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读