将数据库保留在内存中,即使客户端脚本已断开连接

时间:2014-01-04 21:29:56

标签: php linux sqlite memory

我需要在将一些统计数据写入主数据库之前对其进行预处理。我的php-cli脚本每10分钟检索一次数据并将其存储在某处。每小时所有保存的数据都会再次进行预处理,然后写入主数据库。

我认为sqlite应该是很好的解决方案,如果我将它保存在内存中。我的数据量不是很大(我能将它保存在RAM中)。

实际上,我是sqlite的新手(之前我只使用mySQL)。 我发现here我可以使用:memory:而不是文件名来处理内存。但是在客户端断开连接之后,数据库被破坏,如果我将尝试再次从我的脚本连接到:memory: - 它将是不同的(新的,空的)数据库。

是不是?如果是,如果sqlite存储在内存中,如何使用不同的php脚本调用使用相同的数据库?

P.S。也许这是一个将sqlite文件放到某个“魔术”目录的解决方案? (我正在使用linux)

2 个答案:

答案 0 :(得分:2)

首先,linux非常聪明地使用文件系统缓存。因此,从磁盘读取数据通常会非常快,您应该测量性能增益是否值得。

如果你想继续,你可以考虑使用ramdisk的一种方法。 Linux提供了一种在内存中创建文件系统的方法,您可以将sqlite文件放在那里。

# mkdir -i /mnt/ram
# mount -t ramfs -o size=20m ramfs /mnt/ram
# touch mydb.sql
# chown apache:apache mydb.sql

......或类似的东西。

答案 1 :(得分:1)

当您从数据库句柄断开连接或退出/终止进程时,:memory:中创建的SQLite数据库会自动销毁。

如果您希望多个PHP会话可以访问数据库,则无法使用:memory:。如果您没有大量数据,则应将中间结果存储在某些持久数据库中的帮助程序表中 - 使用磁盘上的真实文件存储MySQL或SQLite。