FuelPHP ORM. Течет память при создании модели.

keltanas

marty cats
Фанат, например, в той же Doctrine, если тебя не устраивает автоматически сгенерированный запрос, то можешь подснуть ей свой, и, конечно, при определенной степени адекватности этого запроса она преобразует его результат в объекты.
http://odiszapc.ru/doctrine/dql-doctrine-query-language/

Траблы с кешем, которые возникли скорее являются последствием реализации IdentityMap. Если это становится проблемой, то резонно обрабатывать данные пачками ограниченного размера и чистить кеш этой IM, после обработки каждой пачки.
Что ты и сделал.
 
Последнее редактирование:

С.

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

Absinthe

жожо
Орм - говно для криворуких пользователей, нужное чтобы их код не выглядел совсем уж адом.
Ага, для криворуких орм говно. А для людей с правильным радиусом кривизны помогает экономить время.
Идеи использовать другую реализацию или добавить памяти не было? :)
 

Фанат

oncle terrible
Команда форума
Ага, для криворуких орм говно. А для людей с правильным радиусом кривизны помогает экономить время.
Идеи использовать другую реализацию или добавить памяти не было? :)
Нет, не было.
Я не настолько тупой, чтобы рассматривать ту или другую.

Если посмотреть на вопрос, там написано:
Сет очень большой, гиг памяти выедается очень быстро.
Что означает бессмысленность метода с увеличением памяти.
Очень быстро - это не на половине или десятой части сета, а на первых процентах. И не 128М, а гиг
Впрочем, сама по себе идёя решать проблемы кривого кода добавлением памяти - очень так себе и сама по себе, вне контекста.

Что имеется в виду под "другой реализацией" - я не очень в курсе, но если это предложение взять, и все переписать под другой фреймворк - то это предложение как-то даже еще хуже чем предыдущее.
 
Последнее редактирование:

Absinthe

жожо
Однажды видет пьяного русского: все русские пьяницы.
Однажды меня обманул друг: все друзья уроды.
Однажды мент не взял взятку: все менты добропорядочные.
Однажды заюзал кривой ORM: Орм - говно для криворуких пользователей.

Я не настолько тупой, чтобы рассматривать ту или другую.
Нужно больше ненависти!
Для начала лучше прекрати делать выводы от частного к общему.
 

fixxxer

К.О.
Партнер клуба
Данная проблема с кэшем уж точно не имеет никакого отношения к ORM. :)

Кстати, вот это
PHP:
foreach ($set as $id)
{
    $user = Model_Users::find($id);
    $user = NULL;
}
в нормальной ORM было бы как-то так:

PHP:
Model_Users::whereIn('id', $set)->chunk(100, function(Collection $users) { 
...
});
ну или вручную побить $set на чанки, если для одного запроса с IN() слишком жирно. Еще, кстати, вопрос, откуда взялся $set - может быть, эффективнее бы было заджойнить.

Absinthe, ну решения проблемы-то ты предложил негодные.
 

Фанат

oncle terrible
Команда форума
Данная проблема с кэшем уж точно не имеет никакого отношения к ORM. :)
Ещё как имеет.
Во-первых, каждый ОРМ - это коллекция тараканов его автора. У этого - кэширование всего что движется.
Во-вторых, вот в этом "эффективнее бы было заджойнить" и вся суть моих претензий. Эффективнее было бы. Я разве спорю? Я выше и написал, что в другом месте плюнул и сделал тупо джойн.
Но сама идиология ОРМа рассказывает мне, что джойн не нужен.

ну или вручную побить $set на чанки
Кость. Я ж это ж и сделал. Побил на чанки по одному юзеру. Беда в том что 3 тыщи юзеров выжирали гиг памяти. При том что в каждый момент времени я, как честный пионер, работал строго с одним.
 
Последнее редактирование:

флоппик

promotor fidei
Команда форума
Партнер клуба
Но сама идиология ОРМа рассказывает мне, что джойн не нужен.
Давайте плиз, актив рекорд называть актив рекордом, а не ОРМ. ОРМ - гораздо более общий термин, нежели конкретно тот подход (хоть и очень частый во фреймворках) к реализации, что тебе не нравится.
 

fixxxer

К.О.
Партнер клуба
Запрос вида where exists / where in(subquery), кстати, прекрасно ложится на ActiveRecord. Тот же ларавеловский Eloquent это умеет. Современные версии mysql (ну, как минимум, mariadb) такие запросы уже хорошо оптимизируют. Джойн, впрочем, тоже можно уложить, но тут уже понадобятся дополнительные телодвижения, чтобы привести результат запроса к ожидаемому.
 

fixxxer

К.О.
Партнер клуба
Фанат, ну, если почем зря не обобщать - можно из этого сделать вывод, что реализация ActiveRecord в fuel имеет ряд проблем. Ибо в остальном, заменив пару слов, можно аргументировать, что все фреймворки - говно. :)
 

fixxxer

К.О.
Партнер клуба
Во-первых, каждый ОРМ - это коллекция тараканов его автора. У этого - кэширование всего что движется.
Вообще идея кэширования в целом правильная, но в php нормальный (самоочищающийся) кэш такого рода фиг сделаешь из-за отсутствия weak references.
RFC, кстати, был, и даже вместе с патчем - так что вот тут в правой колоночке список виновных в проблеме ;)
 
Сверху