2010-10-08 2 views
0

Я пытаюсь выяснить, какой бинарный файл может поддерживать мои потребности в обратном индексе. Скажем, у меня есть документ, который я могу идентифицировать с уникальным идентификатором, и каждый документ может иметь 360 фиксированных значений в диапазоне 0-65535. Что-то вроде этого:Инверсный двоичный формат индекса

Document0: [1, 10, 123, ...] // 360 значений

Document1: [1, 10, 345, ...] // 360 значений

Теперь обратный индекс легко - я могу создать для каждого возможного списка значений документов, который содержит, и запрос может быть выполнен быстро, например:

1: [Document0, Document1]

10: [Document0, Document1 ]

123: [Document0]

345: [Document1]

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

Теперь я борюсь, как организовать этот файл. Если я хочу быстрый доступ, мне нужны массивы документов с фиксированной длиной, чтобы выполнить поиск файла и читать. Но фиксированный размер означает, что у меня будет много пустых мест для списка документов. Моя единственная идея - иметь какую-то систему bucketing, и каждое значение может принадлежать ведру определенного размера, например. есть ведра с размерами 1, 2, 4, 8, 16, 32, ... (или что-то в этом роде), и мне нужен какой-то заголовок, который укажет мне, где начинается ведро и размер ведра. Эта идея будет оптимизировать размер магазина, но снова у меня возникла проблема с добавлением новых документов.

Любая идея, как организовать мой файл «обратного индекса»?

Лучший.

ответ

0

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

00\00.idx 
00\01.idx 
.. 
FF\FF.idx 
0

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

Смежные вопросы