Моя ситуация включает в себя каталог, содержащий файлы MP3, и базу данных, которая должна содержать все метаданные MP3 (то есть жанры, имена исполнителей, названия альбомов и дорожки) из файлов MP3 в этом каталоге. База данных должна всегда отражать то, что находится в каталоге, то есть ... алгоритм, который я ищу, никогда не должен удалять элементы из каталога, только из базы данных. Каталог является оригиналом, база данных должна быть точной копией каталога после запуска программы, и каталог должен оставаться неизменным программой.
Насколько я понимаю, я считаю, что мне пришлось бы перебирать содержимое каталога, вставляя записи в базу данных, когда я сталкиваюсь с метаданными MP3, которые найдены в каталоге, но не найдены в базе данных. Затем зациклите содержимое базы данных и удалите из базы данных то, что не найдено в каталоге.
Существует ли общий алгоритм для синхронизации двух вещей, таких как каталог и база данных? Есть ли лучший способ сделать это, чем я обрисовал в общих чертах?
Я пытаюсь выполнить эту задачу, используя Ruby Sequel и MySQL, на случай, если это имеет значение.
Просто для пояснения, предположим, что все данные тега MP3 верны. Я запускаю все файлы с помощью автоматической метки MP3 и проверяю, все ли помечено, прежде чем перемещать его в этот каталог.
Моим предпочтительным решением будет запуск сценария Ruby вручную, а не, например, с помощью Cron. Мои причины в том, что это язык, который я уже использую для реализации большей части этого проекта, и я должен вручную пометить все MP3-файлы и убедиться, что они правильные, поэтому я не хочу запускать какие-либо сценарии, пока не смогу убедиться, что все файлы в моем каталоге MP3 хороши.