In meiner Situation geht es um ein Verzeichnis, das MP3-Dateien enthält, und eine Datenbank, die alle MP3-Metadaten (d. h. Genres, Künstlernamen, Albumnamen und Titelnamen) der MP3-Dateien in diesem Verzeichnis enthalten soll. Die Datenbank sollte immer den Inhalt des Verzeichnisses widerspiegeln, d. h. der Algorithmus, nach dem ich suche, sollte niemals Objekte aus dem Verzeichnis löschen, sondern nur aus der Datenbank. Das Verzeichnis ist das Original, die Datenbank sollte die exakte Kopie des Verzeichnisses sein, nachdem das Programm ausgeführt wurde, und das Verzeichnis sollte vom Programm unberührt bleiben.
Nach meinem Verständnis müsste ich den Inhalt des Verzeichnisses in einer Schleife durchgehen und Datensätze in die Datenbank einfügen, wenn ich auf MP3-Metadaten stoße, die im Verzeichnis, aber nicht in der Datenbank zu finden sind. Dann muss ich eine Schleife über den Inhalt der Datenbank laufen lassen und die nicht im Verzeichnis gefundenen Daten aus der Datenbank löschen.
Gibt es einen allgemeinen Algorithmus für die Synchronisierung von zwei Dingen, z. B. einem Verzeichnis und einer Datenbank? Gibt es einen besseren Weg, als den, den ich skizziert habe?
Ich versuche, diese Aufgabe mit Ruby Sequel und MySQL zu erledigen, falls das eine Rolle spielt.
Nur zur Klarstellung: Gehen Sie davon aus, dass alle MP3-Tag-Daten korrekt sind. Ich lasse alle Dateien durch einen automatischen MP3-Tagger laufen und stelle sicher, dass alles korrekt getaggt ist, bevor ich es in dieses Verzeichnis verschiebe.
Ich würde es vorziehen, ein Ruby-Skript manuell auszuführen, anstatt z. B. mit Cron. Meine Gründe dafür sind, weil es die Sprache ist, die ich bereits verwende, um den größten Teil dieses Projekts zu implementieren, und ich muss alle MP3-Dateien manuell taggen und überprüfen, ob sie korrekt sind, also möchte ich nicht, dass irgendwelche Skripte ausgeführt werden, bis ich überprüfen kann, dass alle Dateien in meinem MP3-Verzeichnis gut zu gehen.