Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-2043

Extra cache operation in DBAL\Cache\ResultCacheStatement.php

    Details

    • Type: Improvement Improvement
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 2.3
    • Fix Version/s: None
    • Component/s: ORM
    • Security Level: All
    • Labels:
      None
    • Environment:
      CentOS, PHP 5.3.10

      Description

      This is the closeCursor() method in DBAL\Cache\ResultCacheStatement.php:

      public function closeCursor()
          {
              $this->statement->closeCursor();
              if ($this->emptied && $this->data !== null) {
                  $data = $this->resultCache->fetch($this->cacheKey);
                  if ( ! $data) {
                      $data = array();
                  }
                  $data[$this->realKey] = $this->data;
      
                  $this->resultCache->save($this->cacheKey, $data, $this->lifetime);
                  unset($this->data);
              }
          }
      

      We are using Memcache and I noticed an extra GET operation on all cache misses. In the code above I believe the fetch call is not necessary and that the code would do the same without it.
      Also, may I ask why is the SQL used as a key in the cached data?

        Activity

        Bogdan Albei created issue -
        Bogdan Albei made changes -
        Field Original Value New Value
        Description This is the closeCursor() method in DBAL\Cache\ResultCacheStatement.php:
        public function closeCursor()
            {
                $this->statement->closeCursor();
                if ($this->emptied && $this->data !== null) {
                    $data = $this->resultCache->fetch($this->cacheKey);
                    if ( ! $data) {
                        $data = array();
                    }
                    $data[$this->realKey] = $this->data;

                    $this->resultCache->save($this->cacheKey, $data, $this->lifetime);
                    unset($this->data);
                }
            }

        We are using Memcache and I noticed an extra GET operation on all cache misses. In the code above I believe the fetch call is not necessary and that the code would do the same without it.

        The following should perform the same function:
        public function closeCursor()
            {
                $this->statement->closeCursor();
                if ($this->emptied && $this->data !== null) {
                    $data = array();
                    $data[$this->realKey] = $this->data;

                    $this->resultCache->save($this->cacheKey, $data, $this->lifetime);
                    unset($this->data);
                }
            }
        This is the closeCursor() method in DBAL\Cache\ResultCacheStatement.php:
        <pre>
        public function closeCursor()
            {
                $this->statement->closeCursor();
                if ($this->emptied && $this->data !== null) {
                    $data = $this->resultCache->fetch($this->cacheKey);
                    if ( ! $data) {
                        $data = array();
                    }
                    $data[$this->realKey] = $this->data;

                    $this->resultCache->save($this->cacheKey, $data, $this->lifetime);
                    unset($this->data);
                }
            }
        </pre>
        We are using Memcache and I noticed an extra GET operation on all cache misses. In the code above I believe the fetch call is not necessary and that the code would do the same without it.

        The following should perform the same function:
        <pre>
        public function closeCursor()
            {
                $this->statement->closeCursor();
                if ($this->emptied && $this->data !== null) {
                    $data = array();
                    $data[$this->realKey] = $this->data;

                    $this->resultCache->save($this->cacheKey, $data, $this->lifetime);
                    unset($this->data);
                }
            }
        </pre>
        Bogdan Albei made changes -
        Description This is the closeCursor() method in DBAL\Cache\ResultCacheStatement.php:
        <pre>
        public function closeCursor()
            {
                $this->statement->closeCursor();
                if ($this->emptied && $this->data !== null) {
                    $data = $this->resultCache->fetch($this->cacheKey);
                    if ( ! $data) {
                        $data = array();
                    }
                    $data[$this->realKey] = $this->data;

                    $this->resultCache->save($this->cacheKey, $data, $this->lifetime);
                    unset($this->data);
                }
            }
        </pre>
        We are using Memcache and I noticed an extra GET operation on all cache misses. In the code above I believe the fetch call is not necessary and that the code would do the same without it.

        The following should perform the same function:
        <pre>
        public function closeCursor()
            {
                $this->statement->closeCursor();
                if ($this->emptied && $this->data !== null) {
                    $data = array();
                    $data[$this->realKey] = $this->data;

                    $this->resultCache->save($this->cacheKey, $data, $this->lifetime);
                    unset($this->data);
                }
            }
        </pre>
        This is the closeCursor() method in DBAL\Cache\ResultCacheStatement.php:

        public function closeCursor()
            {
                $this->statement->closeCursor();
                if ($this->emptied && $this->data !== null) {
                    $data = $this->resultCache->fetch($this->cacheKey);
                    if ( ! $data) {
                        $data = array();
                    }
                    $data[$this->realKey] = $this->data;

                    $this->resultCache->save($this->cacheKey, $data, $this->lifetime);
                    unset($this->data);
                }
            }

        We are using Memcache and I noticed an extra GET operation on all cache misses. In the code above I believe the fetch call is not necessary and that the code would do the same without it.
        Christophe Coevoet made changes -
        Description This is the closeCursor() method in DBAL\Cache\ResultCacheStatement.php:

        public function closeCursor()
            {
                $this->statement->closeCursor();
                if ($this->emptied && $this->data !== null) {
                    $data = $this->resultCache->fetch($this->cacheKey);
                    if ( ! $data) {
                        $data = array();
                    }
                    $data[$this->realKey] = $this->data;

                    $this->resultCache->save($this->cacheKey, $data, $this->lifetime);
                    unset($this->data);
                }
            }

        We are using Memcache and I noticed an extra GET operation on all cache misses. In the code above I believe the fetch call is not necessary and that the code would do the same without it.
        This is the closeCursor() method in DBAL\Cache\ResultCacheStatement.php:

        {code}
        public function closeCursor()
            {
                $this->statement->closeCursor();
                if ($this->emptied && $this->data !== null) {
                    $data = $this->resultCache->fetch($this->cacheKey);
                    if ( ! $data) {
                        $data = array();
                    }
                    $data[$this->realKey] = $this->data;

                    $this->resultCache->save($this->cacheKey, $data, $this->lifetime);
                    unset($this->data);
                }
            }
        {code}

        We are using Memcache and I noticed an extra GET operation on all cache misses. In the code above I believe the fetch call is not necessary and that the code would do the same without it.
        Bogdan Albei made changes -
        Description This is the closeCursor() method in DBAL\Cache\ResultCacheStatement.php:

        {code}
        public function closeCursor()
            {
                $this->statement->closeCursor();
                if ($this->emptied && $this->data !== null) {
                    $data = $this->resultCache->fetch($this->cacheKey);
                    if ( ! $data) {
                        $data = array();
                    }
                    $data[$this->realKey] = $this->data;

                    $this->resultCache->save($this->cacheKey, $data, $this->lifetime);
                    unset($this->data);
                }
            }
        {code}

        We are using Memcache and I noticed an extra GET operation on all cache misses. In the code above I believe the fetch call is not necessary and that the code would do the same without it.
        This is the closeCursor() method in DBAL\Cache\ResultCacheStatement.php:

        {code}
        public function closeCursor()
            {
                $this->statement->closeCursor();
                if ($this->emptied && $this->data !== null) {
                    $data = $this->resultCache->fetch($this->cacheKey);
                    if ( ! $data) {
                        $data = array();
                    }
                    $data[$this->realKey] = $this->data;

                    $this->resultCache->save($this->cacheKey, $data, $this->lifetime);
                    unset($this->data);
                }
            }
        {code}

        We are using Memcache and I noticed an extra GET operation on all cache misses. In the code above I believe the fetch call is not necessary and that the code would do the same without it.
        Also, may I ask why is the SQL used as a key in the cached data?

          People

          • Assignee:
            Benjamin Eberlei
            Reporter:
            Bogdan Albei
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated: