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

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

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

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


Получать результаты запросов можно и другим способом:

Получение результата запроса

<?php

$db = new sqlite_db("lite.db");

$res = $db-> unbuffered_query("SELECT * FROM blah");

foreach ($res as $r) {

echo "$r[0] $r[1]\n";

}

?>

В принципе, такой метод абсолютно аналогичен классическому. Принципиальных отличий нет, однако, в рассматриваемом случае значительно повышена производительность. За счет чего? Давай подумаем. Очевидно, что любой прирост производительности достигается лишь тогда, когда обрабатывается меньшее количество информации. В данном случае ты как программист лишаешься инструмента - внутри цикла у тебя нет доступа к ключам, поскольку данные не прохэшированы в памяти. Такая схема получения информации сильно экономит ресурсы и работает значительно быстрее, чем sqlite_fetch_*(), поэтому я советую тебе ее использовать.

Также расширение SqLite предоставляет чрезвычайно интересную возможность создания своих собственных функций, используемых в пределах sql-запроса. Довольно странно, не так ли? Как это стало возможным? Напомню тебе, что SqLite в одной-единственной библиотеке, из которой парсер PHP импортирует некоторые функции, содержит как интерфейс, так и сам движок БД. За счет этого достигается возможность расширения стандартного API. Для этого даже есть специальная функция sqlite_create_function(), при помощи которой можно легко создавать собственные процедуры, которые в дальнейшем будут использованы внутри какого-то sql-запроса. Давай рассмотрим простейший пример:

Создаем собственную sql-функцию

<?

function user_f($dbstr, $str) {

return $dbstr."-".$str;

}

$db = new sqlite_db("lite.db");

$db-> create_function('user_f', 'user_f', 2);

$r = $db-> array_query("SELECT name, user_f(name, 'пацан!') FROM blah", SQLITE_ASSOC);

print_r($r);

?>

Здесь мы описали элементарную, маразматичную по сути функцию user_f, которую использовали при выполнении запроса. Эта возможность, несмотря на нелепость примера, позволяет заметно упростить даже такой элементарный скрипт.

Кстати, при таком подходе можно использовать сам парсер PHP в качестве движка шаблонов. Он будет вставлять в HTML-код данные из таблицы, что вообще может свести на нет необходимость использования дополнительного движка шаблонов. Само собой, это еще и довольно производительное решение: в пользовательском пространстве не совершается никаких действий с данными.

Results

Приятель, мы только что разобрались с новым инструментом, поздравляю! Ты уже понял, что SqLite – офигительно функциональное решение и эта БД может легко поспорить с mySQL, по крайней мере, для использования в небольших некоммерческих проектах. В любом случае, этот продукт достоин самого пристального внимания со стороны любого web-разработчика. Разумеется, как и любой инструмент, SqLite имеет свои сильные и слабые стороны. Для небольших систем, рассчитанных, прежде всего, на получение данных из таблиц, это своего рода панацея от всех бед, идеальное решение. Удачи в экспериментах!

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