Парсинг данных на CodeIgniter

Рано или поздно вы можете столкнуться с задачей когда нужно выполнить много запросов к базе данных в одном скрипте, у меня такая необходимость возникла при парсинге данных. Такой скрипт достаточно быстро остановиться с ошибкой PHP - недостаточно памяти.

Я неоднократно видел в сети необосновонную критику фреймворка, что такие утечки памяти недопустимы. Попробуем разобраться, а почему так происходит, это ошибка, или что-то еще? Если внимательно изучить документацию к фреймворку, и немного подумать, то ответ очевиден. В CodeIgniter есть встроенный механизм профилирования запросов к базе данных. Все запросы выполняемые во время исполнения приложения запоминаются фреймворком. Также запоминается время их исполнения. Нетрудно догадаться, что запомнить текст всех запросов становиться ресурсоемкой операцией, когда их количество переваливает за сотню, а в подобных приложениях их количество может исчисляться миллионами.

Для решения этой задачи предлагаю воспользоваться следующей функцией:

if (function_exists('clear_query_cache') === FALSE)
{
	function clear_query_cache($db = FALSE)
	{
		// Получим основное подключение
	
		if ($db === FALSE)
		{
			$db = get_instance()->db;
		}	
	
		// Очистим кеш запросов.
	
		foreach($db->queries as $key => $value)
		{
			unset($db->queries[$key]);
		}
		
		// Очистим кеш времени выполнения запроса.

		foreach($db->query_times as $key => $value)
		{
			unset($db->query_times[$key]);
		}		
	}
	
}

В функцию можно передать объект подключения к базе данных. Это необязательный параметр, его следует использовать только если скрипт использует собственное подключение к базе данных.

Добавление комментария

Имя*:
E-mail*:
Личный сайт:
Текст комментария*:
Проверочный код*: