SQLite 替代品
SQLite Alternatives
我正在寻找 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 脚本,我可以看出它导致了一些问题:一些信息检索操作失败并且一些数据未更新。我在日志中收到这样的警告。
更新语句
[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 替代品吗?我一开始就列出了选择它的原因,但主要的需求是它可以被复制,不过如果有必要我可以绕过它。
如果你有能力等待锁被清除,你可以使用 sqlite busy timeout。
我正在寻找 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 脚本,我可以看出它导致了一些问题:一些信息检索操作失败并且一些数据未更新。我在日志中收到这样的警告。
更新语句
[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 替代品吗?我一开始就列出了选择它的原因,但主要的需求是它可以被复制,不过如果有必要我可以绕过它。
如果你有能力等待锁被清除,你可以使用 sqlite busy timeout。