我正在研究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
函数,这意味着它没有实现。