Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #69, СЕНТЯБРЬ 2004 г.

SqLite: легче не бывает!

Никита Кислицин

Xakep, номер #069, стр. 069-126-2


Даешь установку!

Поскольку давно уже вышел официальный релиз PHP 5.0, я настоятельно рекомендую тебе установить его, а заодно расскажу, как использовать SqLite совместно с этой версией языка. В PHP 5.0 подцепить SqLite проще простого: достаточно при сборке бинарника указать параметр –with-sqlite конфигурационному скрипту. Также может оказаться удобным собрать SqLite в отдельную бинарную библиотеку, что позволит открывать базу данных и управлять ею без использования PHP. Это на самом деле офигительная возможность, очень полезная для отладки и тестирования кода запросов. Через некоторое время, когда появятся новые версии SqLite, ты без проблем сможешь собрать новый вариант СУБД и так же легко подцепить к PHP. При этом, само собой, не потребуется пересобирать сам интерпретатор PHP. Ну что, потекли слюнки? :)

Чтобы собрать расширение SqLite в качестве внешней библиотеки, нужно просто указать флаг –with-sqlite=/path/to/lib/.

Не могу не отметить, что SqLite проходит целую серию тестов, наглядно показывающих функциональность нового продукта. Тестирование проходит каждая отдельная функция. Все это позволит тебе быстрее понять принцип их работы и послужит хорошим источником готовых примеров по работе с Sqlite.

How to use it

При работе с SqLite в PHP возможны два принципиально различных подхода. Первый подразумевает использование объектно-ориентированного интерфейса, когда указатель на открытую базу данных является объектом с несколькими стандартными методами. Второй способ – классический, процедурный. Используются несколько предопределенных стандартных функций, которые по своей работе идентичны функциям работы с любым sql-сервером. Более того, переход к SqLite потребует от программиста только лишь изменения префикса в названиях используемых функций с mySQL/../etc на SqLite. Но такое сходство, как и следовало ожидать, чисто внешнее. Отличий куда больше - собственно, у этих СУБД принципиально разные движки. Например, в отличие от других БД, в SqLite отсутствует явная типизация данных. Вся информация сохраняется в виде строк, оканчивающихся символом NULL. Однако, следуя стандарту SQL92, на этом этапе SqLite поддерживает типизацию данных в create-запросах. В таком предложении каждому полю можно легко указать тип: FLOAT, INT или, к примеру, CHAR. Однако реально информация о типе данных использоваться не будет: внутри базы SqLite различает только текстовый тип и строковый, что сказывается лишь на результатах сортировки. Сортировка из-за такого подхода несколько замедлена, ведь SqLite вынуждена каждый раз определять тип данных и применять либо строковую логику сравнения, либо логику, характерную для действительных чисел.

В SqLite реализована целая куча дополнительных фишек, расширяющих функциональность по сравнению с той же mySQL. Прежде всего нужно отметить возможность выполнения вложенных запросов, что позволяет в одном сеансе использовать сведения, выбираемые другими предложениями. Структура такого запроса рекурсивна, то есть представляет собой классическое дерево. Его обработка является очень простой классической рекурсивной задачей. Поэтому мне непонятно, почему разработчики mySQL до сих пор не решаются включить поддержку вложенных запросов в эту СУБД, но это уже их проблемы. Создатель Sqlite в первую же версию своего продукта включил использование вложенных запросов, тем самым снизив количество используемых PHP-функций и увеличив в конечном итоге производительность сценариев. Это имеет значимую роль во время выполнения большого количества запросов к базе.

Назад на стр. 069-126-1  Содержание  Вперед на стр. 069-126-3