Зависимости в базах данных представляют собой закономерности в данных. Владение подобной метаинформацией облегчает решение многих задач, таких как: нормализация схемы, очистка данных и оптимизация запросов [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 и принятая к публикации в сборнике трудов.
[1] Abedjan Ziawasch, Golab Lukasz, Naumann Felix. Profiling relational data: a survey // The VLDB Journal. — 2015. —Vol. 24. —P. 557-581.
[2] Armstrong W. W. Dependency Structures of Data Base Relationships // IFIP Congress. — 1974.
[3] BigDansing: A System for Big Data Cleansing / Zuhair Khayyat, Ihab Ilyas, Alekh Jindal et al. — 2015. — 06.
[4] CPU frequency scaling. — 2021. — Access mode: https://wiki. archlinux.org/index.php/CPU_frequency_scaling.
[5] Caruccio Loredana, Cirillo Stefano. Incremental Discovery of Imprecise Functional Dependencies // J. Data and Information Quality. — 2020. — Oct.—Vol. 12, no. 4. — Access mode: https://doi.org/10. 1145/3397462.
[6] Chu Xu, Ilyas Ihab F., Papotti Paolo. Discovering Denial Constraints // Proc. VLDB Endow. — 2013. — Aug. — Vol. 6, no. 13. — P. 1498-1509. — Access mode: https://doi.org/10.14778/2536258. 2536262.
[7] Data Auditor / Lukasz Golab, H. Karloff, Flip R. Korn, D. Srivastava // Proceedings of the VLDB Endowment. — 2010. — Vol. 3.—P. 1641 - 1644.
[8] Data profiling with metanome / Thorsten Papenbrock, Tanja Bergmann, Moritz Finke et al. // Proceedings of the VLDB Endowment. — 2015. — 08. — Vol. 8. — P. 1860-1863.
[9] Desbordante: a Framework for Exploring Limits of Dependency Discovery Algorithms (paper accepted) / Maxim Strutovskiy, Nikita Bobrov, Kirill Smirnov, George Chernishev // FRUCT’29: Proceedings of the 29th Conference of Open Innovations Association FRUCT.-fruct.org, 2021.
[10] DynFD: Functional Dependency Discovery in Dynamic Datasets / Philipp Schirmer, Thorsten Papenbrock, Sebastian Kruse et al. // Advances in Database Technology - 22nd International Conference on Extending Database Technology, EDBT 2019, Lisbon, Portugal, March 26-29, 2019 / Ed. by Melanie Herschel, Helena Galhardas, Berthold Reinwald et al. — OpenProceedings.org, 2019. — P. 253264. — Access mode: https://doi.org/10.5441/002/edbt.2019.23.
[11] FDTool: a Python application to mine for functional dependencies and candidate keys in tabular data / Matt Buranosky, Elmar Stellnberger, Emily Pfaff et al. // F1000Research. — 2019. — 06. —Vol. 7. —P. 1667.
[12] Flach Peter A., Savnik Iztok. Database Dependency Discovery: A Machine Learning Approach // AI Commun. — 1999. — Aug. — Vol. 12, no. 3. —P. 139-160.
[13] Functional dependency discovery: An experimental evaluation of seven algorithms / Thorsten Papenbrock, J. Ehrlich, J. Marten et al. — 2015. —01. —P. 1082-1093.
[14] Georges Andy, Buytaert Dries, Eeckhout Lieven. Statistically Rigorous Java Performance Evaluation. -- Vol. 42. -- 2007. -- 10.
[15] Incremental Discovery of Functional Dependencies with a Bit-vector Algorithm / Loredana Caruccio, Stefano Cirillo, Vincenzo Deufemia, Giuseppe Polese // Proceedings of the 27th Italian Symposium on Advanced Database Systems, Castiglione della Pescaia (Grosseto), Italy, June 16-19, 2019 / Ed. by Massimo Mecella, Giuseppe Amato, Claudio Gennaro. — Vol. 2400 of CEUR Workshop Proceedings. — CEUR-WS.org, 2019. — Access mode: http://ceur-ws.org/Vol-2400/paper-21.pdf.
...