2

我将 perl与外部提供的 sqlite 数据库一起使用,为静态服务的网站预先生成大约 9k 页面。

我对原始数据进行了一些算法改进,但为了保持一致性,我认为如果我的脚本不理会原始数据库并仅修改内存中的数据(如果需要,甚至整个数据库也应该适合RAM 没有任何问题),在生成网页之前。

我该怎么做呢?

我闻到我可以从这里的某种 SQL 事务功能中受益(在我的脚本完成后应该放弃它),对吗?考虑到要保持原始数据库文件不被修改,这听起来是个好主意吗?(例如,当使用 Perl 中的 SQLite 时,来自正在进行的事务的数据存储在哪里以及如何存储?)还有其他方式来完成我需要的吗?(我是 perl 和 sql 新手——寻找带注释的代码示例。)

我想作为最后的手段,我总是可以在文件系统中复制数据库文件,但这似乎是一个丑陋且低效的解决方案。

4

2 回答 2

6

我没有对此进行测试,但是您应该能够使用SQLite 备份 API将数据库加载到内存中。您可能会打开:memory:(或者""如果您想要一个临时的、文件支持的数据库),然后调用sqlite_backup_from_file以一次性加载数据库。

例如(未经测试)

my $db = DBI->connect("dbi:SQLite:dbname=:memory:", '', '', {});
$db->sqlite_backup_from_file($ENV{DATABASE});
#Database should be loaded into the current memory DB at this point.
于 2014-02-18T15:48:43.510 回答
0

您可以创建一个 RAM 磁盘并将数据库路径放在上面。详细信息将取决于您的操作系统。

于 2014-02-18T16:53:15.637 回答