# Dateiverwaltung mit mySQL ( mySQL Anfänger )



## Happyman0815 (10. Okt 2009)

Hallo Leute!

Als Schulprojekt möchten ich eine Dateiverwaltung im Client/Server Modell erstellen.

Erklärung:

Es gibt einen mySQL Server, der alle Daten/Eigenschaften von Dateien in einem bestimmten Ordner kennt. Diese Datenbank wird immer aktuell gehalten, sprich: Wenn eine Datei verändert/gelöscht/hinzugefügt wird, dann wird auch die Datenbank aktualisiert.

Mehrere Clienten sollen sich via Ethernet zum Server verbinden und damit ein Netzwerk bilden. Alle Clienten sollen über die Datenbank abfragen ob Dateien verändert/gelöscht oder hinzugefügt worden sind. Ist dies der Fall, werden die lokalen Ordner auf Seiten des Clienten aktualisiert. Sprich: Es werden die neue Dateien vom Server heruntergeladen.

Das ganze soll ähnlich wie SVN funktionieren, nur das von Seiten des Clienten die Dateien regelmäßig aktualisiert werden bzw. geguckt wird, ob alle Dateien noch aktuell sind (z.B. 30 sek Takt).

Soweit die Idee.

Jetzt habe ich ein paar Fragen zur Umsetzung. Da ich mit mySQL das erste mal arbeiten werde, kenne ich noch nicht den vollen Funktionsumfang. 

Wie kann man z.B. eine Dateiverwaltung hinbekommen... Dazu die Frage:
1. Kann mySQL Dateien beliebeiger Art speichern und diese entsprechend selber verwalten, oder muss eine externe Serveranwendung geschrieben werden, die über mySQL das senden und empfangen von Dateien verwaltet?

Es gab hier schon Vorschläge von Mitstudenten alle Dateien in Tabellen zu speichern. Sprich: Dieses gekrakel, wenn man eine exe Datei mit Texeditor öffnet abzuspeichern. Ohne mich mit Datenbanken auszukennen, halte ich das nicht für vorteilhaft, da eine Blue Ray Disk als Textform in einer DB doch recht aufwendig zu handhaben ist (vor allem für den Rechner selbst). Hierzu würde ich gerne noch eine Meinung haben.


Ansonsten würde ich gerne ein paar kleine Anregungen von euch hören, wie man so etwas machen könnte. Pflicht ist aber das irgendwie mySQL eingesetzt wird ( Aufgabenstellung für das Fach "Datenbanken"  ).

Gruß
Happyman0815


----------



## peez (10. Okt 2009)

Mysql kann wie jede relationale Datenbank nur Daten in Tabellenform speichern.
Dateien ausliefern oder verwalten in dem Sinne wie du es willst, geht nicht.
Man kann die Dateien innerhalb der Tabellen als BLOB ("Binary Long Object") speichern.
Allerdings wenn es um Blu-ray discs (btw. <- So schreibt man das richtig) geht, gebe ich dir recht wäre das nicht so sinnvoll.
Was du machen kannst ist Pfade, Prüfsummen, Dateigrößen, Dateidatum etc. in der Datenbank zu speichern.
Der Client könnte dann entweder direkt per Windows Dateifreigabe / Samba oder z.B. einen Webservice oder ein eigenes Protokoll die Dateien abholen, deren Pfad aus der Datenbank stammt.


----------



## Happyman0815 (10. Okt 2009)

Blu-ray discs (werde ich mir merken  ) waren jetzt ein überzogenes Beispiel, warum ich mir gedacht habe, das es nicht(bzw. nur schlecht) funktionieren kann.

BLOBs interessieren mich jetzt aber schon. Wie groß dürfte eine Datei denn maximal sein um zu sagen, dass der Einsatz von BLOBs noch sinnvoll ist?

Ich würde das Ergebnis des Projekts später gerne weiter benutzen für die Verwaltung von Dateien in weiterer Projekte mit mehreren Teilnehmern. In der Informatik kommen ja max. Dateien vonn 100 MB  zusammen (wenn mal etwas gezippt wird  ).

Quelldateien sind ja meist < 1 MB groß.

Gruß
Happyman0815

EDIT: 

MySQL
    bis 256 Byte TINYBLOB, bis 64 KiB BLOB, bis 16 MiB MEDIUMBLOB oder bis 4 GiB LONGBLOB.
(Quelle: Wikipedia BLOB)

Dateien von 4 GiB wären absolut ausreichend für das Projekt. Lässt sich diese Funktion effizient nutzen oder nicht? Bzw. die Frage ist: 
Ist es ok BLOBs einzusetzen (einfach) bei einer Durchschnittlichen Dateigröße von ~5 MB oder wäre es sinnvoller eine externe Dateiverwaltung zu programmieren? Sprich: Eine Anwendung die Verbindung zu allen Clienten hat, diese verwaltet und als einziger die Verbindung zur Datenbank hat (das wäre dann die Geschichte mit der Prüfsumme und damit wohl schwieriger).


----------



## Happyman0815 (12. Okt 2009)

Keiner der sich schon mal mit Dateiverwaltung von Projekten mit DB, sprich Programmen mit Funktionalitäten wie SVN auseinander gesetzt hat?


----------



## peez (12. Okt 2009)

svn ist ja in erster Linie dazu da, verschiedene Versionen von Code bzw. Dateien zu verwalten. Das kam jetzt bei deiner Beschreibung gar nicht raus, dass bzw. ob du sowas machen willst.
Ich denke mit der "Funktionalität" von svn hat sich deshalb noch keiner auseinandergesetzt, weil svn eben schon super ist und kaum Verbesserung braucht ;-)
Grundsätzlich denke ich spricht nichts bzw. wenig dagegen, seine Daten als BLOB zu speichern.
In dem Fall musst du eben schlaue Indizes und die richtigen Abfragen setzen, damit die Performance gut bleibt. 
Dateien übers Dateisystem zu managen wird allerdings immer schneller sein als über BLOBs mit mysql.
Ich habe vor einigen Jahren auch schon PHP Projekte gemacht, wo ich Dateien per BLOB gespeichert habe (um die nervigen Einschränkungen des Safe-Modes zu umgehen). Nach einiger Zeit bin allerdings da wo es möglich war, wieder dazu übergegangen, Dateien im Dateisystem statt direkt in der Datenbank zu speichern, einfach weil man im Wartungsfall besseren Überblick hat.


----------

