100.000 Dokumente einlesen

Hallo,

ich bin gerade dabei Rechnungen zu archivieren. Es sind in Summe ca. 100.000 1-seitige PDF-Dokumente.
Ich habe die ersten 20.000 Dokumente in Paperless drin, das hat aber ca. 2 Wochen gedauert.
Gibt es einen Trick wie ich das schnelle hinbekommen?
Ich habe auch gemerkt, dass wenn zu viele Dokumente im Consume-Ordner sind, Paperless nichts mehr einliest.
Nun arbeite ich mich scheibchenweie vor und schiebe immer nur 1.000 Dokumente auf einmal in den Consume-ordner.

Wie lange das dauert hängt alleine von der Hardware ab.

Du kannst maximal noch was optimieren an den Prozessen ( Anzahl ) für ocr und den worker.

Vielleicht Holst du so mehr raus.

Was ist deine Hardware und deine Installations-Basis ?

Ich habe eine Synology DS918 mit 12 GB Arbeitsspeicher.
Wo kann ich da genau an der Performanceschraube drehen?

Ich würde an deiner Stelle erstmal schauen, wo das Bottleneck ist. Wie ist die CPU-Auslastung? Wenn die schon nahe bei 100% ist, hast du keinen Spielraum mehr zu optimieren.

Was am meisten Zeit benötigt, ist das OCR. Da kann man nicht viel machen außer warten oder aber für den reinen Import eine wesentlich stärkere Maschine nutzen. Du könntest dir z.B. einen Root-Server mieten, dort paperless installieren, alles verarbeiten lassen und dann „nur noch“ vom Root-Server auf deine Synology umziehen.

Guter Ansatz von Stefan.

Alternativ ginge auch bei dir auf einem Pc mit genug Leistung Debian installieren und darauf docker sowie Paperless-ngx.

Docker-Desktop ginge vmtl. Auch unter Windows.

Oder in einer VM.

Du kannst die Anzahl der Prozesse für OCR erhöhen und damit experimentieren… aber nicht auf der Produktivumgebung bitte.

Auf der 918+ würd ich es aber lassen… ( selbes System )

Habe eben mal nachgesehen: CPU und Speicher arbeiten jeweils um die 60%.

Ich habe nun mal andere Prozesse angehalten die auf der Synology laufen (Hypervault Backup) und meine nun würde es etwas schneller laufen.

Guten Abend,

Eine Frage: Was ist denn das „wirkliche“ Problem? Die Dauer oder das permanente „scheibchenweise“ einlesen?

Wäre das Problem das davor sitzen ist und immer gucken, könntest Du vielleicht mit einem Script die Zufuhr regulieren -

also alle dateien in eine batchdatei

Dann mit move die ersten 100 Rechnungen in den Consum ordner verschieben.

X Minuten warten

dann die nächsten 100 verschieben

Warten lassen usw.

Da müsste man aber darauf achten, das die bereits konsumierten Dateien aus dem Ursprungsordner entfernt werden. Wenn sich nämlich der Batch-Prozess aufhängt/abstürzt oder aus einem anderem Grund zum Stillstand kommt, fängst Du wieder von vorne an.

Hallo,

im Vorfeld der Einführung von Paperless in unserem Kleinbetrieb habe ich über 200k Dokumente importiert, wobei auch viele davon mit 2stelligen und kleinen 3stelligen Anzahlen dabei waren. Es hat Wochen gedauert. Zwischendurch habe ich an den Workern und allgemein an der Konfiguration herumgebastelt und den Server sowei den Serverrechner neu gestartet. Auch habe ich das Consume-Verzeichnis zwischendurch mal gelöst um paperless zu entlasten (hat nichts gebracht). Ferner habe ich zwischendurch mit einem Skript die Dateien “scheibchenweise” in das Consume kopiert (hat auch nichts gebracht).

Am Ende war aber alles drin. Es braucht nur Geduld.

Ich hatte auf Flaschenhälse wie CPU, Platten I/O, RAM geprüft und das RAM als Flaschenhals ausgemacht. Unsere Xubuntu/Docker/Paperless-Einrichtung stößt schon bei weit niedrigeren Anzahlen auf RAM-Mangel bei 16 GB. Darum hat er seit einer Weile 32 GB, wobei der Verbrauch wohl nicht über 24 GB gegangen ist.

Gruß

Andreas

P.S.: Mit 200k, als sie denn endlich drin waren, war das System bei uns viel zu langsam.

Du sagst, es läuft bei dir zu langsam, kannst du ein bisschen mehr zu deiner Hardware erzählen?

CPU, RAM (DDR3,4,5?), worauf läuft die DB (NVMe, wenn ja welche), etc.

Die Hardware des Wirtsrechners ist u.a.

16 x Intel(R) Xeon(R) Gold 5415+ (1 Socket)
512 GB (8x 64GB) ECC Reg ATP DDR5 5600 RAM
3 x 7,68 TB Intel D7-P5520 U.2 NVMe SSD

Das Wirtssystem ist Proxmox.

Die VM hat 8 Kerne zugeteilt bekommen und wurde von 16 auf 32 GB RAM aufgestockt. Die VM läuft unter Xubuntu Linux. Darin ist Paperless-ngx mit Docker installiert. Das Datenbanksystem ist Postgres Version 17.

Die docker-compose.yml und *.env sind nahezu gemäß der Standardkonfiguration für Paperless mit Postgres und Tika von der Github-Seite. Aktuell 2 Worker mit je 4 Threats sind derzeit eingestellt. Aber ich hatte auch mal die Standardwerte genommen und anderweitig getestet. Ebenfalls hatte ich zeitweise mal Elasticsearch anstelle Whoosh ausprobiert, aber außer gigantischer RAM-Nutzung keine Änderung bemerkt. Alles ist in einem Container.
Jetzt sind über 28k Dokumente drin, und es werden rund 5k pro Jahr hinzukommen. Geschwindigkeit ist so da la - manchmal fix, machmal unverständlich träge. Gestern kamen 22 neue Briefe ins System. die waren nach einer halben Stunde verarbeitet, wobei zwischen Erkennung des Dateieingangs und der tatsächlichen Verarbeitung die meiste Zeit verging; die tatsächliche Verarbeitung waren pro Dokument nur wenige Sekunden (OCR = skip). Den Index neu zu erstellen dauert 20 Minuten. Das automatische Training läuft stets in den Timeout.

Du könntest mal damit experimentieren die Dateien gar nicht über den Consume Folder hochzuladen.

Man kann Dokumente auch direkt per http an die API schicken. Das sieht dann ungefähr so aus:

curl -i -H „Accept: application/json; version=9“ -H „Authorization: Token aaabbbeeeeccccccddddfffff“ http://srv-docker01.local:8080/api/documents/post_document/ -F document=@Rechnung.pdf

Der Rückgabewert ist eine Job ID, die könnte man z.B. in eine Arbeitsliste zusammen mit dem Dateipfad schreiben und dann später prüfen, ob alles fehlerfrei verarbeitet wurde.

Vorteil dieser Variante ist, dass du es so laufen lassen könntest, dass zwischen jedem Upload ein Sleep stattfindet, der so lang ist, dass alles ganz sicher nicht in ein Timeout führt.