Ich habe meiner Site gerade eine Funktion für die vorausschauende Suche (siehe Beispiel unten) hinzugefügt, die auf einem Ubuntu-Server ausgeführt wird. Dies wird direkt aus einer Datenbank ausgeführt. Ich möchte das Ergebnis für jede Suche zwischenspeichern und verwenden, wenn es vorhanden ist, sonst erstellen.
Würde es ein Problem geben, wenn ich die potenziellen 10 Millionen Ergebnisse in separaten Dateien in einem Verzeichnis speichere? Oder ist es ratsam, sie in Ordner aufzuteilen?
Beispiel:
os.listdir
in Python zu erstellen, aus diesem Grund rundweg abgelehnt wurde.Antworten:
Ja. Es gibt wahrscheinlich noch mehr Gründe, aber diese kann ich auf den Kopf stellen:
tune2fs
hat eine Option mit dem Namendir_index
, die standardmäßig aktiviert ist (unter Ubuntu ist dies der Fall), mit der Sie ungefähr 100.000 Dateien in einem Verzeichnis speichern können, bevor die Leistung beeinträchtigt wird. Das entspricht nicht einmal den 10-Millionen-Dateien, über die Sie nachdenken.ext
Dateisysteme haben eine feste maximale Anzahl von Inodes. Jede Datei und jedes Verzeichnis verwendet 1 Inode. Verwenden Siedf -i
für eine Ansicht Ihrer Partitionen und Inodes kostenlos. Wenn Sie keine Inodes mehr haben, können Sie keine neuen Dateien oder Ordner erstellen.Befehle wie
rm
undls
bei Verwendung von Platzhaltern erweitern den Befehl und führen zu einer "Argumentliste zu lang". Sie müssen verwendenfind
, um Dateien zu löschen oder aufzulisten. Undfind
neigt dazu, langsam zu sein.Ja. Ganz sicher. Grundsätzlich können Sie nicht einmal 10 Millionen Dateien in einem Verzeichnis speichern.
Ich würde die Datenbank benutzen. Wenn Sie es für eine Website zwischenspeichern möchten, werfen Sie einen Blick auf " solr " ("Bereitstellung verteilter Indizierung, Replikation und Lastausgleichsabfrage ").
quelle
Endete mit dem gleichen Problem. Führen Sie meine eigenen Benchmarks aus, um herauszufinden, ob Sie alles in demselben Ordner ablegen können, anstatt mehrere Ordner zu haben. Es scheint, Sie können und es ist schneller!
Siehe: https://medium.com/@hartator/benchmark-deep-directory-structure-vs-flat-directory-structure-to-store-millions-of-files-on-ext4-cac1000ca28
quelle
Eine binäre Suche kann problemlos Millionen von Datensätzen verarbeiten, sodass das Durchsuchen eines einzelnen Verzeichnisses kein Problem darstellt. Das geht sehr schnell.
Wenn Sie ein 32-Bit-System verwenden, ist die binäre Suche mit bis zu 2 GB Datensätzen einfach und gut.
Berekely DB, eine Open-Source-Software, würde es Ihnen ohne weiteres ermöglichen, das gesamte Ergebnis unter einem Eintrag zu speichern und die Suche zu integrieren.
quelle