簡體   English   中英

用SQLite3實現生產者/消費者的正確方法是什么?

[英]What's the right way to implement producer/consumer w/ SQLite3?

如何偶爾寫入經常閱讀的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;
}

沒有“內置”方式。 增加忙超時。 您可以通過執行以下命令將其設置為連接本身:

PRAGMA busy_timeout = milliseconds

(自SQLite 3.7.15起可用)

busyTimeout (或等效的PRAGMA busy_timeout告訴數據庫等待的內置方法。

如果要等待更長的時間,則應使用更大的超時時間。

如果您的PHP足夠新,足以至少擁有SQLite 3.7,並且沒有通過網絡文件系統訪問數據庫,則應考慮啟用預寫日志記錄 ,這可以防止讀取器和寫入器彼此阻塞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM