Tool zum Verbinden/Synchronisieren zwischen Datenbank (Postgresql) und Dateisystem (Linux/Ubuntu)

Ich verwende das Dateisystem, um große Dateien außerhalb der Datenbank zu speichern und nur den Verzeichnispfad in der Datenbank aufzuzeichnen. Daher suche ich nach einem Tool, das ich als Schnittstelle verwenden kann, um die Datenbank an den im Dateisystem gespeicherten Inhalten auszurichten.

Ich schreibe, was ich bisher weiß/an was ich gedacht habe. Könnte ich bitte einige Ideen haben, ob es solche Tools bereits gibt?

Auf der Serverseite brauche ich glaube ich:

Skript zum Überwachen des Verzeichnisses auf neue Dateien Cron-Jobs zum regelmäßigen Ausführen des Überwachungsskripts Skript zum regelmäßigen Aktualisieren des Datenbankinhalts Auf der Clientseite (Endbenutzer) sollte ich Folgendes tun:

Laden Sie die Datei in ein /tmp-Verzeichnis hoch. Führen Sie einen Virenscan für aktualisierte Datei(en) durch. Verwenden Sie ein Skript, um die überprüfte Datei an den tatsächlichen Speicherort zu verschieben

Antworten (1)

Ich glaube nicht, dass es ein solches Tool von der Stange gibt. Sie können es jedoch ziemlich einfach erstellen, wenn Sie einen cleveren Ansatz verwenden.

  1. Speichern Sie ALLE Dateien als BLOBs.

Kein Dateisystem => keine Sync-mit-Dateisystem-Probleme. Siehe hier für Vorbehalte: https://softwareengineering.stackexchange.com/questions/150669/is-it-a-bad-practice-to-store-large-files-10-mb-in-a-database

  1. Speichern Sie nur die Pfade für ALLE Dateien in der DB.

Vorteil: Beseitigt subtile Synchronisierungsprobleme, z. B.: Wenn Sie eine kleine Datei in der Datenbank und auf der Festplatte haben, ist deren Inhalt möglicherweise nicht synchron. OTOH, wenn Sie eine kleine Datei als speichern BLOB, haben Sie keine einheitliche Ansicht des Dateisystems an einem Ort (sei es entweder das Dateisystem selbst oder die DB).

Sie müssen Dateisystemänderungen nur auf eine Weise synchronisieren: in die Datenbank. Das sollte ziemlich einfach zu schreiben sein.

Wenn die Anzahl der Dateien nicht zu hoch ist, könnten Sie dies sogar nahezu in Echtzeit haben: https://stackoverflow.com/questions/7566569/how-to-continuosly-monitor-the-directory-using-dnotify-inotify- Befehl

Nachteil: Sie benötigen für jeden Dateizugriff 2 Operationen, dh DB-Transaktion und einen Dateisystemzugriff. Linderung dieses Nachteils: Höchstwahrscheinlich wird das Lesen eines einzelnen Dateipfads in der DB ziemlich schnell sein und sowieso auf einer bestimmten Ebene zwischengespeichert werden.