Thread Ordnerstruktur in DB abbilden - evt. eigene DB (File) schreiben?
(34 answers)
Opened by lousek at 2011-02-24 00:10
Hallo zusammen
Zuerst vielen Dank für die Antworten :-) Naja, der primäre Zweck der Datenbank ist wirklich um der vorherige Stand des Dateisystems (resp. der Stand in der DB) und der jetztige Stand vergleichen zu können also was wurde erstellt und was wurde gelöscht ... @payx: An das mit dem "FIRSTDETECT"-Feld habe ich auch schon gedacht. Ich denke, ich werde es mal mit dem Pfad-Modell inkl. "FIRSTDETECTED", "LASTVERIFIED", "LEVEL" und "ID" probieren. Wenn man mit einer maximalen Pfadlänge von 255 Bytes rechnet, gibt dies somit sicher gut und gerne 300 Bytes für jeden Datensatz. Gibt bei 1 Million Ordner 300MB ... ich denke, dies ist wirklich noch erträglich :-) Aber dann bleibt ein weiters Problem: Beim starten des Scripts muss ja überprüft werden, ob der Ordner xyz bereits in der Datenbank eingetragen ist, und wenn ja, soll "FIRSTDETECTED" auf "jetzt" geupdatet werden. Jetzt könnte man entweder eine Abfrage machen (SELECT ... WHERE path = ...), und überprüfen, ob das Ergebnis >0 ist (vorhanden in der DB) und ansosten einfügen. Dies ist aber sehr ineffizient, da bei 1 Million Ordner die DB 1 Million mal gefragt wird, ob ein Eintrag in 1 Million Einträge vorkommt ... also 1 Billion Vergleiche. Daher kamm die Idee mit dem Hash-Tree: Man fragt die Datenbank ein einziges Mal ab (SELECT * FROM dir;) Danach generiert man aus den Pfaden den Hash-Tree; ich hatte es für das "Parent-Modell" wie folgt gemacht: Code: (dl
)
1 #!/usr/bin/perl -w Danach kann man eben mit "if (defined($hash{teile}{des}{pfades})) ..." recht effizient überprüfen, ob ein Pfad in der Datenbank ist. Wäre dieser Weg nicht effizienter, wie wenn man tausende von SQL-Statements absetzt und verarbeiten muss? Gruss & vielen Dank Lousek |