Während eines Tests hat eines unserer Teams Timeouts gemeldet, die versuchten, über FTP auf ein Verzeichnis zuzugreifen. Die Ursache war ein Fehler in ihrem Code, der Millionen winziger Dateien verursacht hatte.Unterstützt FTP Paging?
Aus meinem Verständnis der Grund für die Zeitüberschreitung ist die Anfrage fragt nach dem Inhalt des Verzeichnisses aufgelistet werden, und wartet auf eine einzige Antwort mit allen Dateien.
Wenn stattdessen der Server sofort begann, die Ergebnisse so zurückzugeben, wie sie gefunden wurden (think: yield return
vs return
), würde dies die Zeitüberschreitung verhindern. Wenn es eine Option zum Zurücksenden von seitenweisen Daten gibt, könnte dies zu einer Problemumgehung führen.
Da FTP ist request-response
, anstatt request-response-response-...
Ich stelle mir das yield return
Szenario ist nicht möglich; aber irgendeine Form von Paging kann sein. Das heißt, vielleicht würde dies keine Lösung ergeben, da das Paging eine Art von Sortierung beinhaltet, was wiederum eine Skalierung mit der Anzahl der Dateien nach sich ziehen würde.
NB: Dies ist eine Frage aus Neugier; Unser wirkliches Problem wurde gelöst, indem ich einfach das Verzeichnis löschte (https://stackoverflow.com/a/6208144/361842), um das Problem zu lösen. Allerdings denke ich, wenn es eine Option gäbe, Feed-Ergebnisse zurückzufluten, würde die Anzahl der Elemente in dem Ordner kein potentielles Problem mehr sein (solange wir die Ergebnisse nicht sortieren/filtern/usw. bevor sie zurückgegeben werden)). Wir verwenden FileZilla Server
und einen .Net-Client (System.Net.FtpWebRequest
); Aber da dies theoretisch ist, bin ich an generischen Antworten mehr interessiert als an denen, die für unsere Implementierung spezifisch sind.