Kennt jemand Java-Bibliotheken (Open Source), die Funktionen für die Verarbeitung einer großen Anzahl von Dateien (Schreiben / Lesen) von einem Datenträger zur Verfügung stellen? Ich spreche von 2-4 Millionen Dateien (die meisten davon sind PDF und MS-Dokumente). Es ist keine gute Idee, alle Dateien in einem einzigen Verzeichnis zu speichern. Anstatt das Rad neu zu erfinden, hoffe ich, dass es schon von vielen Leuten gemacht wurde.
Features, nach denen ich suche 1) Kann Dateien von der Festplatte schreiben / lesen 2) Kann zufällige Verzeichnisse / Unterverzeichnisse für neue Dateien erstellen 2) Bereitstellung von Version / Audit (optional)
Ich habe JCR API angeschaut und es sieht vielversprechend aus, aber es beginnt mit einem Arbeitsbereich und ist nicht sicher, was die Leistung sein wird, wenn es viele Knoten gibt.
Edit: JCP sieht ziemlich gut aus. Ich würde vorschlagen, es auszuprobieren, um zu sehen, wie es tatsächlich für Ihren Anwendungsfall funktioniert.
Wenn Sie Ihr System unter Windows laufen lassen und bemerken, dass es irgendwann zu einem fürchterlichen Leistungserfolg kommt, stolpern Sie wahrscheinlich gegen den Performance-Hit der automatischen 8.3-Dateinamengenerierung. Natürlich können Sie die Generierung von 8.3-Dateinamen deaktivieren , aber wie Sie bereits darauf hingewiesen haben, wäre es dennoch keine gute Idee, diese zu speichern große Anzahl von Dateien in einem einzigen Verzeichnis.
Eine häufige Strategie, die ich bei der Verarbeitung großer Dateienmengen gesehen habe, besteht darin, Verzeichnisse für die ersten n Buchstaben des Dateinamens zu erstellen. Beispiel: document.pdf wird in d / o / c / u / m / document.pdf gespeichert. Ich kann mich nicht erinnern, jemals eine Bibliothek dafür in Java gesehen zu haben, aber es scheint ziemlich einfach zu sein. Bei Bedarf können Sie eine Datenbank zum Speichern der Nachschlagetabelle erstellen (Zuordnungsschlüssel für die gleichmäßig verteilten zufälligen Dateinamen), sodass Sie Ihren Index nicht bei jedem Start neu erstellen müssen. Wenn Sie die automatische Deduplizierung nutzen möchten, können Sie den Inhalt jeder Datei überprüfen und diese Prüfsumme als Dateinamen verwenden (Sie möchten jedoch auch eine Überprüfung hinzufügen, damit Sie nicht versehentlich eine Datei verwerfen, deren Prüfsumme mit einer vorhandenen Datei übereinstimmt obwohl der Inhalt tatsächlich anders ist).
Abhängig von der Größe der Dateien könnten Sie auch die Dateien selbst in einer Datenbank speichern. Wenn Sie dies tun, wäre es einfach, eine Versionierung hinzuzufügen, und Sie müssten nicht unbedingt zufällige Dateinamen erstellen, weil Sie könnte sie mithilfe eines automatisch generierten Primärschlüssels verweisen.
Kombinieren Sie die Funktionalität im Paket java.io
mit Ihrer eigenen benutzerdefinierten Lösung.
Das Paket java.io
kann Dateien von der Festplatte schreiben und lesen und beliebige Verzeichnisse oder Unterverzeichnisse für neue Dateien erstellen. Es ist keine externe API erforderlich.
Die Versionierung oder Auditing müsste mit Ihrer eigenen benutzerdefinierten Lösung bereitgestellt werden. Es gibt viele Möglichkeiten, damit umzugehen, und Sie haben wahrscheinlich einen bestimmten Bedarf, der erfüllt werden muss. Besonders wenn Sie Bedenken hinsichtlich der Leistung einer Open-Source-API haben, ist es wahrscheinlich, dass Sie das beste Ergebnis erzielen, wenn Sie einfach eine Lösung programmieren, die genau Ihren Anforderungen entspricht.
Es klingt wie Ihr Modul sollte alle Dateien beim Start scannen und einen Index von allem, was verfügbar ist, bilden. Basierend auf der Methode, die zum Freigeben und Indizieren dieser Dateien verwendet wird, kann die Datei erneut gescannt werden oder Sie können sie codieren, um eine Nachricht von einem zentralen Server zu erhalten, wenn eine neue Datei oder Version verfügbar ist. Wenn jemand eine Datei anfordert oder eine neue Datei bereitstellt, wird Ihr Modul genau wissen, wie es organisiert ist und genau wissen, wo Sie die Datei erhalten oder in die Verzeichnisstruktur einfügen können.
Es scheint viel einfacher zu sein, eine Lösung zu entwickeln, die genau auf Ihre Bedürfnisse zugeschnitten ist.
Tags und Links java