Это должно работать с любым видом базы данных.
Faircom's C-Tree Plus коммерчески доступен для более 20 лет. Не работайте на них и т. Д. FairCom
Есть также Berkley DB , который был куплен Oracle, но все еще бесплатен на их сайте.
http://people.csail.mit.edu/jaffer/WB .
Вы также можете рассмотреть возможность повторного использования реализаций B-Tree из встраиваемая база данных с открытым исходным кодом. ( BDB , SQLite и т. Д.)
Я поддерживаю предложение по Berkeley DB. Я использовал его до того, как его купил Oracle. Это не полная реляционная база данных, а просто хранит пары ключ-значение. Мы перешли на это после написания нашей собственной реализации B-Tree подкачки. Это был хороший опыт обучения, но мы продолжали добавлять функции, пока не осталась только (плохо) реализованная версия BDB.
Если вы хотите сделать это сами, вот краткое описание того, что мы сделали. Мы использовали mmap для отображения страниц в памяти. Структура каждой страницы основана на индексе, поэтому с начальным адресом страницы вы можете получить доступ к любому элементу на странице. Затем мы отображали и не отображали страницы по мере необходимости. Мы индексировали текстовые файлы размером в несколько ГБ, когда 1 ГБ основной памяти считалось большим количеством.
Вы можете посмотреть Berkeley DB, поддерживаемый ею Oracle, но это открытый исходный код, и его можно найти здесь .
Я почти уверен, что это не то решение, которое вы ищете, но почему бы вам не сохранить дерево в файле сами? Все, что вам нужно, - это подход к сериализации и if / ofstream.
В принципе, вы можете сериализовать его так: перейдите в корневой каталог, напишите '0' в свой файл, разделитель типа '|', количество элементов в корневом каталоге и затем все корневые элементы. Повторите с «1» для уровня 1 и так далее. Пока вы не меняете уровень, сохраняйте индекс уровня, пустые листы могут выглядеть как 2 | 0.