Память сопоставлена ​​- частично дисковые алгоритмы - PullRequest
8 голосов
/ 03 октября 2009

Есть ли хорошие ресурсы или книги для разливаемых структур данных, например, очереди?

При хранении больших объектов это может заполнить всю память, но, если вы можете сохранить, скажем, наиболее часто используемые элементы этой структуры очереди в памяти, а остальное - на диске (что-то вроде пейджинга).

Аналогичным образом, этот вопрос относится к другим структурам, таким как связанные списки, массивы, хеш-таблицы и т. Д.

Ответы [ 3 ]

10 голосов
/ 03 октября 2009

Существует Дерево буфера (PDF, 0,6 МБ):

"... разработан эффективный внешний приоритет очереди и пакетные динамические версии (одномерного) дерева диапазонов и дерево сегментов. "

и

"... позволяют нам разрабатывать эффективные алгоритмы внешней памяти из известных внутренних алгоритмов простым способом, так что все специфичные для ввода / вывода части алгоритмов скрыты в структурах данных. "

Это упоминается как часть более широкого подхода к тема в свободном доступе онлайн книга " Алгоритмы и структуры данных для внешней памяти " Джеффри Скотт Виттер (PDF, 1 МБ).

1 голос
/ 03 октября 2009

То, что вы ищете, может быть темой эффективных алгоритмов ввода / вывода. Поиск в Google не дал мне никаких книг, но на этой странице курса содержится список статей, которые могут относиться или не относиться к вам.

Вы также должны взглянуть на страницу WikiPedia для B-деревьев , особенно раздел B-деревьев в файловых системах .

0 голосов
/ 03 октября 2009

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

<Ч />

Я не совсем уверен, что вы пытаетесь сделать. Под очередью вы подразумеваете очередь FIFO (первым пришел первым - первым вышел) или очередь с приоритетом?

Для работы с очередями FIFO и ведения журналов, возможно, вы могли бы изучить кольцевые буферы и ротацию журналов.

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

Возможно, вам поможет подсистема VFS в Linux и изучение http://lxr.linux.no/#linux+v2.6.31/Documentation/filesystems/vfs.txt, поскольку (я думаю) это часть Linux, которая обрабатывает кэширование.

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

...