Resim yükleme depolama stratejileri

4 Cevap php

Bir kullanıcı siteme bir görüntü yüklediğinde, görüntü bu süreçte geçer;

  • kullanıcı yüklenenler pic
  • Görüntüyü benzersiz bir kimliği vererek db mağaza pic meta,
  • uyumsuz görüntü işleme (küçük resim oluşturma, kırpma, vb)
  • tüm görüntüler aynı yüklenenler klasöründe saklanır

Şimdiye kadar sitesi oldukça küçük, ve yüklemeler dizinde sadece ~ 200.000 görüntüleri vardır. Ben bir dizinin içindeki dosyaları fiziksel sınırına yakın yerde olduğumu anladım, ama bu yaklaşım açıkça ölçek değil, bu yüzden herkes görüntü yüklenenler büyük hacimlere için yükleme / depolama stratejileri üzerinde herhangi bir tavsiye vardı merak ediyordum.

EDIT: Creating username (or more specifically, userid) subfolders would seem to be a good solution. With a bit more digging, I've found some great info right here; http://stackoverflow.com/questions/191845/how-to-store-images-in-your-filesystem
However, would this userid dir approach scale well if a CDN is bought into the equation?

4 Cevap

Ben daha önce benzer bir soruyu yanıtladı ettik ama belki OP sorusunu silinmiş, bulamıyorum ...

Neyse, Adams solution kadar iyi gibi görünüyor, ama o zamandan beri kurşun geçirmez değil images/c/cf/ (ya da diğer herhangi bir dizin / altdiz çifti) could still contain up to 16^30 unique hashes ve en az Biz görüntü uzantıları sayarsan 3 kat daha fazla dosya, herhangi bir normal dosya sistemi daha çok işleyebilir.

AFAIK, SourceForge.net de ancak onlar 8 karakter proje isimleri sınırlamak inanıyorum, örneğin "fatfree" project projects/f/fa/fatfree/ yer olacağını, proje depoları için bu sistemi kullanır.


Ben görüntü işleme / yüklendiği zaman gösteren bir DATE / DATETIME / TIMESTAMP alanıyla birlikte veritabanında görüntü karma depolamak ve daha sonra görüntüyü koyardınız Böyle bir yapı:

images/
  2010/                                      - Year
    04/                                      - Month
      19/                                    - Day
        231c2ee287d639adda1cdb44c189ae93.png - Image Hash

Veya:

images/
  2010/                                    - Year
    0419/                                  - Month & Day (12 * 31 = 372)
      231c2ee287d639adda1cdb44c189ae93.png - Image Hash

Daha açıklayıcı olmasının yanı sıra, bu yapının host hundreds of thousands (dosya sistemi sınırları bağlı) of images per day for several thousand years, bu Wordpress ve diğerleri bunu yoludur yeterli, ve ben onlar doğru buldum bu bir.

Çoğaltılamaz görüntüleri kolayca veritabanı sorgulanan olabilir ve sadece sembolik oluşturmak gerekiyor.

Bu sizin için yeterli değilse tabii ki, her zaman daha fazla subdirs (saat, dakika, ...) ekleyebilir.

Eğer veritabanında bulunan bu bilgi yok olmadıkça Şahsen ben, kullanıcı kimlikleri kullanmak olmaz çünkü:

  1. URL adlarının açıklanması
  2. Kullanıcı adları (hala klasörleri yeniden adlandırmak mümkün olabilir, ancak ...) uçucu
  3. Bir kullanıcı varsayımsal görüntüleri sayıda yükleyebilirsiniz
  4. Hiçbir amaca hizmet (?)

CDN ilgili olarak ben bu düzeni (veya başka) işe yaramaz herhangi bir neden görmüyorum ...

MediaWiki yüklenen dosyanın adının MD5 toplamını üretir, ve bu dizin yapısını oluşturmak için (diyelim "c" ve toplamı "cf1e66b77918167a6b6b972c12b1c00d" nin "f") MD5 ilk iki harfini kullanır:

images/c/cf/Whatever_filename.png

Ayrıca dizin başına dosya sayısına öngörülebilir bir üst limit için görüntü kimliğini kullanabilirsiniz. Belki dizinde 1000 görüntüler için, floor(image unique ID / 1000) üst dizini belirlemek için alır.

Eğer dosyaları depolamak için Amazon S3 gibi bir şey kullanarak düşündünüz mü? Ben bir fotoğraf hosting şirketi çalıştırmak ve hızlı bir şekilde kendi sunucusunda sınırları ulaştıktan sonra, biz AmazonS3 üzerinden geçti. S3 güzelliği inode'lar ve ne değildir gibi bir sınırı vardır ki, sadece ona dosyalarını atma tutmak.

Ayrıca: S3 beğenmezseniz, her zaman denemek ve kadar olabildiğince alt klasörler içine yıkmak olabilir:

/ Kimliği / yıl / ay / gün / photoid.jpg

Eğer ne yaptığınızı için mükemmel gibi açık kaynak http://danga.com/mogilefs/ düşünebilirsiniz. Bu ad alanları için klasörler düşünmekten sizi (kullanıcılar olabilir) ve sizin için size görüntüleri depolamak izin vereceğim. En iyi yanı, verilerin depolandığı nasıl bakım zorunda kalmamasıdır. Bu tamamen gereksiz hale getirir ve hatta gereksiz minik de ne kadar etrafında kontrolleri ayarlayabilirsiniz.