Обрабатывает ли файловая система кэша Symfony файлы ext2 32000 в одном и том же ограничении каталога? - PullRequest
5 голосов
/ 22 апреля 2010

Обрабатывает ли кеш-система Symfony файлы ext2 32000 в одном и том же ограничении каталога?

У меня 80000 пользователей, и я хочу кэшировать их профили, но справляется ли система кэширования Symfony с ограничением ext2?

Я также публикую сообщения для тех, кто столкнется с той же проблемой.

1 Ответ

1 голос
/ 23 апреля 2010

Я не уверен на 100%, правильный ли мой ответ, но в PROJECT/lib/symfony/cache/sfCacheFile.class.php есть метод: sfCacheFile::getFilePath(), который возвращает путь к файлу. Кажется, что нет никакой защиты от ограничений файловой системы ext2.

Но есть очень простое решение - переопределить этот класс:

  1. В PROJECT/apps/APP/config/factories.yml установите свой собственный класс кэша:

    default:
    # Others factories (if any)
    
      view_cache:
        class: myOwnFileCache
        param:
          automatic_cleaning_factor: 0
          cache_dir:                 %SF_TEMPLATE_CACHE_DIR%
          lifetime:                  86400
          prefix:                    %SF_APP_DIR%/template
    
  2. Теперь создайте этот класс и убедитесь, что он расширяет sfFileCache и переопределяет getFilePath()

    # PROJECT/lib/PROJECT/cache/myOwnFileCache.class.php        
    class myOwnFileCache extends sfFileCache {
        protected getFilePath($key) {
            /*
                Convert from: abcdef
                          to: a/b/abcdef
            */
            $key = substr($key, 0, 1) . DIRECTORY_SEPARATOR . substr($key, 1, 1) . DIRECTORY_SEPARATOR . $key;
            return parent::getFilePath($key);
        }
    

    }

  3. Очистить кеш: ./symfony cc

Теперь вам нужно 32000 ключей кэша, которые начинаются с с точно такими же двумя буквами / цифрами, чтобы разрушить вашу файловую систему.

...