Включить Shared Pager Cache в sqlite с помощью PHP PDO - PullRequest
5 голосов
/ 05 февраля 2012

Я изучаю функции sqlite и обнаружил Режим общего кэша SQLite , который по умолчанию отключен.

Общий кэш:

предназначен для использования во встроенных серверах

, поскольку он разделяет один кеш данных и схемы между потоками или процессами.Я заинтересован в использовании sqlite (с shared-cache) в PHP (и Python), поэтому у меня следующие вопросы:

1) каждое соединение PDO в сценарии PHP с базой данных sqlite считается одним изолированным соединением?

2) если да, использование Shared-Cache Mode может повысить производительность в сценарии с высоким параллелизмом;Чтобы активировать Shared-Cache Mode, нужно вызвать эту функцию C:

int sqlite3_enable_shared_cache(int);

как вызвать эту функцию через PDO?

Это кажется почти невозможным, но, возможно, есть решение.

С наилучшими пожеланиями, Фабио Буда Веб-разработчик / Дизайнер @ netdesign

Ответы [ 2 ]

6 голосов
/ 04 ноября 2012

Чтобы включить функцию общего кэша SQLite в коде PHP, вы можете выполнить следующую уловку:

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

И это работает, хотя и несколько уродливо - тесты производительности на базе данных 10k пользователей показывают немного (~ 3%)снижение производительности.Похоже, что это не кэш запросов (результатов), а кэш-память необработанных данных таблиц.Вот почему это должно быть полезно только для действительно огромных баз данных с высоким уровнем параллелизма.

0 голосов
/ 05 февраля 2012

Я искал исходный код PHP, чтобы найти ответ для вас. Ни один файл в ext/pdo_sqlite/ никогда не вызывает функцию sqlite3_enable_shared_cache, что означает, что она не реализована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...