Frage

Wir erstellen eine ASP.NET-MVC-Site, auf der 1 Million+ Bilder rund 2k-5k groß speichern müssen. Aus früherer Ressearch sieht es so aus, als ob ein Dateiserver wahrscheinlich besser ist als ein DB (zögern Sie nicht, es sonst zu kommentieren).

Gibt es etwas Besonderes zu berücksichtigen, wenn Sie so viele Dateien speichern? Gibt es Probleme damit, dass Windows das Foto schnell finden kann, wenn so viele Dateien in einem Ordner vorhanden sind? Muss eine segmentierte Verzeichnisstruktur erstellt werden, beispielsweise durch den Dateinamen aufzuteilen? Es wäre schön, wenn die Lösung mindestens 10 Millionen Bilder für potenzielle künftige Erweiterungsbedürfnisse skalieren würde.

War es hilfreich?

Lösung

4KB ist die Standard -Clustergröße für NTFs. Sie können diese Einstellungen abhängig von der üblichen Bildgröße einstellen.http://support.microsoft.com/kb/314878

Ich würde einen Baum mit Unterverzeichnissen bauen, um von einem FS zum anderen zu wechseln: Wie viele Dateien kann ich in ein Verzeichnis einfügen?und vermeiden Sie einige Probleme: http://www.frank4dd.com/howto/various/maxfiles-per-dir.htm

Sie können auch Archive mit zugehörigen Bildern haben, um sie mit nur einer Datei zu laden. THOSS -Archive könnten komprimiert werden, ist der Engpass ist E/A, unkomprimiert, wenn es sich um eine CPU handelt.

Ein DB ist einfacher zu pflegen, aber langsamer ... also liegt es an Ihnen!

Andere Tipps

Siehe auch Diese Server -Fehlerfrage für einige Diskussionen über Verzeichnisstrukturen.

Das Problem ist nicht, dass das Dateisystem nicht in der Lage ist, so viele Dateien in einem Verzeichnis zu speichern, aber wenn Sie mit Windows Explorer auf dieses Verzeichnis zugreifen möchten Zum Beispiel mit einem Verzeichnis pro 2-3 erster Buchstaben/Nummern des Namens oder sogar eine tiefere Struktur.

Wenn Sie dies in 1K -Ordnern mit jeweils 1K -Dateien teilen könnten, sind Sie mehr als genug und der Code, um dies zu tun, ist recht einfach.

Unter der Annahme von NTFs gibt es eine Grenze von 4 Milliarden Dateien pro Volumen (2^32 - 1). Dies ist die Gesamtlimit für alle Ordner auf dem Volumen (einschließlich Betriebssystemdateien usw.).

Eine große Anzahl von Dateien in einem einzelnen Ordner sollte kein Problem sein. NTFS verwendet einen B+ -Baum zum schnellen Abruf. Microsoft empfiehlt, dass Sie die Erzeugung von Kurzfilmamen deaktivieren (mit der Funktion, mit der Sie MyPictureofyou.html als mypic ~ 1.htm abrufen können).

Ich weiß nicht, ob die Segmentierung in mehreren Verzeichnissen einen Leistungsvorteil hat. Ich vermute, dass es keinen Vorteil geben würde, da NTFS für die Leistung mit großen Verzeichnissen ausgelegt war.

Wenn Sie sich entscheiden, sie in mehrere Verzeichnisse zu unterteilt, verwenden Sie eine Hash -Funktion im Dateinamen, um den Verzeichnisnamen zu erhalten (anstatt den Verzeichnisnamen als zum Beispiel der erste Buchstabe des Dateinamens), damit jedes Unterverzeichnis ungefähr die gleiche Nummer hat von Dateien.

Ich würde nicht mithilfe eines Inhalts -Zustellungsnetzwerks ausschließen. Sie sind für dieses Problem ausgelegt. Ich hatte viel Erfolg mit Amazon S3. Da Sie eine Microsoft -basierte Lösung verwenden, passt Azure möglicherweise gut.

Gibt es eine Art Anforderung, die Sie daran hindert, eine Lösung von Drittanbietern zu verwenden?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top