Самый быстрый способ сохранить просмотры страниц в базе данных с доктриной - PullRequest
0 голосов
/ 13 ноября 2018

Используя Symfony 4 с доктриной, я хочу сохранить просмотры страниц для одной сущности Program в базе данных. Я хочу сохранить это в базе данных, потому что я хочу дать некоторым пользователям права на просмотр этих чисел. Что я сделал, так это добавил свойство к сущности следующим образом:

Program.php

/**
 * @ORM\Column(type="integer", nullable=true)
 */
private $pageViews;

/**
 * @return mixed
 */
public function getPageViews()
{
    return $this->pageViews;
}

/**
 * @param mixed $pageViews
 */
public function setPageViews($pageViews)
{
    $this->pageViews = $pageViews;
}

А в моем ProgramController.php в функции showProgram

//...
$program->setPageViews($program->getPageViews()+1);
$em->persist($program);
$em->flush();

Это работает и добавляет 1 к существующему номеру каждый раз, когда страница обновляется. У меня вопрос, это приемлемый метод или есть более быстрые / лучшие альтернативы? И это замедляет производительность или это незначительно?

1 Ответ

0 голосов
/ 13 ноября 2018

Поскольку объект на самом деле вам не нужен, вы можете напрямую сделать это с SQL, используя соединение Doctrine:

$connection = $this->getDoctrine()->getConnection();
$connection->executeUpdate('UPDATE page_view_counter SET page_view = page_view+1;');

или используя предварительно подготовленный оператор:

$connection = $this->getDoctrine()->getConnection();
$statement = $connection->prepare(
    'UPDATE programs SET page_views = page_views + 1 WHERE programs.id = :id'
);
$statement->bindValue('id', $id);
$statement->execute();

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

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

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