Skip to content

nurzhan-saktaganov/dbms-task1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dbms-task1 Задание 1. Б-дерево. Если вкратце: Размеры ключей и значений нефиксированные. (ограничение сверху: key.size + data.size + metadata <= chunk_size) В предельном случае превратится в бинарное дерево. Вместо критерия t-1 взят критерий заполненности ~50%. Возможно отклонение в меньшую сторону. Например: есть блок и 3 ключа, занимающие 40% 40% 40% = 120%. Этот блок надо делить (разделение потомка). Тогда средний ключ уйдет вверх, а в новом левом и правом потомке ушедшего ключа будет заполненность ~40%. Как-то так.

Задание 2. Размер кэша предпологается больше одного chunk_size. В случае когда размер кэша 0 или 1 chunk_size, возникает ошибка. Реализованный алгоритм LRU. Отключить кэширование можно закоментив в файле "headers/settings.h" строку "#define WITH_CACHE". Блоки связаны в линейный список. После этого надо перекомпилировать .so-файл через make. Есть другая вариация кэширования, где поиск по линейному списку осуществляется через дополнительное АВЛ-дерево. При маленьком размере кэша (~10x относительно блока), преимущество в скорости у поиска в линейном списке. При большом размере - у поиска через АВЛ-дерево. Это обусловлено тем, что когда количество блоков в кэше немного, быстрее проитерировать по листу, чем рекурсивно вызывать фунцию поиска в АВЛ-деревe. Когда количество блоков много - , соответственно, наоборот. Выключить режим кэширования с АВЛ-деревом можно закоментив строку "#define WITH_AVL" в файле "headers/settings.h". Однако на практике размер кэша намного больше размера блока, поэтому не имеет смысла его выключать. Обновление 14.11.2014. Добавлен вариант, где вместо avl дерева используется utihash

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published