【发布时间】:2017-04-17 13:48:07
【问题描述】:
我正在做一个网站,这个网站有一个100MB的sqlite文件,这个文件不会更新。
这个db文件只有一张表,也就是说每个请求都会搜索100MB的数据,所以我担心很多人浏览网站时的性能
我打算使用内存来加速网站,但是我没有服务器(包括mysql)的管理员权限,所以我无法安装memcached redis等软件。我需要一个本机/默认解决方案。
所以我选择了共享内存,我写了这个程序来缓存整个sqlite文件在内存中。
但是我不知道如何访问内存中的文件,因为PDO只接受字符串DSN
如何访问内存中的数据库?
$size=filesize ( "mydb.sqlite" );
$data=file_get_contents("mydb.sqlite");
$systemid = 12; // System ID for the shared memory segment
$mode = "c"; // Access mode
$permissions = 0755; // Permissions for the shared memory segment
$shmid = shmop_open($systemid, $mode, $permissions, $size);
shmop_write($shmid, $data, 0);
// used in other process
$size = shmop_size($shmid);
$sqlite_file_data=shmop_read($shmid, 0, $size);
如果不可能,我会重写这个程序,使用stdClass来存储整个数据库, 要将 php 对象存储到共享内存,我需要将其转换为 json 字符串,在每个请求中反序列化 100MB json 可能会花费大量 CPU 和时间。 我可以直接将原始对象存储到内存吗?
【问题讨论】:
标签: php sqlite pdo shared-memory