СОДЕРЖАНИЕ 2
ВВЕДЕНИЕ 3
ПОСТАНОВКА ЗАДАЧИ 5
ОБЗОР ЛИТЕРАТУРЫ 6
ГЛАВА 1 7
ФИЗИЧЕСКОЕ ХРАНЕНИЕ ИНФОРМАЦИИ В СУБД POSTGRESQL 7
ФИЗИЧЕСКОЕ ХРАНЕНИЕ ИНФОРМАЦИИ В СУБД MYSQL 9
ГЛАВА 2 10
ТЕСТОВЫЙ НАБОР ДАННЫХ 10
БИБЛИОТЕКА PYTHON-ZSTANDARD 11
СЖАТИЕ ФАЙЛОВ С РАЗНЫМИ УРОВНЯМИ СЖАТИЯ И АНАЛИЗ ПОЛУЧЕННЫХ РЕЗУЛЬТАТОВ 12
ГЛАВА 3 15
АЛГОРИТМ ПЕРЕСТАНОВКИ БАЙТОВ ДЛЯ ЭЛЕМЕНТОВ ОДИНАКОВОЙ ДЛИНЫ НА ПРИМЕРЕ POSTGRESQL 15
АЛГОРИТМ ПЕРЕСТАНОВКИ БАЙТОВ ДЛЯ ЛЮБЫХ ДАННЫХ НА ПРИМЕРЕ POSTGRESQL 17
АЛГОРИТМ ПЕРЕСТАНОВКИ БАЙТОВ ДЛЯ ЛЮБЫХ ДАННЫХ НА ПРИМЕРЕ MYSQL 20
ИССЛЕДОВАНИЕ ЭНТРОПИИ ТАБЛИЦ 22
ВЫВОДЫ 23
ЗАКЛЮЧЕНИЕ 24
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 25
ПРИЛОЖЕНИЯ 27
В связи с развитием информационных технологий тема хранения данных становится все более актуальной.
Согласно оценкам InternationalDataCorporation (IDC) количество цифровой информации в мире растет в геометрической прогрессии, и чтобы размеры всей этой информации не стали в скором времени проблемой, нужно постоянно совершенствовать эффективность сжатия данных.
В общем случае могут использоваться стандартные алгоритмы сжатия данных без анализа их оптимальности. Но одни и те же алгоритмы могут давать абсолютно разный результат на разных типах данных. Анализ структуры данных поможет подобрать оптимальный алгоритм для каждого случая. В данной работе предложен алгоритм, преобразующий формат хранения таблиц реляционных баз данных к виду, который будет эффективнее сжиматься стандартными алгоритмами.
Для выполнения поставленной задачи взята идея сжатия табличных данных по столбцам[5], на основе которой реализован алгоритм преобразования данных для эффективного сжатия на примере СУБД MySQL и PostgreSQL
Большинство алгоритмов сжатия основывается на кодировании одинаковых последовательности байтов. Физическое хранение данных в колоночных БД реализовано по столбцам, вследствие чего данные одного типа оказываются рядом, что повышает эффективность их сжатия.
Эффективность алгоритма сжатия определяется с помощью коэффициента сжатия CR(compressionratio):
CR=(длина исходного файла )/(длина сжатого файла).
ПОСТАНОВКА ЗАДАЧИ
Целью данной научно-исследовательской работы является разработка алгоритма перестановки байтов в файлах реляционных БД для повышения коэффициента сжатия.
Для выполнения поставленных целей необходимо решить ряд задач:
Изучить принципы физического хранения информации в СУБД PostgreSQL и MySQL
Создать тестовый набор файлов из различных наборов данных
Изучить принципы работы алгоритма сжатия zstandard
Реализовать алгоритм перестановки байт в файлах памяти PostgreSQL и MySQL и провести теоретический анализ его влияния на коэффициент сжатия
Был изучен общий принцип работы алгоритмов сжатия, на его основе была выбрана стратегия сжатия табличных данных по столбцам.
Было изучено физическое хранение данных в СУБД PostgreSQLи MySQL.
Была изучена работа библиотеки python-zstandard.
На основании полученных знаний был реализован алгоритм преобразования данных страниц для повышения коэффициента сжатия.
В больших промышленных БД (например, OLTP) предложенный алгоритм можно успешно применять, потому что в них, как правило, хранятся однообразные данные, и можно с уверенностью предполагать, что бо́льшая часть из них пройдет проверку.
В данной работе алгоритм реализован для PostgreSQLи MySQL, но его можно адаптировать для любых других реляционных СУБД, изучив необходимые сведения о физическом хранении таблиц БД из документации.
Также было проведено теоретическое обоснование предложенного алгоритма на основе исследования энтропии.
1. Mike Stonebraker, Daniel J. Abadi, Adam Batkin, Xuedong Chen, Mitch Cherniack, Miguel Ferreira, Edmond Lau, Amerson Lin, Sam Madden, Elizabeth O'Neil, Pat O'Neil, Alex Rasin, Nga Tran, and Stan Zdonik. 2005. C-store: a column-oriented DBMS. In Proceedings of the 31st international conference on Very large data bases (VLDB '05). VLDB Endowment, 553–564.
2. Tapiador, Daniel &O’Mullane, William & Brown, A.G.A. &Luri, X. &Huedo, Eduardo &Osuna, Pedro. (2014). A framework for building hypercubes using MapReduce. Computer Physics Communications. 185. 1429–1438. 10.1016/j.cpc.2014.02.010.
3. Daniel J. Abadi, Peter A. Boncz, and Stavros Harizopoulos. 2009. Column-oriented database systems. Proc. VLDB Endow. 2, 2 (August 2009), 1664–1665. https://doi.org/10.14778/1687553.1687625
4. D. Plase, L. Niedrite, and R. Taranovs, “A comparison of HDFS compact data formats: Avro versus Parquet”, MLA, vol. 9, no. 3, pp. 267-276, Jul. 2017.
5. Sebastian Wandelt, Xiaoqian Sun, Ulf Leser, Column-wise compression of open relational data, Information Sciences, Volumes 457–458, 2018, Pages 48-61, ISSN 0020-0255
6. https://www.postgresql.org/docs/current/storage-page-layout.html
7. https://dev.mysql.com/doc/internals/en/innodb.html
8. https://python-zstandard.readthedocs.io/en/latest/compressor.html#zstdcompressionwriter
9. https://www.kaggle.com
10. https://github.com/facebook/zstd
11. https://www.postgresql.org/ftp/projects/pgFoundry/dbsamples/
12. https://www.kaggle.com/datasets/dansbecker/nba-shot-logs?select=shot_logs.csv
13. https://www.kaggle.com/datasets/argolof/predicting-terrorism
14. https://www.seagate.com/files/www-content/our-story/trends/files/idc-seagate-dataage-whitepaper.pdf