Datenbankschema - Filesystem Hierarchie

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Datenbankschema - Filesystem Hierarchie

    Hallo,

    ich muss für ein Projekt ein Filesystem in einer Datenbank abbilden.
    Das Ganze soll später ein Javaprogramm zur Dateiverwaltung werden.
    Jetzt frage ich mich, wie ich das mit dem Schema am besten machen soll. Also mir geht es jetzt eigentlich nur mal darum, wie ich die Hierarchie des Filesstems abbilden kann.

    Reicht es, wenn ich in der Tabelle, in der die ganzen Datei-Einträge gespeichert werden, einfach eine Spalte "Parent" hinzufüge, in der dann der übergeordnete Ordnername drin steht?
    (Zur Info, ich möchte keine BLOBs speichern, sondern nur den Datei-Pfad, incl Metadaten über die Dateien)
    Und wie macht man es am besten mit der Unterscheidung von Dateien und Ordnern? Macht man da am besten jeweils eine Tabelle für Ordner und eine für Dateien?


    Ich habe schon im Internet gesucht, aber so wirklich viel konnte ich zu dem Thema nicht finden.
    Würde mich freuen, wenn mir hier jemand ein paar Tipps geben könnte, oder vieleicht sogar Links zu Webseiten, die das Thema behandeln.


    Gruß,
    Crest
  • Hi crest,


    wenn du dir das ganz als Baumdiagramm vorstellst, sollte es reichen, wenn jedes Element eine eindeutige id besitzt und die id des jeweiligen Eltern Elements.

    Das oberste Element besitzt dann natürlich kein Eltern Element. So müsste man ganz einfach mit einer rekursiven Funktion den gesamten Baum darstellen können.

    Wenn es ein Dateisystem werden soll, kannst du optional noch nen flag (datei/ordner) machen, mit dem du einfach setzt ob es eine Datei oder ein Ordner ist.


    Aber treibts nicht zu weit. Microsoft ist schon mit WinFS bei dem vorhaben böse gefallen :D :P
  • Danke für den Hinweis ^^

    Naja, also es ist so, dass im Moment die ganzen Dateien auf einem Netzlaufwerk liegen.
    Das soll auch so bleiben, nur sollen in der Datenbank eben noch zusätzliche Infos über die Dateien gespeichert werden.
    Es soll dann auch möglich sein, mit dem Javaprogramm Dateien auf dem Netzlaufwerk zu Löschen, neu zu erstellen, etc.

    Du meinst, das ist keine gute Idee, es mit einer Datenbank zu lösen?
  • crest wrote:


    Du meinst, das ist keine gute Idee, es mit einer Datenbank zu lösen?


    Doch, Doch ...

    Ihr steckt ja nicht nen ganzes Dateisystem mit Millionen von Dateien in eine Datenbank, wofür man nen Power6 bräuchte damit nicht alles untergeht :)


    Du hast ja geschrieben, dass nur die Meta Daten gespeichert werden.
    Hast du schon Vorstellungen welche Datenbank du nutzen möchtest?
  • Ja, ich möchte MySQL benutzen.
    Als Persistenzframework wollte ich Hibernate benutzen, aber ich habe damit noch nie gearbeitet.
    Allerdings denke ich mal, dass es das Ganze doch vereinfacht.


    Bei der Trennung von Ordnern und Dateien bin ich mir aber noch nicht so ganz sicher, ob das zusammen in einer Tabelle klappt.
    Z.B möchte ich als Metadaten bei Dateien (z.b. Wissenschaftliches Paper als PDF) den/die Autoren angeben können.
    Wenn jetzt aber auch Ordner in der selben Tabelle sind, dann hätten die ja auch das Attribut "Autor", was ja eigentich nicht sein soll.
    Wenn Ordner und Dateien aber in getrennten Tabellen sind, dann gibt das doch sicher Probleme bei der Rekursiven Funktion, um den File-Baum zu erstellen :>
  • Ich würde etwas anders ran gehen. Schau dir mal an, wie Filesysteme aufgebaut sind: NTFS, EXT3, EXT4 bei wiki gibts da coole Grafiken, somit hast eigentlich schon fast dein DB-Schema. Ich würde dir auch von MySQL abraten und zu PostgreSQL raten. Stichwort sind hier: Rules, Trigger, Functions. Damit kannste mehr reißen als mit MySQL.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • MySQL würde ich auch nicht benutzen. Das DBS wird dir irgendwann in die Knie gehen, wenn ihr das wirklich produktiv einsetzt.

    Am besten und am aufwändigsten ist da die DB2 (oder Oracle).

    Beide besitzen einen Datentyp DATALINK mit dem du genau das erreichst, was du vorhast.

    Datalink


    Zitat:
    Data Links Manager behandelt Informationen, die sich in Dateisystemen befinden, als befänden sie sich logisch innerhalb der Datenbank. Daher müssen vorhandene Anwendungen nicht geändert werden. Die objektrelationalen Funktionen von DB2 UDB ermöglichen Anwendungsentwicklern das Schreiben von benutzerdefinierten Funktionen (UDFs), die Dateien verarbeiten, die innerhalb von BLOBS, als Referenz in einer DATALINK-Spalte oder als Referenz in einem benutzerdefinierten Datentyp (einem einzigartigen Datentyp, der dem DATALINK-Datentyp zugeordnet ist) gespeichert sind.
  • Kann ich vince nur zustimmen, falls dir bei Oracale etc. das Geld ausgehen sollte, schreib dir in C eine Datalink function und bau sie in PostgreSQL ein. Das ist dann die Lösung für arme :)
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • So kann man das natürlich auch machen :)

    Aber in der heutigen Zeit ist das Geld garnicht der ausschlaggebende Punkt.

    Bei Oracle gibt es die 10g als Express Edition die frei verfügbar ist.
    Einschränkung ist die 4GB userdata 1CPU und 1GB Ram.

    Bei der DB2 Express-C welche auch frei verfügbar ist hast du als Einschränkung 2GB Ram und 1DualCore CPU.

    Ich "kämpfe" momentan mit der DB2 und muss aber sagen, dass die sehr genial ist.
    Oracle hab ich noch nie benutzt, soll aber vor allem in Bezug auf Locks noch besser arbeiten als die DB2.

    Wobei du natürlich Einarbeitungszeit benötigst um den Server aufzusetzen.
    Musst du wissen, ob dir das wert ist. Wobei ich gesehen habe, dass es die DB2 jetzt schon als *.deb Paket für Ubuntu/Debian zum Download gibt ;)
    ftp.software.ibm.com/software/data/db2/express/latest_debs
    ftp.software.ibm.com/software/data/db2/express/Ubuntu/debs/


    [Oracle]
    oracle.com/technology/products/database/xe/index.html

    [DB2]
    www-01.ibm.com/software/data/db2/express/
    ibm.com/developerworks/wikis/d…tarted+with+DB2+Express-C