Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / B-Tree и фрагментация памяти. / 10 сообщений из 10, страница 1 из 1
18.04.2014, 01:13
    #38618188
gbl37004
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
B-Tree и фрагментация памяти.
Если мы навтыкали в B-tree ключей, а потом несколько случайных из них удалили, то маловероятно, что дерево будет занимать памяти столько же, сколько бы оно занимало, если бы мы в пустое дерево добавили все оставшиеся ключи с начала.

То есть, когда мы удаляем узел в каком-нибудь std::map, деаллокатору говорят "верни память, выделенную под этот узел", память освобождается, в дереве крутятся узлы и всё. В B-Tree узлы хитрее, а удаление одного ключа далеко не всегда означает освобождение какой-либо памяти или удаление каких-либо узлов.

Насколько B-Tree подходит для приложений, в которых идёт оперативное добавление-удаление ключей?

Имеется приложение, хранящее 1 млрд ключей в b-tree. В это дерево активно добавляются ключи и при переходе их количества за предел, запускается процедура поиска и удаления старых. В дереве поддерживается одно и то же логическое количество записей.

При этом приложение медленно и верно растёт по памяти, а valgrind молчит. Возникают подозрения на описанный в первом абзаце эффект. Эмуляция проводилась на дереве меньшего размера, эффект проявляется, но потребление памяти постепенно стабилизируется и перестаёт расти.
...
Рейтинг: 0 / 0
18.04.2014, 01:52
    #38618198
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
B-Tree и фрагментация памяти.
gbl37004Если мы навтыкали в B-tree ключей, а потом несколько случайных из них удалили, то маловероятно, что дерево будет занимать памяти столько же, сколько бы оно занимало, если бы мы в пустое дерево добавили все оставшиеся ключи с начала.

А с чего такие далеко идущие выводы?

Если valgring молчит, то каким образом ты узнаёшь, что память течёт?
...
Рейтинг: 0 / 0
18.04.2014, 02:02
    #38618200
gbl37004
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
B-Tree и фрагментация памяти.
MasterZivgbl37004Если мы навтыкали в B-tree ключей, а потом несколько случайных из них удалили, то маловероятно, что дерево будет занимать памяти столько же, сколько бы оно занимало, если бы мы в пустое дерево добавили все оставшиеся ключи с начала.

А с чего такие далеко идущие выводы?

Если valgring молчит, то каким образом ты узнаёшь, что память течёт?
1. Далеко идущие выводы из устройства b-tree.
2. Смотрю на количество занимаемой процессом памяти. Логически постоянно одно и то же количество объектов, а память всё жрёт и жрёт.
...
Рейтинг: 0 / 0
18.04.2014, 07:36
    #38618249
B-клоук
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
B-Tree и фрагментация памяти.
Паше, ты уверен, что именно B-дерево реализовал?
Узел (кроме корневого) всегда заполнен не менее чем наполовину в B-дереве
Если жалко памяти - B* дерево рассмотри
...
Рейтинг: 0 / 0
18.04.2014, 12:36
    #38618625
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
B-Tree и фрагментация памяти.
gbl37004Насколько B-Tree подходит для приложений, в которых идёт оперативное добавление-удаление ключей?

Если ты добавил ключик и велика вероятность (90%) что следущая транзакция этот ключик удалит
то лучше хранить последние изменения в маленьком LRU буфере и по его заполнению вытесняемые
ключи складывать в дерево.

Или разбить дерево на несколько поддеревьев. Одно - оперативное а другое для долгосрочных данных.
Для каждого - подобрать персонально способ хранения и размер блока.
...
Рейтинг: 0 / 0
18.04.2014, 13:44
    #38618741
боевые
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
B-Tree и фрагментация памяти.
B-клоукПаше, ты уверен, что именно B-дерево реализовал?
Узел (кроме корневого) всегда заполнен не менее чем наполовину в B-дереве
Если жалко памяти - B* дерево рассмотри
Я не реализовал, взял готовое гугловое.
...
Рейтинг: 0 / 0
18.04.2014, 13:45
    #38618744
боевые
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
B-Tree и фрагментация памяти.
maytongbl37004Насколько B-Tree подходит для приложений, в которых идёт оперативное добавление-удаление ключей?

Если ты добавил ключик и велика вероятность (90%) что следущая транзакция этот ключик удалит
то лучше хранить последние изменения в маленьком LRU буфере и по его заполнению вытесняемые
ключи складывать в дерево.

Или разбить дерево на несколько поддеревьев. Одно - оперативное а другое для долгосрочных данных.
Для каждого - подобрать персонально способ хранения и размер блока.
Такие соображения разумны, но текущая ситуация состоит в том, что имеется некая реализация, которая охреневает по памяти и хочется понять причину.
...
Рейтинг: 0 / 0
18.04.2014, 14:14
    #38618796
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
B-Tree и фрагментация памяти.
боевые, ты - это топик-стартер?
...
Рейтинг: 0 / 0
18.04.2014, 15:03
    #38618890
боевые
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
B-Tree и фрагментация памяти.
maytonбоевые, ты - это топик-стартер?
Д...
...
Рейтинг: 0 / 0
18.04.2014, 15:31
    #38618936
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
B-Tree и фрагментация памяти.
боевыеТакие соображения разумны, но текущая ситуация состоит в том, что имеется некая реализация, которая охреневает по памяти и хочется понять причину.
А у тебя есть какие-то цифры? Ну к примеру ключи - текстовый файлик 1 млрд строк длиной 8 Гиг.
А софт во время работы аллоцировал 16 гиг. Или что-то в этом роде.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / B-Tree и фрагментация памяти. / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]