Symfony2 производительность

pilot911

Новичок
Есть какие-то жалобы при больших объемах данных?

Я занимаюсь глубоким изучением СФ и склоняюсь к тому, что на больших объемах - порядка сотни тысяч записей в таблицах, СФ с Доктриной лягут напрочь.
 

confguru

ExAdmin
Команда форума
C вероятностью 99%.
Я бы оставил бы ее только для админки - если сильно нужно.
 

atv

Новичок
Так симфони к записям в таблице как-бы и не причём, а доктрина просто возвращает то, что отдала база, сама доктрина сотнями тысяч записей не занимается. По моему, ты не там подвохи ищешь.
 

magic

lancer
Все зависит от архитектуры приложения. CDN до лампочки, сколько времени генерировался контент, а маленький сервер с 256 Мб памяти, апачем и БД просто ляжет при небольших нагрузках. Я бы выбирал фреймворк или ORM в зависимости от задачи, наявных ресрсов, удобства разработки и дальнейшей расширяемости.
 

itprog

Cruftsman
порядка сотни тысяч записей в таблицах,
До тех пор, пока не надо выбирать сотни объектов, никаких проблем не будет.
Остальное решается оптимизацией запросов, обычным кэшированием или ESI.
 

AmdY

Пью пиво
Команда форума
pilot911
а почему должна просесть именно из-за доктрины? это как раз нормальное место и даже на миллионе записей работает. (сам не видел, но знаю живых людей)
 

pilot911

Новичок
pilot911
а почему должна просесть именно из-за доктрины? это как раз нормальное место и даже на миллионе записей работает. (сам не видел, но знаю живых людей)
наткнулся в рассылке по доктрине2 на проблему последовательной вставки 100 000 связанных записей:

PHP:
foreach( $countries as $country_key => $country_value )
{
    $country = new Country();
    
    $country->setIdOld( $country_key );
    $country->setName( $country_value );
    
    foreach( $provinces[ $country_key ] as $province_key => $province_value )
    {
        $province = new Province();
        
        $province->setIdOld( $province_key );
        $province->setName( $province_value );
        
        foreach( $cities[ $province_key ] as $city_key => $city_value )
        {
            $city = new City();
            
            $city->setIdOld( $city_key );
            $city->setName( $city_value );
            
            $province->addCity( $city );
        }
        
        $country->addProvince( $province );
    }
    
    $dm->persist( $country );
    $dm->flush();
    $dm->clear();
}

так вот - система умирает из-за утечек памяти и сколько еще таких глючных мест в связке сф+д2- сказать сложно
 

Вурдалак

Продвинутый новичок
Ну так для таких эпичных моментов нужно использовать обычный SQL, зачем тут ORM вообще?
 

Krishna

Продался Java
pilot911
Ты хочешь в памяти создать 100.000 объектов PHP, чтобы потом разом их махнуть в базу? А в том, что памяти при этом разумеется не хватает, виновата Доктрина?
Ну, если у тебя то же самое получится без доктрины, то уже, думается, орден можно будет требовать....
 
  • Like
Реакции: atv

pilot911

Новичок
pilot911
Ты хочешь в памяти создать 100.000 объектов PHP, чтобы потом разом их махнуть в базу? А в том, что памяти при этом разумеется не хватает, виновата Доктрина?
Ну, если у тебя то же самое получится без доктрины, то уже, думается, орден можно будет требовать....
доктрина виновата в кривой очистке памяти
вышеприведенный алгоритм не требует огромных расходов памяти, все, что ему нужно от Доктрины - создать три объекта и их сохранить, затем память освободить

так что вопрос актуальный - пока на Доктрину в проектах с большими датасетами полагаться не стоит
 

A1x

Новичок
так что вопрос актуальный - пока на Доктрину в проектах с большими датасетами полагаться не стоит
открыл Америку. Если надо допустим перелопатить целую большую таблицу данных всегда надо принимать во внимание что в ORM возможны утечки памяти
Поэтому в таких случаях часто приходится писать запросы ручками
 

atv

Новичок
Поэтому в таких случаях часто приходится писать запросы ручками
Хотя находятся чудаки (вроде меня), которые пишут свою ОРМ :D. Именно проблема с памятью и необходимость обрабатывать большие объёмы данных (а также желание решить интересную проблему) подтолкнула написать свою ОРМ :)
 
Сверху