Как стать автором
Обновить

Переносим сайт с MySQL на SQLite

image
Лирическое отступление

Недавно базы моих сайтов разрослись, и VDS начала падать из-за нехватки памяти. На борту 512 метров, MySQL кушал около 350-400, что отрубало ssh и иногда приводило к падению сайтов. Покурив маны по MySQL, поиграв с настройками и индексами, я понял, что все это костыли, т.к. базы будут расти и дальше, а оперативки больше не станет. Так я принял решение перейти к SQLite.

Кратко об SQLite:

  • В отличие от большинства SQL хранилищ, не является сервером. SQLite — это БД в виде одного файла и библиотеки работы с ними. Существует много разных библиотек для разных языков. Для PHP я выбрал PDO.
  • При работе нужно помнить, что по-умолчанию SQLite блокирует файл БД при записи (выполнение INSERT, DELETE, UPDATE и т.п.), что приводит к невозможности редактирования данных двумя процессами, что в нашем случае (использование на web-сервере) важно.
  • Обязательно почитать

Алгоритм переноса:

  1. Переделать скрипты на работу с 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)
  2. Сконвертировать БД. В сети есть различные реализации, но ни одна из них у меня не заработала, возможно из-за объема БД, так что пришлось написать велосипед.
  3. Переключить конструктор PDO на созданную бд SQLite. Все проверить и измерить скорость.

www.sqlite.org
php.net/PDO
habrahabr.ru/post/149356
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.