Форум сайта python.su
Здравствуйте!
С Redis работаю недавно, есть список файлов:
/dir/dir2/file.txt
/dir/file2.txt
и т.п
Думаю хранить это так:
Два списка, файлы и каталоги:
dirs = ['/:root', 'dir:0', 'dir2:1'] #('имя_каталога:ид_каталога_выше') files = [[2, 'file.txt']] #(ид_каталога, имя файла)
Отредактировано andreiru (Июль 25, 2012 08:56:44)
Офлайн
А какого рода запросы?
И сколько файлов, ну хотя бы порядок количества.
Офлайн
Файлов 1 - 1.5 млн.
Нужно искать по имени и расширению файла.
Офлайн
Тогда я не вижу смысла разделения названий директорий и имен файлов.
Для каждого полного пути, если позволяют ресурсы, вам нужно добавить сущности: имя файла и его расширение, которые использовать для поиска.
Плюс, учитывая ваше замечание о памяти, обязательно настроить Редис:
http://redis.io/topics/memory-optimization
Если использовать дополнительно Set, где имя множеств - расширение файлов, а набор - пути (или ссылки на них - в зависимости от наличия памяти), то поиск по расширению делается одной командой.
Если храним ссылки, то их можно организовать как Хеши, в которых хранится путь к файлу.
Офлайн
Хочу попробовать разобраться с разбиением:
class Host: self.name = 'test.ru' def addPath(self, path): #разбиваю. путь на каталоги dirs = ['/'] + [v for v in path.split('/') if v != ''] dir_up = 'root' # список в котором храняться каталоги хоста paths_id = 'host:%s:paths' % self.name for dir in dirs: dir_key = '%s:%s' % (dir, dir_up) if r.sismember(paths_id, dir_key): # как здесь узнать index элемента dir_key ? else: dir_up = r.llen(paths_id) r.sadd(paths_id, dir_key)
Офлайн
andreiruА зачем?
# как здесь узнать index элемента dir_key ?
Офлайн
class Host: self.name = 'test.ru' def addPath(self, path): #разбиваю. путь на каталоги dirs = ['/'] + [v for v in path.split('/') if v != ''] dir_up = 'root' for dir in dirs: r.sadd('host:%s:paths' % self.name, dir_key) # здесь нужно положить в dir_up индекс dir_key # dir_up = # Может есть метод: r.index('host:%s:paths' % self.name, dir_key) который возвращает индекс элемента ? # я в документации не нашёл return dir_up
Отредактировано andreiru (Июль 25, 2012 18:58:18)
Офлайн
Еще раз, зачем?
У множества нет индекса.
Но, допустим, он бы был. Что вы с ним делать собирались?
И по использованию множеств вопрос.
Вы решили использовать множество не так как я посоветовал - ваше дело.
Но зачем его использовать именно так как вы используете я не понял.
Зачем в одном множестве хранить список всех файлов одного хоста?
Отредактировано Lexander (Июль 25, 2012 19:57:53)
Офлайн
Зачем в одном множестве хранить список всех файлов одного хоста?Я это в целях экономии памяти
Для каждого полного пути, если позволяют ресурсы, вам нужно добавить сущности: имя файла и его расширение, которые использовать для поиска.что такое сущности ?
Отредактировано andreiru (Июль 26, 2012 06:39:39)
Офлайн
andreiruДа.
и ещё два списка по которым ищем ?
Офлайн