使用SQLite3实现生产者/消费者的正确方法是什么?

时间:2013-10-24 21:54:26

标签: php sqlite

我怎么偶尔写一个有频繁读者的sqlite数据库?我正在使用PHP,但这并不重要。我理解query()将返回SQLITE_BUSY,我可以再试一次,我可以调用busyTimeout来帮助,但我希望有一种内置方式告诉数据库等待自己。现在,我正在使用:

function wait_query_db($db, $query) {
    do {
        $db->busyTimeout(1000);
        $result = @$db->query($query);
    } while ($db->lastErrorCode() == SQLITE_BUSY);
    return $result;
}

2 个答案:

答案 0 :(得分:1)

没有“内置”的方式。增加忙碌超时。您可以通过执行以下命令将其设置为连接:

PRAGMA busy_timeout = milliseconds

(自SQLite 3.7.15起可用)

答案 1 :(得分:1)

busyTimeout(或等效的PRAGMA busy_timeout告诉数据库等待的内置方式。

如果您想等待更长时间,则应使用更长的超时。

如果你的PHP足够新,你至少拥有SQLite 3.7,并且你的数据库没有通过网络文件系统访问,你应该考虑启用write-ahead logging,这可以防止读者和作者互相阻塞