AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Hunderttausende Dateinamen mit Pfaden effizient in Datenbank speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Hunderttausende Dateinamen mit Pfaden effizient in Datenbank speichern

Ein Thema von Benmik · begonnen am 7. Mär 2014 · letzter Beitrag vom 8. Mär 2014
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Hunderttausende Dateinamen mit Pfaden effizient in Datenbank speichern

  Alt 7. Mär 2014, 22:56
Retrospect ist natürlich toll, ich weiß aber nicht, ob ich so einen Dienst mitlaufen haben möchte. Insbesondere nicht, wenn ich Videobearbeitung mache.
Und warum sollte das stören?

Klar kann man das so implementieren, dass es fürchterlich stört, aber auch so, dass es eben nicht störend wirkt.
Wenn die CPU sich langweilt, dann alles berechnen, was da ansteht, ansonsten vornehm zurückhalten und nicht bei jeder Änderung sofort die Berechnung anwerfen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
578 Beiträge
 
Delphi 12 Athens
 
#2

AW: Hunderttausende Dateinamen mit Pfaden effizient in Datenbank speichern

  Alt 7. Mär 2014, 23:24
Ist natürlich richtig, wenn die Jungs das so geschickt machen. Womit auch Persaus Frage beantwortet wäre, was ein Profi ist Mir jedenfalls stehen solche Möglichkeiten wie die Implementierung eines solchen Dienstes nicht zur Verfügung. Was auch für die blockweise Datensicherung gilt.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Hunderttausende Dateinamen mit Pfaden effizient in Datenbank speichern

  Alt 8. Mär 2014, 00:12
Ist natürlich richtig, wenn die Jungs das so geschickt machen. Womit auch Persaus Frage beantwortet wäre, was ein Profi ist Mir jedenfalls stehen solche Möglichkeiten wie die Implementierung eines solchen Dienstes nicht zur Verfügung. Was auch für die blockweise Datensicherung gilt.
Nun ja, einer Eigenschaft einen Wert zuweisen, wirst du wohl schon schaffen Delphi-Referenz durchsuchenTThread.Priority.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Hunderttausende Dateinamen mit Pfaden effizient in Datenbank speichern

  Alt 8. Mär 2014, 10:26
Man kann auch problemlos einen Prozess sich selbst überwachen lassen, so dass er z.B. nie mehr als x Prozent der Systemleistung benutzt. So eine Speicherung von sehr vielen Dateinamen hatte ich vor 20 Jahren mal gemacht, als es wirklich noch auf jedes Byte ankam.
Damals wurden damit im Fidonet Dateibestaende verwaltet. Die Struktur war VolumeID, PathID, FileName. Das ging ziemlich gut.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
578 Beiträge
 
Delphi 12 Athens
 
#5

AW: Hunderttausende Dateinamen mit Pfaden effizient in Datenbank speichern

  Alt 8. Mär 2014, 12:40
Allerdings kann ich mir bei einem richtig guten Backupprogramm auch vorstellen, das es Umbenennungen von Verzeichnissen und Dateien mitbekommt und seine eigene Liste entsprechend überarbeitet.
Genau darum geht es mir! Ich möchte, dass in allen gesicherten Dateien jede einzelne Datei nur ein Mal vorkommt und Doubletten durch Hardlinks ersetzt werden.
Ich habe beide Varianten ausprobiert, Verzeichnisse mit ID in einer getrennten Tabelle und Speicherung des vollen Namens. Schon bei mir reichen da 256 Byte nicht aus, ein Echt-Beispiel aus der Praxis lautet "D:\Daten\Gemeinsam\Projekte\Video\Edius\Projektda teien\Tropenhaus\Echoes of Nature - Jungle Talk\Sounds Of Nature - Fresh Country Rain\Sounds Of Nature - Fresh Country Rain\Sounds Of Nature-Fresh Country Rain\Sounds Of Nature - 01 - Fresh Country Rain - (with music).mp32". Ich bn mir sicher, dass es da noch ganz andere Kaliber gibt. Man kann sich fragen, warum das eine Verzeichnis drei Mal auftaucht, aber es war eben so (da hatte ich wegen Resampeln rasch mal das Verzeichnis kopiert), und dann muss man auch bei anderen damit rechnen. Leider benötigte ich mehrere Indizes, nicht nur den Dateinamen, sondern auch noch für Größe und MD4, mit der Folge, dass Dateioperationen unglaublich langsam wurden.

Nochmal zum Entwurf: Alle Dateien sollen durch MD4 eindeutig identifizierbar sein, unabhängig von Name und Pfad. Diese Erstellung von MD4 ist das Zeitaufwendigste, daher wüsste ich nicht, wie das Speichern der vorhandenen Dateien mit MD4 ohne Datenbank gehen sollte. Bei bereits vorhandenen MD4-Prüfsummen kann die erneute Erstellung entfallen, dazu prüfe ich Pfad, Dateiname, Größe, Erstellungs- und Änderungsdatum und übernehmen dann die MD4 aus der DB.

Gehört jetzt vielleicht nicht mehr zum Thema, aber die 32 Byte von MD4 oder MD5 sind mir für läppische Dateinamen ein bisschen viel. Welche Prüfsumme hat denn 16 Byte? Oder kann ich einfach die ersten 16 von MD4 nehmen, wie hoch ist da die Wahrscheinlichkeit von Kollisionen? Ich würde ja gern CRC64 von Wolfgang Ehrhardt nehmen, aber leider weiß ich nicht, wie ich den Datentyp
Delphi-Quellcode:
type
  TCRC64 = packed record
    lo32, hi32: longint;
  end;
in einen HexString umwandeln kann. In den mem_utils finde ich nichts, das passt.

Geändert von Benmik ( 8. Mär 2014 um 13:35 Uhr)
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
223 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Hunderttausende Dateinamen mit Pfaden effizient in Datenbank speichern

  Alt 8. Mär 2014, 13:19
also ,
du wandelst lo32 und hi32 jeweils separat in eine Hexstring und haengst dann die 2 Strings aneinander

lo32hx:=hexstring(lo32);
hi32hx:=hexstring(hi32);
crc64hx:=hi32hx+lo32hx;

oder verstehe ich das jetzt vollkommen falsch ?
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
578 Beiträge
 
Delphi 12 Athens
 
#7

AW: Hunderttausende Dateinamen mit Pfaden effizient in Datenbank speichern

  Alt 8. Mär 2014, 13:34
Klappt! Danke.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

AW: Hunderttausende Dateinamen mit Pfaden effizient in Datenbank speichern

  Alt 8. Mär 2014, 13:39
Du könntest die ganze Geschichte auch in den Alternate Data Streams unterbringen.

Also jeder Datei einen dolchen verpassen, in dem dann der Hash drinsteht, zusammen mit dem Erzeugungsdatum des Hashs. Wenn du dann das Verzeichnis mit dem Backup vergleichst, greifst du wieder darauf zu und vergleichst für jede Datei 1. Ob der Hash noch aktuell ist, ggf. neu erzeugen und 2. Ob er überein stimmt.

Das geht natürlich nur für NTFS. Sicherungen auf ein Netzlaufwerk werden damit schwierig. Aber da du eh schon von Hardlinks sprachst, erfolgt das Backup ja eh von NTFS nach NTFS, oder?
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
578 Beiträge
 
Delphi 12 Athens
 
#9

AW: Hunderttausende Dateinamen mit Pfaden effizient in Datenbank speichern

  Alt 8. Mär 2014, 13:58
Völlig richtig, da Hardlinks eine große Rolle spielen sollen, ist NTSF Voraussetzung. ADS ist natürlich ein ganz neuer, interessanter Gedanke, umso mehr, da sich in meiner Sammlung von Delphi-Routinen auch die zum Auslesen und Schreiben von ADS finden. Ich müsste mal grübeln, ob das sicher genug ist. Eine Datenbank ist ein gesicherter Raum, während die Dateien mit den ADS ja "in freier Wildbahn" verbleiben und dort alle möglichen Programm alles Mögliche mit ihnen anstellen können. Ich habe auch noch nie gehört, dass ADS für Sicherungszwecke verwendet werden, das wird doch wohl seinen Grund haben? Aber bestechend ist der Gedanke schon!

PS: Da hast du mir einen Floh ins Ohr gesetzt! Das Setzen und Wiederauslesen der ADS ist kinderleicht! Ein gewisser Nachteil: Anscheinend sind (jedenfalls unter Windows 7) Administratorrechte erforderlich.

Geändert von Benmik ( 8. Mär 2014 um 15:48 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz