代码之家  ›  专栏  ›  技术社区  ›  Dirk J. Faber

用条令在数据库中保存页面视图的最快方法

  •  0
  • Dirk J. Faber  · 技术社区  · 6 年前

    Program 在数据库里。我想把这个保存到数据库,因为我想给一些用户查看这些号码的权限。我所做的是向实体添加一个属性,如下所示:

    /**
     * @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;
    }
    

    在我的心里 程序控制器.php showProgram

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   dbrumann    6 年前

    因为您不需要实体,所以可以直接使用SQL,使用条令的连接:

    $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中一些您不需要的更复杂的特性,这会加快速度。

    另一种加快速度的方法是切换技术,比如将数据存储在像redis这样的缓存中。这是否真的会提高性能(特别是在较重的负载下)需要使用一些测量工具(如JMeter)进行验证。