Архитектура файла
Ну, это страницы (= блоки). Страницы должны иметь кратный размер страницы базового хранилища, поэтому, вероятно, блоки размером 1 КБ или 8 КБ. Каждый блок имеет номер, и таким образом на него можно ссылаться.
На страницах каталога хранятся ограничивающие рамки дочерних элементов и их номера страниц.
Дочерние страницы хранят фактические объекты данных.
Управление деревом
Ну, в теории: всякий раз, когда вы изменяете страницу в памяти, вы записываете изменения на диск. Вот и все.
На практике вы можете захотеть использовать кеш для повышения производительности и иметь транзакции для сохранения согласованности вашего дерева в случае сбоя приложения.
По обеим этим вещам можно найти много литературы в области архитектуры СУБД.
Ключевым преимуществом R*-дерева является то, что это обычное странично-ориентированное дерево, которое вы могли бы использовать в системах баз данных повсюду. Если у вас есть хорошая реализация B+-дерева на диске, вы можете повторно использовать большую часть своего кода для R*-дерева.
С чего начать
Для начала вам нужно привыкнуть к индексации данных на диске, как это делается в классической СУБД. Я предлагаю начать с на диске B-дерева или B+-дерева. Разрешайте удаления, потому что вам нужно подумать об управлении удаленными страницами и всем этом.
Как только вы разберетесь с B-деревом на диске (и, возможно, потратите некоторое время на его оптимизацию!), создание R-дерева на диске должно быть довольно очевидным.
Я не смотрел код, но это может быть хорошей отправной точкой: http://www.die-schoens.de/prg/ или некоторые другие ссылки в Ищу реализацию дерева B+ на основе диска на C++ или C
person
Has QUIT--Anony-Mousse
schedule
02.12.2012