Сохранение данных для Python, когда много просмотров, но мало пишет? - PullRequest
0 голосов
/ 24 октября 2010

Я работаю над проектом, который в основном отслеживает набор удаленных каталогов (FTP, сетевые пути и т. Д.), Если файл считается новым и соответствует критериям, мы его загружаем и обрабатываем.Однако я застрял на том, что лучший способ отслеживать файлы, которые мы уже скачали.Я не хочу загружать дубликаты файлов, поэтому мне нужно следить за тем, что уже загружено.

Первоначально я хранил это как дерево:

server->directory->file_name

Когда службазавершает работу, записывает его в файл и перечитывает обратно при запуске.Однако, учитывая, что когда в дереве примерно 20 000 файлов или около того, файлы начинают сильно замедляться.

Есть ли лучший способ сделать это?

EDIT

Время поиска начинает сильно замедляться, моя базовая реализация - это диктат.Хранение данных на диске - это хорошо, это более или менее просто время поиска.Я знаю, что могу оптимизировать дерево и разбить его на части.Однако это кажется чрезмерным для такого маленького проекта, я надеялся, что у python будет что-то подобное.

1 Ответ

1 голос
/ 24 октября 2010

Я бы создал набор кортежей, а затем засолил его в файл.Кортежи будут (server, directory, file_name) или даже (server, full_file_name_including_directory).Нет необходимости в многоуровневой структуре данных.Кортежи будут хэшировать в набор и давать вам O (1) поиск.

Вы упоминаете, что «материал начинает сильно замедляться», но вы не говорите, будет ли это время чтения и записи или поискавремена, которые замедляются.Если время поиска замедляется, возможно, вы выполняете пейджинг.Ваша структура данных приближается к значительной части вашей физической памяти?

Один из способов вернуть часть памяти - intern() имена серверов.Таким образом, каждое имя сервера будет храниться в памяти только один раз.

Интересной альтернативой является использование фильтра Блума.Это позволит вам использовать гораздо меньше памяти, но иногда будет загружать файл, который вам не нужен.Это может быть разумным компромиссом, в зависимости от того, почему вы не хотите загружать файл дважды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...