Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP PDO在sqlite中启用共享寻呼机缓存_Php_Caching_Sqlite - Fatal编程技术网

使用PHP PDO在sqlite中启用共享寻呼机缓存

使用PHP PDO在sqlite中启用共享寻呼机缓存,php,caching,sqlite,Php,Caching,Sqlite,我正在研究sqlite特性,发现了默认情况下禁用的 共享缓存是: 用于嵌入式服务器 因为它在线程或进程之间共享单个数据和模式缓存。 我对在PHP(和Python)中使用sqlite(带有共享缓存)感兴趣,因此我的问题是: 1) PHP脚本中到sqlite DB的每个PDO连接都被视为一个独立的连接吗 2) 如果是,使用共享缓存模式可以提高高并发场景中的性能;要激活共享缓存模式,必须调用此C函数: int sqlite3_enable_shared_cache(int); 如何通过PDO调用该函

我正在研究sqlite特性,发现了默认情况下禁用的

共享缓存是:

用于嵌入式服务器

因为它在线程或进程之间共享单个数据和模式缓存。 我对在PHP(和Python)中使用sqlite(带有共享缓存)感兴趣,因此我的问题是:

1) PHP脚本中到sqlite DB的每个PDO连接都被视为一个独立的连接吗

2) 如果是,使用共享缓存模式可以提高高并发场景中的性能;要激活共享缓存模式,必须调用此C函数:

int sqlite3_enable_shared_cache(int);
如何通过PDO调用该函数

这似乎几乎是不可能的,但也许有一个解决办法

致以最良好的祝愿, 法比奥布达
Web Developer/Designer@

我已经搜索了PHP源代码,为您找到了答案。
ext/pdo\u sqlite/
中没有任何文件调用
sqlite3\u enable\u shared\u cache
函数,这意味着没有实现此功能。

您可以使用以下技巧在PHP代码中启用sqlite共享缓存功能:

define( 'SQLITE3_OPEN_SHAREDCACHE' , 0x00020000 );
$sqlite = new SQLite3( 'sqlite.db3' , SQLITE3_OPEN_READWRITE  | SQLITE3_OPEN_CREATE |     SQLITE3_OPEN_SHAREDCACHE );

虽然有点难看,但它还是可以工作的——对10k用户数据库的性能测试显示性能有点下降(~3%)。看起来这不是查询(结果)缓存,而是原始表数据的内存缓存。这就是为什么它应该只在具有高并发级别的大型数据库上使用。

这个答案非常棒,但是推荐的示例没有显示如何将定义的常量与PDO一起使用