[devel] contents_index trie

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вс Ноя 2 00:19:30 MSK 2008


On Sat, Nov 01, 2008 at 11:45:41PM +0300, Alexey Tourbin wrote:
> On Sat, Nov 01, 2008 at 09:07:50PM +0300, Alexey Tourbin wrote:
> > On Sat, Nov 01, 2008 at 09:01:36PM +0300, Alexey Tourbin wrote:
> > > On Sat, Nov 01, 2008 at 06:42:07PM +0300, Денис Смирнов wrote:
> > > > On Tue, Oct 28, 2008 at 10:50:13AM +0300, Алексей Турбин wrote:
> > > > 
> > > > Правильно ли я понимаю что речь идет о задаче создания чего-то вроде cdb,
> > > > с некоторыми уточнениями:
> > > > - нет key/data, есть только key
> > > > - поддерживается единственная операция "проверить на существование данный
> > > >   key"
> > > > - нужно обеспечить минимальное количество pagefaults при выполнении этой
> > > >   операции
> > > > 
> > > > Я правильно понял?
> > > 
> > > Нет, имееется в виду trie.  Это дерево.  С каждым ключом ассоциировано
> > > значение _и_ последующие вложенные ключи.  Так что идёт доступ по
> > > составному ключу, типа ["usr","bin","perl"]->"perl-base".  То есть
> > > значение ключа "накапливается", а дополнительный переход на каждом этапе
> > > выполняется рекурсивно (хвостовая рекурсия с "остатком" составного ключа).
> > > http://en.wikipedia.org/wiki/Trie
> > 
> > Это похоже на фаловую систему, только в файловой системе ключ не может
> > быть одновременно и файлом, и каталогом.
> 
> То есть это префиксное дерево в общем виде.
> Вот другой пример (словарь):
> 
> ["ч","а","й"] -> <напиток>
> ["ч","а","й","к","а"] -> <птица>

Условие локальности ссылок дополнительно состоит в том, что группировка
данных должна усиливаться при нарастании вложенности.  На пальцах это
означает, что вариативность окончаний следует соотносить с основным
"понятием".  Пример (словарь):

["ч","а","й"] -> <напиток>
["ч","а","й","н","ы","й"] -> прил. муж. относящийся к "чай"
["ч","а","й","н","а","я"] -> прил. жен. относящийся к "чай"

Пример с точки зрения фс:
/usr/lib/perl5 -> perl-base
/usr/lib/perl5/Test -> perl-devel
/usr/lib/perl5/Test.pm -> perl-devel
/usr/lib/perl5/Test/More.pm -> perl-devel

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

> Организация памяти в префиксном дереве должна быть такой, чтобы при
> очередном переходе по составному ключу, т.е. "ч"->"а", "а"->"й" и т.д.
> выполнялось условие локальности ссылок: ключи и значения в памяти
> должны быть размещены (сгруппированы) "близко" друг к другу, то есть
> чтобы при проходе по составному ключу вглубь дерева затрагивалось
> минимальное число сегментов памяти.
> 
> В файловой системе так и происходит: каталог тоже имеет inode, и данные
> каталога (dirent.h) локльно "сгруппированы" в "файле" каталога.  Так что
> переход из каталога в подкаталог затрагивает минимальное количество
> дисковых страниц.  А если бы информация о содержимом каталога была
> произвольно разбросана по диску (как указатели на строки при
> использовании malloc), тогда для напр. readdir(2) потребовалось бы
> читать с диска в буферный кеш большое количество лишних страниц.
> 
> Короче, оптимальное размещение в памяти префиксного дерева --
> по сложности это задача где-то на уровне реализации файловой системы.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20081102/5d742357/attachment.bin>


Подробная информация о списке рассылки Devel