仅限内存中对SQLite数据库的修改

cns*_*nst 2 sqlite perl sqltransaction

我正在使用perl与外部提供的sqlite数据库为静态服务的网站预生成大约9k页面.

我对原始数据进行了一些算法改进,但为了保持一致,我认为如果我的脚本单独保留原始数据库并且只在内存中修改数据会更有意义(如果需要,甚至整个数据库都应该适合在生成网页之前,没有任何问题的RAM.

我该怎么做呢?

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

我想作为最后的手段,我总是可以在文件系统中复制数据库文件,但这看起来像是一个丑陋而低效的解决方案.

Has*_*kun 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.
Run Code Online (Sandbox Code Playgroud)