Способы эффективного поиска в пользовательских форматах файлов - PullRequest
1 голос
/ 24 июня 2010

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

Ответы [ 2 ]

1 голос
/ 24 июня 2010

Это полностью зависит от типа данных и того, что вы пытаетесь найти.

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

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

По сути, все дело в метаданных, но правильный тип метаданных будет зависеть от типа данных и вариантов использования для поиска в первую очередь.

0 голосов
/ 24 июня 2010

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

...