Кэширование ORM в Kohana

Потратил много времени на обнаружение неочевидной особенности поведения системы кэширования объектов, получаемых из базы с использованием встроенной системы ORM Kohana в случае, если в свойствах модели не указано явно название таблицы, ей соответствующей.

Если вы инициализируете значение $_table_name ORM-модели в ее конструкторе (как в примере ниже):

class Model_Foo extends ORM
{
protected $_db = 'default';
protected $_primary_key = 'id';
protected $_primary_val = 'name';
...
public function __construct($id = NULL)
{
$this->_table_name = 'foo_table';
...
parent::__construct($id);
}
...
}
 
 

, то при попытке загрузить закэшированные данные с помощью конструкции вида:

   $foos = ORM::factory('foo')->cached(7200)->find_all();
 
 

вы получите, увы, вовсе не закэшированный результат, а вполне себе актуальные данные (которые, конечно же, будут получены ценой запроса к БД, которого вы хотели избежать)

Такое поведение Kohana обусловлено тем, что при чтении объекта из кэша и его последующей корректной десериализации подгружается файл с описанием класса вашей модели Model_Foo, однако его конструктор не вызывается и, соответственно, имя таблицы не инициализируется. Так как поля таблицы в модели не описаны, Kohana пытается загрузить список полей из таблицы, соответствующей названию модели в множественном числе - для примера выше это `foos`. Если такой таблицы в базе данных не находится, то генерируется исключение, которое интерпретируется системой кэширования как признак поврежденого кэша и обрабатывается втихую - возвращая NULL вместо данных. В результате данные загружаются каждый раз из базы данных, несмотря на то, что присутствуют в кэше.

Таким образом, явное указание $_table_name необходимо в тех моделях, выборки для которых вы хотите хранить в кэше и успешно доставать оттуда же.

Хочу особенно отметить, что при загрузке и десериализации объекта из кэша Kohana для него не вызывается автоматически конструктор. Это необходимо учитывать и инициализировать свойства (которые при обычной загрузке устанавливаются в конструкторе) при обращении к методам загруженного из кэша объекта, если они (методы) эти свойства используют.

 
Почты псто

>ping почта.рф

Обмен пакетами с почта.рф [91.215.36.43] с 32 байтами данных:
Мужчина, вы что не видите, что у нас обед.
Мужчина, вы что не видите, что у нас обед.
Мужчина, вы что не видите, что у нас обед.
Мужчина, вы что не видите, что у нас обед.

Статистика Ping для 91.215.36.43:
      Пакетов: отправлено = 4, получено = 0, потеряно = 4
      (100% Обед)

via

 
Сортировочные танцы

Только что нашел в своей кучке ссылок по названием "Read it later" ссылку на канал отличных музыкально-танцевальных визуализаций различных алгоритмов сортировки. Жалко, что пока на нем всего представлены не все алгоритмы и не все народные танцы европейских народов. Будем надеяться, что на канале появятся и другие разновидности сортировки. Особенно интересно посмотреть, как долго будут продолжаться самые неэффективные ) Ну а пока можно посмотреть те, что уже есть на этот момент:

 

Пузырьковая сортировка:

 

Быстрая сортировка:

 

Сортировка слиянием:

 
Эх!

Компьютеры, серверы, соцсети, скрипты, CMSки, фреймворки, паттерны... После тысяч строк написанного кода неизбежно возникает желание написать одну-единственную строчку, понятную всем, а не только компьютерам )

Жизнь так устроена, что если качественно позагонять, рано или поздно наступает момент прозрения и происходит что-то совсем новое, ни на что не похожее.

 
Веселые баги

Нашел на лурке довольно специфическое видео, которым не могу здесь не поделиться:

К слову, в настоящее время моя работа состоит чуть менее, чем полностью из задач по удалению багов на сайте Живой Кубани. Медленно, но верно направляем сайт на путь истинный :)

 
<< В начало < Предыдущая 1 2 3 4 5 6 7 8 9 10 Следующая > В конец >>

Всего 1 - 5 из 62