2010-04-22 20 views
5

Hệ thống bộ nhớ cache của symfony có xử lý ext2 32000 tệp trong cùng một giới hạn thư mục không?Hệ thống tệp bộ nhớ cache của symfony có xử lý các tệp ext2 32000 trong cùng một giới hạn thư mục không?

Tôi có 80000 người dùng và tôi muốn lưu hồ sơ của họ nhưng hệ thống cache của symfony có hạn chế ext2 không?

Tôi cũng đang đăng bài cho những người khác sẽ phải đối mặt với cùng một vấn đề.

Trả lời

1

Tôi không chắc chắn 100% câu trả lời có đúng hay không nhưng trong PROJECT/lib/symfony/cache/sfCacheFile.class.php có một phương thức: sfCacheFile::getFilePath() trả về đường dẫn đến tệp. Dường như không có bất kỳ sự bảo vệ nào chống lại các giới hạn của hệ thống tệp ext2.

Nhưng có một giải pháp rất đơn giản - ghi đè lên lớp rằng:

  1. Trong PROJECT/apps/APP/config/factories.yml thiết lập lớp bộ nhớ cache của riêng bạn:

    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. Bây giờ, tạo lớp đó và chắc chắn rằng nó kéo dài sfFileCache và ghi đè 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. Xóa bộ nhớ đệm: ./symfony cc

Bây giờ bạn cần 32000 phím bộ nhớ cache mà bắt đầu với chính xác cùng hai chữ cái/chữ số để đè bẹp hệ thống tập tin của bạn.

+0

Đó là ý tưởng; D cảm ơn – belaz

Các vấn đề liên quan