【问题标题】:How to use php to access sqlite if the sqlite file contents is stored in shared memory?如果sqlite文件内容存储在共享内存中,如何使用php访问sqlite?
【发布时间】: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


    【解决方案1】:

    由于琐碎的文件缓存,您的文件已经缓存在内存中,所以不用担心。

    这总是让我想知道,为什么人们期望“很多人查看该网站”,因为即使没有数据库访问权限,所述网站也托管在共享主机上。

    【讨论】:

      猜你喜欢
      • 2011-07-25
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 2021-06-09
      • 1970-01-01
      • 2019-03-04
      相关资源
      最近更新 更多