2017-09-22 3 views
0

Ich arbeite an der Entwicklung eines Speicher-, Abruf- und Archivierungsprogramms.Große Volumenverteilung über Windows

Ich möchte große Anzahl von Dateien verwalten (0,5 Millionen pro Tag). Jede Datei hat eine Größe von 20kb bis 30kb.

Ich hatte Situation, wo, wenn ich zu viele Dateien in einzelnen Ordner, Zugriff auf diesen Ordner über Windows Explorer oder über das Programm ist langsamer.

Ich habe einige Lösungen gesehen (weiß nicht, wie sie es tun), wo sie Ordner wie 0,1,2, ... 99 haben und sie verteilen Dateien mit gleicher Anzahl oder Größe.

Gibt es einen Algorithmus oder ein .net-Programm, mit denen ich dasselbe tun kann.

Dank in Erwartung, ...

+0

kontrollieren Sie die Dateinamen um sie zu speichern verwendet wird (oder hat der Anrufer bestimmen das)? Hilft https://serverfault.com/questions/95444/storing-a-million-images-in-the-filesystem? – mjwills

+0

Anrufer bestimmt ... aber diese werden immer einzigartig sein. – Hardik

+0

Wie lange sind die Dateinamen wahrscheinlich? – mjwills

Antwort

2

Betrachten Sie die Verwendung von Git-Ansatz. Berechnen Sie einen Hash aus dem Dateinamen und verwenden Sie die ersten paar Bytes als Verzeichnisnamen. Dies würde sicherstellen, ziemlich gleichmäßige Verteilung über die Verzeichnisse Datei:

public static string GetDirName(string fileName) 
{ 
    if (hashAlgo == null) 
     hashAlgo = new SHA256CryptoServiceProvider(); 

    return BitConverter.ToString(
     hashAlgo.ComputeHash(Encoding.UTF8.GetBytes(fileName)) 
      .Take(2).ToArray() 
    ); 
} 

Full-Demo: https://dotnetfiddle.net/xlu4P8