У меня есть проект, в котором мне нужно быстро выполнять операции поиска, вставки и удаления данных в диапазоне от мегабайт до терабайт.В последнее время я изучал структуры данных и анализировал их.В частности, я хочу представить 3 случая и задать вопросы по этому поводу:
Данные намного больше, чем то, что может обрабатывать память (выборочные диапазоны в 10-15 терабайт) за один раз,В этом случае я бы сохранил структуру данных на диске.
Данные относительно меньше по сравнению с памятью системы и, следовательно, могут храниться и работать в самой памяти.для скорости.
Данные больше свободной памяти и предполагают, что они меньше, чем размер возможного непрерывного фрагмента данных в файле подкачки.таким образом, я сохраняю структуру данных в файле на диске и выполняю сопоставление памяти файла.
Сделанные выводы:
Для случая 1 яследует использовать B-дерево для более быстрого доступа, поскольку оно экономит на задержке, вызванной вращением диска
В случае 2 я должен использовать красное черное дерево для более быстрого доступа, поскольку данные находятся в памяти, а нет.элементов, которые нужно сканировать в худшем случае, будет меньше, чем тот, который мне нужно сделать, если я использую B-деревья/ O для работы с файлами, так что, должно быть, B Tree будет лучшим вариантом или красное черное дерево?
Я хочу знать, где три правильных вывода верны, а где нет, и как я могу улучшить производительностьв трех отдельных случаях.
Я использую язык C ++ с красным черным деревом и деревом B, которые я разработал с нуля.Я использую библиотеку Boost для сопоставления файлов.
Обновление 1 :: Читал через этот пост в stackoverflow.Получил действительно хорошее понимание, которое заставляет меня чувствовать, что тип сравнения, который я сделал в случаях, может быть ошибочным.Ссылка была опубликована в списке самых популярных за ответ http://idlebox.net/2007/stx-btree/stx-btree-0.8.3/doxygen-html/speedtest.html