Зависимости в базах данных представляют собой закономерности в данных. Владение подобной метаинформацией облегчает решение многих задач, таких как: нормализация схемы, очистка данных и оптимизация запросов [3, 25, 26]. Многие подвиды зависимостей, такие как рассматриваемые в данной работе функциональные зависимости, соответствуют известным в предметной области правилам, и зачастую эксперт может определить большинство зависимостей, имеющих место в данной таблице.
Если подобное исследование зависимостей недоступно, используется автоматическое обнаружение зависимостей — его целью является составление списка всех зависимостей, удерживающихся на заданной таблице. К сожалению, в данной постановке задача имеет сложность O(N • 2м), где N — количество кортежей, M — количество атрибутов [15].
Тем не менее, в области были предложены дюжины алгоритмов поиска функциональных зависимостей, и в каждом проблема решается уникальным способом. Таким образом, становится актуальной платформа:
1. позволяющая использовать эффективные реализации алгоритмов для непосредственного поиска зависимостей;
2. реализующая различные алгоритмы с использованием одинаковых технологий для их последующего сравнения и проведения прочих экспериментов.
При анализе предметной области было найдено единственное решение, подходящее на роль подобной платформы. Metanome — открытая платформа, на уровне бэкэнда реализованная на языке программирования Java, основной целью которой является анализ метаданных [8]. Несмотря на множество положительных сторон, Metanome не удовлетворяет вышеупомянутым требованиям в полной мере по следующим причинам:
• Программы, реализованные на языке Java, обладают достаточной производительностью при решении бизнес-задач, однако для решения задач, требующих высокопроизводительных вычислений, существуют другие языки и технологии, позволяющие добиться более высокой эффективности.
• Используемые при работе кода, написанного на Java, технологии наподобие динамической компиляции и сборки мусора вносят неопределенность в скорость работы программы, что усложняет задачу оценки производительности [14].
Таким образом, было решено спроектировать и реализовать альтернативную платформу для высокопроизводительного поиска функциональных зависимостей, получившую название Desbordante1. Чтобы избежать недостатков, присущих Metanome, было принято решение использовать для реализации язык программирования C++:
• Благодаря широким возможностям по низкоуровневой оптимизации и предоставлению программисту полного контроля над исполняемым кодом, С++ является одним из самых высокопроизводительных языков программирования. При этом C++ предоставляет обширный инструментарий для разработки масштабных, расширяемых проектов.
• Наличие полного контроля над исполняемым кодом также позволяет уменьшить флуктуации при проведении экспериментов.
1.1. Постановка задачи
Целью данной работы является реализация платформы для высокопроизводительного поиска функциональных зависимостей. Для достижения данной цели были поставлены следующие задачи:
1. Выполнить обзор алгоритмов поиска функциональных зависимостей, а также существующих решений.
2. Спроектировать и реализовать платформу для высокопроизводительного поиска функциональных зависимостей.
3. Сравнить производительность реализованной платформы и существующего решения Metanome.
• выработать метрики и показать превосходство предложенной платформы;
• показать, что невозможно достичь аналогичного уровня производительности с помощью настройки Metanome;
• исследовать причины повышенного уровня производительности.
4. С помощью разработанной платформы исследовать возможность уменьшения трудоёмкости алгоритмов за счёт ограничения максимального размера левой части зависимости.
В рамках данной работы были достигнуты следующие результаты:
1. Выполнен обзор алгоритмов и инструментов для поиска функциональных зависимостей.
2. Спроектирована и реализована платформа Desbordante, позволяющая использовать алгоритмы TANE, Pyro и предоставляющая возможности для добавления новых алгоритмов.
3. Проведено сравнение производительности Desbordante и существующего решения Metanome.
• сформулированы метрики для сравнения и проведены эксперименты, показавшие превосходство Desbordante;
• проведены эксперименты, показавшие, что невозможно достичь аналогичного уровня производительности с помощью настройки Metanome;
• сформулированы и экспериментально проверены гипотезы, объясняющие причины повышенного уровня производительности.
4. Исследована возможность уменьшения трудоёмкости алгоритмов поиска ФЗ через ограничение максимального размера левой части.
Кроме того, по теме данной работы была написана статья “Desbordante: a Framework for Exploring Limits of Dependency Discovery Algorithms” [9], представленная на конференции FRUCT’29 и принятая к публикации в сборнике трудов.