ОБЩИЕ ВОПРОСЫ МЕТРОЛОГИИ И ИЗМЕРИТЕЛЬНОЙ ТЕХНИКИ
УДК 004.657
К. М. Фролов, В. Н. Князев
МОДИФИКАЦИЯ АЛГОРИТМОВ ВЗАИМОДЕЙСТВИЯ СИСТЕМ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ С ИНДЕКСНЫМИ СТРУКТУРАМИ ДАННЫХ
K. M. Frolov, V. N. Knyazev
MODIFICATION OF THE ALGORITHMS OF INTERACTION OF THE DATABASE WITH THE INDEX DATA STRUCTURES
Аннотация. Актуальность и цели. Для хранения данных, полученных в ходе работы измерительных систем, используются базы данных. Для эффективного доступа к хранимой информации используются различные механизмы оптимизации хранения данных и поисковых запросов к ним. Современные системы управления базами данных (СУБД) имеют встроенные механизмы индексирования данных. Индексирование данных позволяет обеспечить более высокую скорость доступа к строкам таблицы за счет уменьшения объема записи в индексах, а также за счет упорядочивания индексных записей. Поэтому исследования возможностей улучшения существующих индексных структур и алгоритмов взаимодействия СУБД с индексными структурами данных являются актуальными. Цель работы - рассмотрение возможных методов оптимизации операций модификации индексных структур и предварительная оценка эффективности применения модифицированных алгоритмов. Материалы и методы. Для оценки эффективности модифицированных алгоритмов использовалась О-нотация, позволяющая сравнивать асимптотическое поведение функций. Результаты. В ходе исследований получены модифицированные алгоритмы разбиения узлов и удаления элементов, а также разработан алгоритм индексации элементов для В+-деревьев. Для хеш-таблиц разработаны алгоритмы добавления и удаления элементов, которые учитывают модификации этой индексной структуры. Выводы. Полученные алгоритмы позволяют реализовать эффективное взаимодействие разрабатываемой СУБД специального назначения с индексными структурами данных. Модифицированные алгоритмы позволяют достичь увеличения скорости выполнения запросов, а также способствуют уменьшению объема используемой оперативной памяти в случае индексов, имеющих в своей структуре хеш-таблицы.
Abstract. Background. Modern database management system (DBMS) have built-in indexing mechanisms. Data Indexing allows for higher-speed access to the rows of the table by reducing the amount of entries in the index, as well as by organizing index records. Therefore, we are investigating the possibilities of improving the existing index structures and algorithms of interaction with database index data structures are relevant. Purpose - to consider possible
modifications to optimize the methods of index structures and operations of a preliminary assessment of the effectiveness of the modified algorithms. Materials and methods. To evaluate the effectiveness of the modified algorithm to use O-notation, this allows comparing the asymptotic behavior of functions. Results. Studies obtained modified algorithms for partitioning nodes and remove items, as well as the algorithm of indexing elements for B + trees. For hash tables developed algorithms to add and remove elements that allow for modification of the index structure. Conclusions. These algorithms allow to realize effective interaction database developed special purpose index data structures. The modified algorithms can achieve an increase in query performance, as well as help to reduce the amount of RAM used in the case of indices, having in the hash table structure.
Ключевые слова: СУБД, В-дерево, хеш-таблица, операция, алгоритм, запрос, оперативная память, хранилище.
Key words: DBMS, B-tree, hash table, the operation algorithm, query, RAM, storage.
Введение
При работе любой информационно-измерительной системы крайне важным является сохранение полученных данных с возможностью последующего эффективного доступа к ним. Наилучшим решением в такой ситуации является хранение собранных данных в базах данных. Для работы с данными используются системы управления базами данных, которые имеют множество механизмов для оптимизации доступа к хранимой информации [1, 2]. Индексирование данных в системах управления базами данных (СУБД) предоставляет разработчику базы данных мощный инструмент для оптимизации запросов к хранимой информации. Большинство современных СУБД использует классические индексные структуры данных и имеющиеся реализации алгоритмов для взаимодействия с ними. Такие индексные структуры, как В-деревья и хеш-таблицы, позволяют решать широкий круг задач. Однако используемые в современных СУБД индексные структуры и алгоритмы взаимодействия СУБД с индексными структурами имеют ограничения, связанные с относительно долгим перестроением структуры индекса в случае добавления или удаления новых данных. Отсутствие повышенной гибкости индексов ведет к замедлению работы механизмов индексирования на операциях модификации при работе с большими массивами данных. Кроме того, с учетом улучшения аппаратной базы современных электронно-вычислительных машин (ЭВМ) имеющиеся индексные структуры и алгоритмы взаимодействия с ними могут быть пересмотрены и модифицированы с целью увеличения скорости выполнения запросов [3].
Описание исследуемых индексных структур данных
Рассмотрим механизмы индексирования разрабатываемой реляционной СУБД специального назначения, которые основаны на таких индексных структурах, как В -дерево и хеш-таблица.
Примеры этих структур данных представлены на рис. 1, 2.
В+-дерево состоит из следующих основных компонентов:
- элемент - это значение индекса, созданного для конкретной строки таблицы;
- узел - это набор элементов, представленных в упорядоченном виде. Узлы бывают корневые, промежуточные и листовые [4].
Классическая хеш-таблица состоит из слотов, представляющих собой комбинацию ключа, полученного в ходе выполнения хеш-функции, значения индекса и указателя на слот, имеющий такой же ключ. В модифицированной хеш-таблице помимо слотов имеются такие элементы, как бакеты. Бакетом называется элемент, представляющий собой указатель на первый слот в цепочке коллизий. Коллизией в хеш-таблице называется ситуация, когда у разных элементов значения хеш-функции одинаковы.
Представленные структуры данных отличаются от классических В-деревьев и хеш-таблиц, но операции над ними остаются прежними. Для В-деревьев справедливы следующие основные операции:
- добавить элемент в В-дерево;
- разбить узел В-дерева;
- найти элемент в В-дереве;
- удалить элемент из В-дерева.
Помимо перечисленных операций для В -дерева, также возможно реализовать индексацию его элементов, поскольку значимые данные располагаются в узлах листового уровня [5].
Для взаимодействия с хеш-таблицами могут быть определены следующие основные операции:
- добавить элемент в хеш-таблицу;
- удалить элемент из хеш-таблицы:
- найти элемент в хеш-таблице.
Кроме того, для хеш-таблицы должен быть предусмотрен механизм расширения, а в случае модифицированной хеш-таблицы также требуется определить методы взаимодействия с массивом бакетов, используемых для индексации слотов.
Модификация алгоритмов взаимодействия СУБД с В+-деревьями
В случае В-дерева модификации могут быть подвергнуты операции разбиения узла и удаления элемента из дерева. Также для решения специальных задач, которые могут быть поставлены перед разрабатываемой СУБД, требуется реализовать алгоритм индексации элементов В+-дерева.
Алгоритм разбиения узла представлен на рис. 3.
Создать новый узел того же уровня что и разбиваемый
нет W
Перераспределить узлы нижнего уровня -
Узел является листовым?
т\
да
Перенаправить указатель на соседний узел листового уровня
V
-X
Перераспределить элементы узла
Добавить новый элемент в узел верхнего уровня
Ж.
Добавить нового потомка в узел верхнего уровня
Рис. 3. Алгоритм разбиения узла В+-дерева
Отличие алгоритма разбиения узла В+-дерева заключается в том, что при разбиении узла листового уровня помимо перераспределения элементов также может происходить перенаправление указателей на соседние узлы листового уровня [6]. Особенностью данного алгоритма является неравное распределение элементов между разбиваемым и новым узлами. Так, в разбиваемом узле остается порядка 2/3 элементов и указателей на узлы нижнего уровня, если таковые имеются, а в новый узел переходит порядка 1/3 элементов. Такое распределение элементов обеспечивает лучшую компрессию узлов.
Алгоритм удаления элемента из В+-дерева представлен на рис. 4.
Классический алгоритм удаления элемента из В+-дерева предусматривает проверку наличия в узле числа элементов, равного n/2, где n - объем узла. В случае, если число элементов становится меньше указанного значения, элементы узла переходят в соседний узел, а текущий узел удаляется. В худшем случае сложность алгоритма составит
Delete(n) = O(logh n + n -1),
где h - высота дерева. Такой случай предусматривает перенос n/2 элементов в соседний узел с его последующим разбиением. В модифицированном варианте текущий узел удаляется только в том случае, когда все его элементы будут удалены. Такого рода усовершенствование позволяет уменьшить сложность алгоритма до
Delete(n) = O(logh n +1).
Инициализировать стек, описывающий путь до удаляемого элемента
V
Добавить в стек текущий узел
нет
Провести итерацию поиска элемента
V
-О-
нет
Текущий узел является листовым?
А
да
V
А
Элемент найден?
V
да
Сместить элементы узла на удаляемый элемент
V
г N
Удалить последний элемент
У
Уменьшить значение счетчика элементов
нет \/
О-
ж
Счетчик элементов узла равен нулю?
А
да
Удалить узел
С
Удалить в узле-предке значение, отвечающее за узел нижнего уровня
V
Удалить узел из стека
а
да \/
"К
Стек пуст?
нет
Рис. 4. Алгоритм удаления элемента из В+-дерева
Недостатком этой модификации является возможность такого сценария, при котором узел будет содержать только один элемент, что увеличит затраты памяти, поскольку оптимизируется именно удаление узлов из В -дерева. С учетом достаточно больших объемов памяти современных ЭВМ этим недостатком можно пренебречь [7].
Реализация алгоритма индексации В+-дерева предполагает некоторые структурные изменения корневого и промежуточных узлов. Узлы данных типов должны также хранить ин-
формацию о суммарном числе элементов всех своих потомков (узлов нижнего уровня). Алго-
ритм индексации В -дерева представлен на рис. 5.
Рис. 5. Алгоритм индексации В+-дерева
Таким образом, индексация элементов В-дерева сводится к последовательному уменьшению указанного индекса вплоть до нахождения узла листового уровня, в котором должен находиться элемент с заданным номером. Операция индексации может быть реализована только для В-дерева, поскольку значимые элементы в этой структуре находятся в узлах листового уровня [8].
Модификация алгоритмов взаимодействия СУБД с хеш-таблицей
Алгоритмы взаимодействия с В+-деревом в большинстве своем не требуют структурных изменений узлов и элементов. Для алгоритмов взаимодействия СУБД с модифицированной хеш-таблицей характерно взаимодействие не только с областью данных, но и с областью ключей (значений хеш-функции). Таким образом, при добавлении и удалении слотов хеш-таблицы также требуется проверять необходимость добавления или удаления бакета, отвечающего за индексацию слота [9]. Алгоритм добавления нового элемента в хеш-таблицу представлен на рис. 6.
Добавление нового элемента в хеш-таблицу связано с поиском позиции для вставки. В процессе поиска может образоваться два сценария:
- в массиве бакетов отсутствует ключ для полученного значения хеш-функции;
- в массиве бакетов имеется ключ для полученного значения хеш-функции.
В первом случае вставка нового элемента связана с добавлением в массив бакетов нового значения, которое является указателем на начало цепочки коллизий.
Во втором случае требуется дополнительная проверка уникальности добавляемого значения, поскольку элементы с таким же значением хеш-функции уже существуют [10].
Алгоритм удаления элемента из хеш-таблицы представлен на рис. 7.
^ Определить хеш -код добавляемого элемента
э
V
Определить номер бакета , соответствующего хеш-коду
V
Проверить наличие дубликатов элемента
— Вывести сообщение об ошибке ^
нет
Дубликат отсутствует
да
V
Добавить новый слот в конец массива
Записать в позицию предыдущего слота информацию бакета
нет
V
да
N
В бакете есть данные?
Записать в позицию предыдущего слота значение "-1"
Записать в бакет позицию добавленного слота
Рис. 6. Алгоритм добавления элемента в хеш-таблицу
Рис. 7. Алгоритм удаления элемента из хеш-таблицы
Удаление элемента из хеш-таблицы начинается с поиска значения хеш-функции удаляемого элемента в массиве бакетов. Если такое значение имеется, то поиск удаляемого элемента продолжается в цепочке коллизий [11]. Если слот с удаляемым элемент будет найден, то он может располагаться в начале, конце или в произвольной части цепочки коллизий. В зависимости от положения слота с удаляемым элементом перенаправление указателей в цепочке коллизий может осуществляться по следующим вариантам:
- если удаляемый слот находится в начале цепочки, то в бакете, соответствующем данной цепочке, указатель перенаправляется на следующий слот;
- если удаляемый слот находится в конце цепочки, то никакого перенаправления указателей не производится;
- если удаляемый слот находится в произвольной части цепочки коллизий, то указатель предыдущего слота перенаправляется на следующий слот цепочки.
Заключение
Модификация алгоритмов взаимодействия СУБД с индексными структурами данных позволяет добиться увеличения скорости выполнения запросов. В случае механизмов индексирования, основанных на В+-деревьях, разница в скорости между классическими алгоритмами и модифицированными будет логарифмически увеличиваться в пользу модифицированных алгоритмов. В случае хеш-таблиц модифицированные алгоритмы дают возможность не только увеличить скорость выполнения запросов, но и более эффективно использовать оперативную память, что позволяет уменьшить объем ее использования.
Библиографический список
1. Крупской, В. Н. Введение в сложность вычислений / В. Н. Крупской. - М. : Факториал Пресс, 2006. - 128 с.
2. Брусакова, И. А. Система управления базами измерительных знаний / И. А. Брусакова, С. О. Мамаева // Прикладная информатика - М. : Синергия, 2006. - № 5. - С. 93-97.
3. Князев, В. Н. Возможности оптимизации хранилища СУБД / В. Н. Князев, К. М. Фролов // Молодежь в науке: Новые аргументы : сб. науч. работ III Междунар. молодежного конкурса. - Липецк : Аргумент, 2016. - Ч. 1 - С. 61-64.
4. Фролов, К. М. Многомерные индексы в современных СУБД / К. М. Фролов, В. Н. Князев // Международный научно-исследовательский журнал. Сер.: Технические науки. - 2015. - № 11-2 (42). - С. 122-123.
5. Фролов, К. М. Оптимизация запросов к базам данных на основе механизма индексирования / К. М. Фролов, В. Н. Князев // Новые информационные технологии и системы : сб. науч. ст. XII Междунар. науч.-техн. конф. - Пенза : Изд-во ПГУ, 2015. - С. 201-204.
6. Фролов, К. М. Использование механизмов индексирования для оптимизации запросов к базам данных / К. М. Фролов, В. Н. Князев // Информационные технологии в науке и образовании. Проблемы и перспективы : сб. науч. ст. III Ежегодной межвуз. студ. науч.-практ. конф. - Пенза : Изд-во ПГУ, 2016. - С. 224-226.
7. Вийера, Р. Программирование баз данных Microsoft SQL Server 2005: базовый курс / Р. Вийера. - М. : И. Д. Вильямс, 2010. - 832 с.
8. Гарсиа-Молина, Г. Системы баз данных: полный курс / Г. Гарсиа-Молина, Д. Д. Ульман, Д. Уидом. - М. : Вильямс, 2013. - 1089 с.
9. Ахо, А. В. Структуры данных и алгоритмы / А. В. Ахо, Д. Хопкрофт, Д. Д. Ульман. -М. : Вильямс, 2015. - 400 с.
10. Дейт, К. Д. Введение в системы баз данных / К. Д. Дейт. - М. : Вильямс, 2006. - 1326 с.
11. Кренке, Д. Теория и практика построения баз данных / Д. Кренке. - СПб. : Питер, 2005. -864 с.
Фролов Константин Михайлович
магистрант,
кафедра математического обеспечения и применения ЭВМ,
Пензенский государственный университет (Россия, г. Пенза, ул. Красная, 40) E-mail: [email protected]
Frolov Konstantin Mikhailovich
master degree student, sub-department of mathematical support and computer application, Penza State University (40 Krasnaya street, Penza, Russia)
Князев Виктор Николаевич
кандидат технических наук, доцент, кафедра математического обеспечения и применения ЭВМ,
Пензенский государственный университет (Россия, г. Пенза, ул. Красная, 40) E-mail: [email protected]
Knyazev Victor Nikolaevich
candidate of technical sciences, associate professor,
sub-department of mathematical support
and computer application,
Penza State University
(40 Krasnaya street, Penza, Russia)
УДК 004.657 Фролов, К. М.
Модификация алгоритмов взаимодействия отстем управления базами данных с индексными структурами данных / К. М. Фролов, В. Н. Князев // Измерение. Мониторинг. Управление. Контроль. - 2017. - № 1 (19). - С. 5-13.