https://github.com/mark1708/spring-yoomoney-db-queue
  
  
    Исследование влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных 
    https://github.com/mark1708/spring-yoomoney-db-queue
  
db db-queue postgresql queue spring-boot
        Last synced: about 2 months ago 
        JSON representation
    
Исследование влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных
- Host: GitHub
- URL: https://github.com/mark1708/spring-yoomoney-db-queue
- Owner: Mark1708
- Created: 2024-01-16T20:35:32.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-02-03T14:51:11.000Z (over 1 year ago)
- Last Synced: 2025-03-01T18:46:03.280Z (8 months ago)
- Topics: db, db-queue, postgresql, queue, spring-boot
- Language: Java
- Homepage:
- Size: 3.05 MB
- Stars: 0
- Watchers: 2
- Forks: 1
- Open Issues: 0
- 
            Metadata Files:
            - Readme: README.md
 
Awesome Lists containing this project
README
          # spring-yoomoney-db-queue
## Тема: Исследование влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных
## Задачи
### Цель исследования
Целью данного научно-исследовательской работы является изучение влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных. 
Основной акцент будет сделан на оптимизацию пропускной способности очереди сообщений, с целью достичь **1000 RPS**.
### Задачи и этапы исследования
1. Разработка библиотеки для взаимодействия с базой данных в качестве брокера сообщений.
2. Подготовка базы данных для проведения экспериментов.
3. Проектирование и реализация двух сервисов - Producer и Consumer, обеспечивающих передачу и прием данных через брокера сообщений.
4. Оптимизация базы данных
5. Тестирование различных параметров таблицы и их влияния на эффективность системы.
## Результаты
Для тестирования использовалась база данных PostgreSQL.
С таблицами на которых проводились тесты можно ознакомиться в файле `sql/create_tables.sql`
* `queue_tasks_1` - Обычная таблица
* `queue_tasks_2` - Вакумация + индекс btree
* `queue_tasks_3` - Вакумация + индекс btree + fillfactor
* `queue_tasks_4` - Вакумация + индекс btree + fillfactor + партиционировани с секционированием на 6 частей
* `queue_tasks_5` - Вакумация + индекс btree + fillfactor + партиционировани с секционированием на 8 частей
### Что получилось?
|   Конфигурация    | Batch  |     RPS     |     Изменение      |   Изменение в %    |
|:-----------------:|:------:|:-----------:|:------------------:|:------------------:|
|   queue_tasks_1   |   1    |   334,69    | Будем считать за 0 | Будем считать за 0 |
|   queue_tasks_1   |   10   |   1222,82   |       888,12       |       265,35       |
|   queue_tasks_2   |   10   |   1275,85   |       941,15       |       281,20       |
|   queue_tasks_3   |   10   |   1230,76   |       896,06       |       267,73       |
|   queue_tasks_4   |   10   |   1310,81   |       976,11       |       291,64       |
| **queue_tasks_5** | **10** | **1314,12** |     **979,42**     |     **292,63**     |
|   queue_tasks_5   |   20   |   1289,58   |       954,88       |       285,30       |
> Тестирование проводилось в достаточно щадящем режиме)
Как можно заметить самым эффективным вариантом оказалось использование сетапа таблицы `queue_tasks_5` с записью/чтением батчами по **10** записей.
Далее я провел тестирование с более высокими нагрузками и проанализировал более детально нагрузку в течении работы системы. 
Результаты тестирования показали стабильную работу системы при максимальной нагрузке. 
Показатели нагрузки в течение тестирования  и анализ метрик позволяют сделать выводы о эффективности и устойчивости разработанного подхода.
   
Рисунок 1. Задержка (min/avg/max)
   
Рисунок 2. Кол-во запросов в секунду
### Преимущества и недостатки подхода
Преимущества:
* Низкая стоимость масштабирования.
* Достойная пропускная способность.
* Гибкая платформа для реализации разных способов взаимодействия с очередью сообщений.
Недостатки:
* Является антипаттерном в большинстве случаев.
* Наличие сложности организации совместной работы нескольких сервисов.
### Выводы и дальнейшие перспективы
В ходе работ над этой темой было проведено сравнение различных способов оптимизации таблиц для очереди ообщений и походов к чтению/записи.
Как можно заметить наиболее эффективным способом оптимизации очереди оказалось партиционирование таблицы.
Тем не менее использование такого подхода по-прежнему распространено для решения ряда задач.
## Инструкция по запуску
```shell
docker compose up -d
```
## Технологии
* Spring-Boot 3
* Java 21
* PostgreSQL
* [db-queue](https://github.com/db-queue/db-queue)
## Статус
Проект _закончен_
## Цель
Проект сделан в образовательных целях
## Контакты
Выполнен [Гурьяновым Марком](https://mark1708.github.io/) под чутким руководством [kartzum](https://github.com/kartzum)
#### +7(962)024-50-04 | mark1708.work@gmail.com | [github](http://github.com/Mark1708)
