Научная статья на тему 'Оптимизация процесса дедупликации на основе баз данных'

Оптимизация процесса дедупликации на основе баз данных Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
0
0
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
дедупликация / база данных / поле / строка / текстовые данные / запрос / программное обеспечение / неструктурированные данные

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Н.П. Плотникова, В.А. Кевбрин

Нельзя представить настоящее время без программного обеспечения. Огромные потоки информации проходят через компьютерные вычислительные системы. Совершенно невозможно обработать неструктурированные бесконечно поступающие данные, поэтому необходимо выделять конкретные задачи и подготавливать информацию к обработке. Одним из подобных действий является дедупликация. В данной статье рассматриваются возможные оптимизации метода удаления дубликатов с использованием баз данных.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Оптимизация процесса дедупликации на основе баз данных»

M Инженерный вестник Дона, №2 (2024) ivdon.ru/ru/magazine/arcliive/n2y2024/9002

Оптимизация процесса дедупликации на основе баз данных

Н.П. Плотникова, В.А. Кевбрин Мордовский государственный университет имени Н.П. Огарёва

Аннотация: Нельзя представить настоящее время без программного обеспечения. Огромные потоки информации проходят через компьютерные вычислительные системы. Совершенно невозможно обработать неструктурированные бесконечно поступающие данные, поэтому необходимо выделять конкретные задачи и подготавливать информацию к обработке. Одним из подобных действий является дедупликация. В данной статье рассматриваются возможные оптимизации метода удаления дубликатов с использованием баз данных.

Ключевые слова: дедупликация, база данных, поле, строка, текстовые данные, запрос, программное обеспечение, неструктурированные данные.

Введение

Вопрос дедупликации[1] данных уже рассматривался в статье [2]. В текущей статье анализируются возможные варианты и подходы к оптимизации данного процесса. Стоит сразу отметить основное отличие, в предыдущем варианте алгоритм подходил для обработки потоков данных, которые будут поступать постоянно. Сейчас анализируется вариант, когда все данные уже имеются сразу и сохранены в некотором виде.

Описание тестового стенда и исходных данных

Имеется текстовый файл, который хранит в себе строки в формате ]боп [3, 4], показано на рис.1.

1 ("Id" : 17, "gtin 11203, "batch id" : 11204 "part :"0460594 90018

2 ( "id" : . ' , "gtin 11203, "batch id" : 11204 "part _01" ; "0460594 90018

3 ("id" : 19, "gtin. id" 11203. "batch id" : 11204 "part i "0460594 90018

4 ("id" : 20, "gtin 11203, "batch id" : 11204, "part :"0460594 90018

5 ("id" :21, "gtin 11203, "batch id" : 11204 "part :"0460594 90018

6 ("id" ' 22, "gtin_ 11203, "batch id" : 11204 "part ~01" : "0460594 90018

7 ("id" -.23, "gtin 11203, "batch : 11204 "part "01 :"0460594 90018

а ("id" ¡24, "gtin 11203, "batch id" ; 11204 "part 01" : "0460594 90018

9 ("id" : 24, "gtin id" 11203, "batch id" : 11204 "part 01" : "0460594 90018

10 ("id" : 25, "gtin 11203, "batch Id" : 11204 "part ~01 :"046059490018

"part_21

"part_2

'0000000013172", '0000000017821й, '0000000019670", '0000000022386", '0000000031054", '0000000034245", ■0000000041157", '0000000041B03", '0000000041803", ■0000000048306",

■part_91" ■part_91" ■part_91" 'part 91" 'part_91"

'part_9ln 'part_91" 'part_91" 'part_91n 'part_91"

"part_ "part_ "pat:t_ "part_92" "part_92" "part_ "part~92M

Рис. 1. - Пример исходных данных

Объём файла составляет 17.3 гигабайта (далее Гб). Количество строк -133327409, из них 33327409 дубликаты. Все описанные дальше тесты были

реализованы на языке программирования Python 3.9 в среде разработки PyCharm. В качестве СУБД протестированы Clickhouse [5, 6], Postgres [7, 8]. Для удобства и анализа использованы: wsl 2, docker [9].

Основной алгоритм

Основная последовательность действий не будет изменяться во время тестирования. Изменениям подлежат параметры работы, настройки баз данных (далее БД). Алгоритм дедупликации:

1) Построковое чтение текстового файла;

2) Накопление определенного количества данных (работа осуществляется с блоками batch_size = 10А6 строк);

3) Сохранение блока данных в БД;

4) Если текстовый файл не прочитан полностью, возвращение к пункту

1;

5) Дедупликация данных - может происходить автоматически во время записи данных в БД или при получении данных из БД;

6) Сохранение результата дедупликации блоками в множество текстовых файлов, разбитых по размеру batch_size.

Описание предыдущих результатов и показателей новых тестов

Оптимизация происходит в несколько этапов, первым из которых является установление точки отсчета. За такую точку были взяты результаты дедупликации из статьи [2], показаны в таблице 1, которые имели наилучшие показатели. Основными метриками являются:

1) Средние затраты мощностей CPU;

2) Средние затраты оперативной памяти;

3) Время выполнения.

Так как в рамках данной статьирассматривается поэтапная обработка всего объема данных, то текущие тесты стоит дополнительно разделить на

этапы записи и чтения БД.

Таблица № 1 Результаты алгоритма дедупликации из статьи 1

Параметр / Тип базы данных Clickhouse SSDB Postgres №1 Postgres №2

БД CPU (среднее), % 689.7 38.61 44.34 93.49

БД RAM (среднее), Гб 5.314 1.981 7.65 10.51

Время выполнения, с 3046.6 5815.6 6762 8550.1

Занимаемый объем физической памяти, Гб 3.1 5.1 10.8 14.6

Оптимизация

В первую очередь стоит попробовать работу со строками напрямую. Работа в БД осуществляется с таблицей, состоящей из одного текстового

поля.

Таблица № 2

Результаты тестирования с простой таблицей из одного поля

Процесс Параметр Clickhouse Postgres

Чтение текстового файла, сохранение данных в БД БД CPU (среднее), % 35 24.29

БД RAM (среднее), Гб 0.576 3.9

Время выполнения, с 683 2889

Извлечение результата из БД, сохранение в текстовые файлы БД CPU (среднее), % 1000 300

БД RAM (среднее), Гб 17.12 21.17

Время выполнения, с 1928 22798

Оба процесса Время выполнения, с 2611 25687

Анализируя полученные результаты, можно сделать следующие выводы:

1) Qickhouse отрабатывает на вставку гораздо быстрее чем PostgreSQL;

2) Время отработки процесса меньше, чем результаты, полученные в предыдущей статье;

3) Принцип записи данных в итоговые текстовые файлы немного различался, поэтому далее в тестах был использован оптимизированный вариант кода save_batch_2, показанный на рис.2.

192

193

194

195

196

197

198

199

2DD 201 2D2 203

i

У

def save_batch(self, data_batch: list, file_path: Path]: start_time = tine, tine O

with opentPathtworkdir, file_path), 'wb') as out_f: for data in data_batch:

out_f.write(json.dumps[data)) out_f.write(b'\n') self.logger.info(f"Save batch time: 1 {time, timet) - start_time]-'")

5 usages

def save_batch_2Cself, data_batch: list, file_path: Path]: start_time = time.timet)

openCPathCworkdir, file, path), 1 wb1) .write(b"\n .joinCIjson.dumpstroii) for row iri data_batch])) self .logger.infotf "Save batch time: 1 {time.timet) - start_time]-'")

Рис. 2. - Код сохранения блока дедуплицированных данных в файл

Как уже упоминалось выше, принцип сохранения результатов обработки в текстовые файлы в таблице 1 отличается. В тесте с Postgres использовался более медленный вариант, время сохранения одного блока которого было равно 240 секундам. Оптимизация этого участка кода позволила уменьшить это время до 15 секунд. Во всех приведенных далее тестах будет использоваться оптимизированный вариант сохранения данных.

Стоит обратить внимание на индексы в БД и провести следующую серию тестов. В Clickhouse по умолчанию уже использовался engine=MergeTree. Сейчас возьмем ReplacingMergeTree, а для PostgreSQL наложим UNIQUE. Результаты продемонстрированы в таблице 3.

Таблица № 3

Результаты тестирования с простой таблицей с индексацией

Процесс Параметр Clickhouse Postgres

Чтение текстового файла, сохранение данных в БД БД CPU (среднее), % 100 57

БД RAM (среднее), Гб 0.9 10.1

Время выполнения, с 677 4751

Извлечение результата из БД, сохранение в текстовые файлы БД CPU (среднее), % 1000 100

БД RAM (среднее), Гб 10.32 15.71

Время выполнения, с 1912 1012

Оба процесса Время выполнения, с 2589 5763

По полученным выше результатам можно сделать следующие выводы:

1) Clickhouse при работе c одним текстовым полем не сильно зависит от выбранного engine, результаты очень похожие (в пределах погрешности);

2) PostgreSQL при включении индексации сильно увеличил время вставки одного блока данных в БД, чуть менее чем в два раза.

Выбранный подход расходует очень много физической памяти, так как мы копируем весь объем данных в БД. Стоит попробовать устранить этот недостаток. Для этого изменим структуру таблицы в БД. Вместо одного текстового поля создадим два поля:

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

1) Id - номер строки в исходном текстовом файле;

2) Hash_line - строка преобразованная в хеш [10].

Теперь вместо хранения непосредственно строки, будем высчитывать ее хеш. Данный подход подразумевает неоднократное прохождение по исходным данным. В первый раз, чтобы рассчитать и сохранить уникальные хеши. Во второй раз, чтобы отобрать строки по уникальными хешам, доставая номер строки из поля id. Это необходимо производить в порядке

М Инженерный вестник Дона, №2 (2024) ivdon.ru/ru/magazine/arcliive/n2y2024/9002

возрастания номера, поэтому в запрос обязательно вносим ORDER BY. Результаты теста приведены в таблице 4.

Таблица № 4

Результаты тестирования на основе хешей

Процесс Параметр Clickhouse Postgres

Чтение текстового файла, сохранение данных в БД БД CPU (среднее), % 4.42 53

БД RAM (среднее), Гб 8.161 8.5

Время выполнения, с 856 6533

Извлечение результата из БД, сохранение в текстовые файлы БД CPU (среднее), % 1000 300

БД RAM (среднее), Гб 22.2 15.1

Время выполнения, с 4544 2347

Оба процесса Время выполнения, с 5400 8880

Из приведенных выше результатов следуют следующие выводы:

1) Экономия физической памяти привела к увеличению затрат времени в обеих БД;

2) Замедление произошло как в процессах вставки блоков данных, так и извлечения.

3) Далее этот принцип использовать не следует.

Последним этапом тестов было использование многопоточности. Следует сразу отметить, что Clickhouse не подходит для этого. Можно обратить внимание на то, что во всех тестах Clickhouse использовал 1000% ресурсов CPU, что эквивалентно десяти ядрам процессора - это вся мощность, что может использовать docker на данном тестовом стенде. Тем не менее были предприняты попытки организовать мультипоточную работу с библиотеками clickhouse_driver и clickhouse_connect. В результате

М Инженерный вестник Дона, №2 (2024) ivdon.ru/ru/magazine/arcliive/n2y2024/9002

сохранение данных всё равно происходило последовательно, а чтение зависало. В таблице 5 представлены результаты тестов с Postgres.

Таблица № 5

Результаты тестирования PostgreSQL в многопоточном режиме

Процесс Параметр Postgres 4 потока Postgres 10 потоков

Чтение текстового файла, сохранение данных в БД БД CPU (среднее), % 719 701

БД RAM (среднее), Гб 15.7 16

Время выполнения, с 1057 1007

Извлечение результата из БД, сохранение в текстовые файлы БД CPU (среднее), % 150 164.49

БД RAM (среднее), Гб 16.06 17.1

Время выполнения, с 517 559

Оба процесса Время выполнения, с 1574 1566

По полученным результатам можно сделать следующие выводы:

1) Увеличение количества потоков целесообразно только на небольшое количество;

2) Qickhouse плохо работает с многопоточностью.

Заключение

По итогу многочисленных экспериментов с дедупликацией на основе баз данных был улучшен результат работы с 3046.6 секунд до 1574 секунд. Стоит отметить следующие особенности:

1) Qickhouse показал непревзойденные результаты при вставке блоков данных;

2) При оптимизации работы с PostgreSQL, разница в скорости выборки данных стала превосходить потери при сохранении.

Таким образом, после оптимизации программного обеспечения предпочтительным вариантом стала работа с PostgreSQL в многопоточном режиме.

Литература

1. Жуков М.А. Афанасьев Д.Б. Анализ и оценка минимального уровня префиксного дерева в системе бесхешевой дедупликации // Научно-технический вестник информационных технологий, механики и оптики. 2015. №3 C. 470-475.

2. Плотникова Н.П., Кевбрин В.А., Болохов Д.А. Дедупликация больших объемов данных при помощи баз данных // Инженерный вестник Дона. 2023. №9 URL: ivdon.ru/ru/magazine/archive/n9y2023/8676

3. Crockford D. JSON: The Fat-Free Alternative to XML // Boston 2006. URL: j son.org/fatfree. html#: ~: text=JSON%3A%20The%20Fat%2DFree%20Alternative %20to%20XML

4. Наумов Р.К., Железков Н.Э. Сравнительный анализ форматов хранения текстовых данных для дальнейшей обработки методами машинного обучения // Научный результат. Информационные технологии. 2021. №1. С. 40-47.

5. Mostafa J., Chilingaryan S., Wehbi S., Kopmann A. SciTS: A Benchmark for Time-Series Databases in Scientific Experiments and Industrial Internet of Things // Proceedings of the 34th International Conference on Scientific and Statistical Database Management. 2022. P. 12.

6. Терских М.Г. Развертывание кластера для хранения и обработки статистики с помощью Yandex Clickhouse // Теория и практика современной науки. 2017. №11. С. 540-547.

7. Плотникова Н.П., Мартынов В.А. Применение дерева отрезков в PostgreSQL // Инженерный вестник Дона. 2023. №9 URL: ivdon.ru/ru/magazine/archive/n9y2023/8684

8. Hellerstein J.H. Looking back at Postgres // Making Databases Work: the Pragmatic Wisdom of Michael Stonebraker. 2018. P. 205-224.

9. Karim Z. Take the confusion out of Docker, VMs, and microservices // IBM Developer 2019 URL: developer.ibm.com/articles/breaking-down-docker-and-microservices (дата обращения: 15.08.2023).

10. Rivest R. The MD5 Message-Digest Algorithm // RFC 1321. MIT Laboratory for Computer Science and RSA Data Security: 1991. URL: ietf.org/rfc/rfc 1321.txt

References

1. Zhukov M.A. Afanas'ev D.B. Nauchno-tehnicheskij vestnik informacionnyh tehnologij, mehaniki i optiki. 2015. №3. pp. 470-475.

2. Plotnikova N.P., Kevbrin V.A., Bolohov D.A. Inzhenernyj vestnik Dona. 2023. №9. URL: ivdon.ru/ru/magazine/archive/n9y2023/8676

3. Crockford D. JSON: The Fat-Free Alternative to XML. Boston: 2006. URL: j son.org/fatfree. html#: ~: text=JSON%3A%20The%20Fat%2DFree%20Alternative %20to%20XML

4. Naumov R.K., Zhelezkov N.E. Nauchnyj rezul'tat. Informatsionnye tekhnologii. 2021. №1. pp. 40-47.

5. Mostafa J., Chilingaryan S., Wehbi S., Kopmann A. SciTS: A Benchmark for Time-Series Databases in Scientific Experiments and Industrial Internet of Things. Proceedings of the 34th International Conference on Scientific and Statistical Database Management. 2022. P. 12.

6. Terskih M.G. Teorija i praktika sovremennoj nauki. 2017. №11. pp. 540547.

7. Plotnikova N.P., Martynov V.A. Inzhenernyj vestnik Dona. 2023. №9. URL: ivdon.ru/ru/magazine/archive/n9y2023/8684

8. Hellerstein J.H. Looking back at Postgres. Making Databases Work: the Pragmatic Wisdom of Michael Stonebraker. 2018. pp. 205-224.

9. Karim Z. Take the confsion out of Docker, VMs, and microservices. IBM Developer 2019 URL: developer.ibm.com/articles/breaking-down-docker-and-microservices (date assessed: 15.08.2023).

10. Rivest R. The MD5 Message-Digest Algorithm. RFC 1321. MIT Laboratory for Computer Science and RSA Data Security: 1991. URL: ietf.org/rfc/rfc 1321.txt

Дата поступления: 30.12.2023 Дата публикации: 3.02.2024

i Надоели баннеры? Вы всегда можете отключить рекламу.