{"id":19974932,"url":"https://github.com/mark1708/spring-yoomoney-db-queue","last_synced_at":"2026-04-11T02:55:32.829Z","repository":{"id":218973980,"uuid":"744205727","full_name":"Mark1708/spring-yoomoney-db-queue","owner":"Mark1708","description":"Исследование влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных","archived":false,"fork":false,"pushed_at":"2024-02-03T14:51:11.000Z","size":3199,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-01T18:46:03.280Z","etag":null,"topics":["db","db-queue","postgresql","queue","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mark1708.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-16T20:35:32.000Z","updated_at":"2024-01-29T22:56:25.000Z","dependencies_parsed_at":"2025-03-01T18:42:18.522Z","dependency_job_id":"34bab475-6e1e-4a4c-a389-8eb54b67a932","html_url":"https://github.com/Mark1708/spring-yoomoney-db-queue","commit_stats":null,"previous_names":["mark1708/spring-yoomoney-db-queue"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Mark1708/spring-yoomoney-db-queue","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mark1708%2Fspring-yoomoney-db-queue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mark1708%2Fspring-yoomoney-db-queue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mark1708%2Fspring-yoomoney-db-queue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mark1708%2Fspring-yoomoney-db-queue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mark1708","download_url":"https://codeload.github.com/Mark1708/spring-yoomoney-db-queue/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mark1708%2Fspring-yoomoney-db-queue/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273529583,"owners_count":25121834,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-03T02:00:09.631Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["db","db-queue","postgresql","queue","spring-boot"],"created_at":"2024-11-13T03:16:40.005Z","updated_at":"2026-04-11T02:55:27.797Z","avatar_url":"https://github.com/Mark1708.png","language":"Java","readme":"# spring-yoomoney-db-queue\r\n## Тема: Исследование влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных\r\n\r\n## Задачи\r\n### Цель исследования\r\nЦелью данного научно-исследовательской работы является изучение влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных. \r\n\r\nОсновной акцент будет сделан на оптимизацию пропускной способности очереди сообщений, с целью достичь **1000 RPS**.\r\n\r\n### Задачи и этапы исследования\r\n1. Разработка библиотеки для взаимодействия с базой данных в качестве брокера сообщений.\r\n2. Подготовка базы данных для проведения экспериментов.\r\n3. Проектирование и реализация двух сервисов - Producer и Consumer, обеспечивающих передачу и прием данных через брокера сообщений.\r\n4. Оптимизация базы данных\r\n5. Тестирование различных параметров таблицы и их влияния на эффективность системы.\r\n\r\n## Результаты\r\nДля тестирования использовалась база данных PostgreSQL.\r\n\r\nС таблицами на которых проводились тесты можно ознакомиться в файле `sql/create_tables.sql`\r\n* `queue_tasks_1` - Обычная таблица\r\n* `queue_tasks_2` - Вакумация + индекс btree\r\n* `queue_tasks_3` - Вакумация + индекс btree + fillfactor\r\n* `queue_tasks_4` - Вакумация + индекс btree + fillfactor + партиционировани с секционированием на 6 частей\r\n* `queue_tasks_5` - Вакумация + индекс btree + fillfactor + партиционировани с секционированием на 8 частей\r\n\r\n### Что получилось?\r\n|   Конфигурация    | Batch  |     RPS     |     Изменение      |   Изменение в %    |\r\n|:-----------------:|:------:|:-----------:|:------------------:|:------------------:|\r\n|   queue_tasks_1   |   1    |   334,69    | Будем считать за 0 | Будем считать за 0 |\r\n|   queue_tasks_1   |   10   |   1222,82   |       888,12       |       265,35       |\r\n|   queue_tasks_2   |   10   |   1275,85   |       941,15       |       281,20       |\r\n|   queue_tasks_3   |   10   |   1230,76   |       896,06       |       267,73       |\r\n|   queue_tasks_4   |   10   |   1310,81   |       976,11       |       291,64       |\r\n| **queue_tasks_5** | **10** | **1314,12** |     **979,42**     |     **292,63**     |\r\n|   queue_tasks_5   |   20   |   1289,58   |       954,88       |       285,30       |\r\n\u003e Тестирование проводилось в достаточно щадящем режиме)\r\n\r\nКак можно заметить самым эффективным вариантом оказалось использование сетапа таблицы `queue_tasks_5` с записью/чтением батчами по **10** записей.\r\n\r\nДалее я провел тестирование с более высокими нагрузками и проанализировал более детально нагрузку в течении работы системы. \u003c/br\u003e\r\nРезультаты тестирования показали стабильную работу системы при максимальной нагрузке. \u003c/br\u003e\r\nПоказатели нагрузки в течение тестирования  и анализ метрик позволяют сделать выводы о эффективности и устойчивости разработанного подхода.\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003cimg width=\"auto\" height=\"300\" src=\"assets/latency.png\"\u003e\r\n\u003c/p\u003e\r\n\u003cp align=\"center\"\u003eРисунок 1. Задержка (min/avg/max)\u003c/p\u003e\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003cimg width=\"auto\" height=\"250\" src=\"assets/RPS.png\"\u003e\r\n\u003c/p\u003e\r\n\u003cp align=\"center\"\u003eРисунок 2. Кол-во запросов в секунду\u003c/p\u003e\r\n\r\n### Преимущества и недостатки подхода\r\nПреимущества:\r\n* Низкая стоимость масштабирования.\r\n* Достойная пропускная способность.\r\n* Гибкая платформа для реализации разных способов взаимодействия с очередью сообщений.\r\n\r\nНедостатки:\r\n* Является антипаттерном в большинстве случаев.\r\n* Наличие сложности организации совместной работы нескольких сервисов.\r\n\r\n### Выводы и дальнейшие перспективы\r\nВ ходе работ над этой темой было проведено сравнение различных способов оптимизации таблиц для очереди ообщений и походов к чтению/записи.\r\nКак можно заметить наиболее эффективным способом оптимизации очереди оказалось партиционирование таблицы.\r\nТем не менее использование такого подхода по-прежнему распространено для решения ряда задач.\r\n\r\n## Инструкция по запуску\r\n```shell\r\ndocker compose up -d\r\n```\r\n\r\n## Технологии\r\n* Spring-Boot 3\r\n* Java 21\r\n* PostgreSQL\r\n* [db-queue](https://github.com/db-queue/db-queue)\r\n\r\n## Статус\r\nПроект _закончен_\r\n\r\n## Цель\r\nПроект сделан в образовательных целях\r\n\r\n## Контакты\r\nВыполнен [Гурьяновым Марком](https://mark1708.github.io/) под чутким руководством [kartzum](https://github.com/kartzum)\r\n#### +7(962)024-50-04 | mark1708.work@gmail.com | [github](http://github.com/Mark1708)\r\n\r\n![Readme Card](https://github-readme-stats.vercel.app/api/pin/?username=Mark1708\u0026repo=spring-yoomoney-db-queue\u0026theme=chartreuse-dark\u0026show_icons=true)\r\n\r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmark1708%2Fspring-yoomoney-db-queue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmark1708%2Fspring-yoomoney-db-queue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmark1708%2Fspring-yoomoney-db-queue/lists"}