使用PHP PDO在sqlite中启用共享Pager缓存


Enable Shared Pager Cache in sqlite using PHP PDO

我正在研究sqlite的功能,发现了默认禁用的sqlite共享缓存模式。

共享缓存是:

用于嵌入式服务器

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

1) PHP脚本中到sqliteDB的每个PDO连接都被视为单个隔离连接吗?

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

int sqlite3_enable_shared_cache(int);

如何通过PDO调用该函数?

这似乎几乎是不可能的,但也许有一个解决方案。

谨致问候,法比奥·布达Web Developer/Designer@netdesign

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

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

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

我搜索了PHP源代码,为您找到了答案。ext/pdo_sqlite/中没有任何文件正在调用sqlite3_enable_shared_cache函数,这意味着它没有实现。