У меня есть каталог музыки в файлах Ubuntu (.mp3,.wav и т.д.). Этот каталог может иметь как можно больше подкаталогов, без ограничений. Я хочу, чтобы у меня была возможность извлечь из него музыкальную библиотеку, т.е. Вернуть список песен на основе фильтров:
1) членство в плейлисте 2) имя исполнителя 3) поиск строк 4) название песни etc, etc
Однако, если имена файлов изменяются, перемещаются или даже добавляются в мой каталог Music, я должен уметь это отражать в моем движке организации музыки - быстро!
Я изначально думал просто контролировать мой каталог с pyinotify, incron или inotify. К сожалению, мой каталог - это общий ресурс Samba, поэтому мониторинг файлов событий завершился неудачно. Таким образом, моя следующая догадка заключалась в том, чтобы просто рекурсивно искать каталог в python и заполнять базу данных SQL. Затем, при обновлении, я просто посмотрел бы, изменилось ли что-либо (сканирование каждой вложенной папки, чтобы узнать, есть ли в каждой базе данных имя уже в базе данных, а если не добавить ее) и соответственно сделать ОБНОВЛЕНИЕ. К сожалению, это кажется ужасной реализацией O(n^2)
- ужасно для многотервальной музыкальной коллекции.
Немного лучше может потребоваться создание древовидной структуры в SQL, таким образом сужая возможных кандидатов для поиска соответствия на любом заданном шаге подпапки к размеру этой подпапки. Все еще кажется неэлегантным.
Какие парадигмы дизайна/пакеты можно использовать, чтобы помочь себе? Очевидно, будет включать множество умных хеш-таблиц. Я просто ищу некоторые указатели в правильном направлении, чтобы подойти к проблеме. (Также я являюсь полным наркоманом для оптимизации.)