
Лирическое отступление
Недавно базы моих сайтов разрослись, и VDS начала падать из-за нехватки памяти. На борту 512 метров, MySQL кушал около 350-400, что отрубало ssh и иногда приводило к падению сайтов. Покурив маны по MySQL, поиграв с настройками и индексами, я понял, что все это костыли, т.к. базы будут расти и дальше, а оперативки больше не станет. Так я принял решение перейти к SQLite.
Кратко об SQLite:
- В отличие от большинства SQL хранилищ, не является сервером. SQLite — это БД в виде одного файла и библиотеки работы с ними. Существует много разных библиотек для разных языков. Для PHP я выбрал PDO.
- При работе нужно помнить, что по-умолчанию SQLite блокирует файл БД при записи (выполнение INSERT, DELETE, UPDATE и т.п.), что приводит к невозможности редактирования данных двумя процессами, что в нашем случае (использование на web-сервере) важно.
- Обязательно почитать
Алгоритм переноса:
- Переделать скрипты на работу с PDO. PDO — это универсальная обертка для работы с разными базами данных. Сначала использовать mysql, все проверить.
Краткая таблица замены (для динозавров вроде меня, не использовавших PDO ранее)Стандартные функции PHP для mysql PDO mysql_connect('localhost','user','pass'); mysql_select_db('myDB');
$pdo=new PDO('mysql:dbname=myDB;host=localhost','user','pass');
$q=mysql_query($s)
$q=$pdo->query($s)
$o=mysql_fetch_object($q)
$o=$q->fetch(PDO::FETCH_OBJ); /*ИЛИ*/ $o=$q->fetch(5);
$a=mysql_fetch_row($q)
$a=$q->fetch(PDO::FETCH_NUM)
mysql_query($s)#например INSERT
$pdo->exec($s)
- Сконвертировать БД. В сети есть различные реализации, но ни одна из них у меня не заработала, возможно из-за объема БД, так что пришлось написать велосипед.
- Переключить конструктор PDO на созданную бд SQLite. Все проверить и измерить скорость.
www.sqlite.org
php.net/PDO
habrahabr.ru/post/149356