Я делаю сайт, этот сайт имеет файл sqlite 100 МБ, этот файл не будет обновляться.
Этот файл базы данных содержит только одну таблицу, что означает, что каждый запрос будет искать данные размером 100 МБ, поэтому я беспокоюсь о производительности, когда многие люди просматривают веб-сайт.
Я планирую использовать память для ускорения работы сайта, но у меня нет прав администратора на сервер (включая 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, чтобы десериализовать json размером 100 МБ при каждом запросе может стоить много ресурсов процессора и времени.
Могу ли я напрямую сохранить необработанный объект в памяти?
Ваш файл будет уже кэширован в памяти из-за тривиального кеша файлов, так что не волнуйтесь.
Меня всегда удивляет, почему люди ожидают, что «многие люди будут просматривать веб-сайт», учитывая, что веб-сайт размещен на общем хостинге даже без доступа к базе данных.
Других решений пока нет …