SQLite替代品

时间:2015-04-01 14:17:53

标签: php sqlite lighttpd

我正在寻找sqlite的替代方案。我有一个内置lighttpd的应用程序,并提供php脚本与另一个应用程序的多个实例进行交互。抛开所有架构问题,出于某种原因,写这个的人选择使用sqlite作为php脚本的数据库 - 存储和检索脚本本身的信息。因此,看起来我们有锁定问题。为了解决这个问题,程序员使用了这样的东西:

$executed = $storeDB->exec($updateSQL);
while($executed === FALSE && $i<10) {
    $storeDB->close();
    $storeDB = new SQLite3('C:/Path/path2/LightTPD/store.db');
    $pragmaDB = "PRAGMA journal_mode=WAL";
    ($storeDB->exec($pragmaDB));
    $executed = $storeDB->exec($updateSQL);
    $i++;
}       

我理解为什么选择sqlite,因为它可以反复复制,不需要作为服务器安装,而且非常小。但是,由于应用程序的多个实例同时点击这些php脚本,有时会同时发生,我可以看到它导致了一些问题:一些信息检索操作失败,一些数据没有更新。我在这样的日志中收到警告。

UPDATE语句

[07-Mar-2015 21:03:44 UTC] PHP Warning:  SQLite3::exec(): database is locked in C:\Path\path2\LightTPD\htdocs\ProcessRequest.php on line 194

SELECT语句

[07-Mar-2015 21:22:25 UTC] PHP Warning:  SQLite3::query(): Unable to prepare statement: 5, database is locked in C:\Path\path2\LightTPD\htdocs\ProcessRequest.php on line 151

我说所有这些都要问,有没有人在这种情况下有任何类似的sqlite替代品?我列出了它选择开始的原因,但主要的需求是能够复制,但如果有必要,我可以解决这个问题。

1 个答案:

答案 0 :(得分:2)

如果你有能力等待锁定清除,你可以使用sqlite busy timeout