При использовании Doctrine ORM время ответа веб-сайта 450 мс будет медленным для пользователей? - PullRequest
1 голос
/ 07 августа 2011

Подготовка к запуску новой платформы, которая опирается исключительно на запросы к БД.

Самая тяжелая страница, которую видят пользователи первой страницы, обрабатывает множество запросов, некоторые чуть более сложные запросы.У меня есть "Newsfeed", который является более тяжелым запросом:

$friends = User::getLogged()->Friends->getPrimaryKeys() ;
$friends[] = User::getLogged()->id ;
$query = $this->createQuery('o')->addSelect('o.*')
->leftJoin('o.Creator u')->leftJoin('u.Avatarimage av')->addSelect('u.*, av.*')->addSelect('u.id, av.*, u.display_name AS creators_display_name')
    ->leftJoin('u.Profiletype t')
    ->leftJoin('t.ProfiletypeTranslation tm WITH tm.translation_id=?', Translation::getForVisitor()->id)->addSelect('tm.name AS creators_profiletype_name')
  // for type: NEW_IMAGES_IN_ALBUM
 ->leftJoin('o.NewImagesInAlbum i WITH i.album_id=o.album_id')->addSelect('i.id, i.filename, i.width, i.height') 
    ->leftJoin('o.Album a')->addSelect('a.id, a.name AS album_name')
// for type: NEW_CASTING 
->leftJoin('o.Casting s')
    ->addSelect('s.*, s.title AS castings_title')
// for type: NEW_COMMENT_ON_IMAGE               
->leftJoin('o.Comment c')
    ->leftJoin('c.User u1')->addSelect('c.*, u1.display_name AS receivers_display_name')
    ->leftJoin('c.Image i2')
    ->leftJoin('i2.Album a2')->addSelect('a2.name AS album_of_commented_image')
// for type: NEW_FRIENDSHIP
->leftJoin('o.NewFriends nf')
    ->leftJoin('nf.Avatarimage nfav')
    ->addSelect('nf.*, nfav.*')
->orderBy('created_at DESC')
->whereIn('o.creator_id', $friends)
->andWhereIn('o.type', array
    (
        Activity::NEW_IMAGES_IN_ALBUM, 
        Activity::NEW_PROFILE_STATUS, 
//                  Activity::NEW_COMMENT_ON_USER, 
        Activity::NEW_COMMENT_ON_IMAGE, 
        Activity::NEW_CASTING, 
        Activity::NEW_FRIENDSHIP, 
        Activity::NEW_AVATAR
    )
    )
//              ->where('type=?', 1)
//              ->groupBy('o.id')
->limit(20) ;
return $query->execute() ;

Это самый большой запрос на странице, есть еще один большой запрос для поиска уведомлений и 3 других небольших запроса для поиска сообщений и т. Д..

Мне кажется, что страница загружается мгновенно, но при использовании Chrome Chrome показывает 452 мс ожидания (процессор обрабатывает все мои чертовы файлы класса), а затем еще 200 мс для доставки / загрузки всего, так что в общей сложности это 650 мсчтобы показать все.

В мире взаимодействия с пользователями и социальных сетей, будет ли это замедляться для пользователей?Нужно ли пытаться оптимизировать еще больше?Я использую двойной шестиядерный Xeon 2,4 ГГц (всего 12 ядер).Возможно, мне придется перейти на еще более быстрый, чтобы обрабатывать всех пользователей и сократить время, необходимое PHP для загрузки всех файлов классов.

Что вы думаете о 450ms с Doctrine?

1 Ответ

1 голос
/ 07 августа 2011

Беглый взгляд на ваши запросы показывает, что вы используете select * практически для каждого запроса, который не помогает серверу базы данных с производительностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...