Как правильно сделать архитектуру для высоко нагруженного проекта и какую выбрать БД?

Задача сделать портал подобный пульсу цен - pulscen.ru
Что требуется:
- Основной сайт(test.ru) - авторизация/регистрация, создание под сайта, панель управлением, товары с под сайтов, фильтр
- Под сайты(.test.ru), которые создаются автоматический при создании на основном сайте
Я захожу на основной сайт(test.ru), регистрирую свою компанию и автоматически создается сайт d3.test.ru(3 - порядковый номер нового сайта ++) выдаются права на редактирования данного сайта
Я могу добавить товар, при добавлении товара на мой новый сайт(d3.test.ru) нужно чтобы он дублировался на основной сайт test.ru
На основном сайте показываются все товары, которые были добавлены на под сайтах(
.test.ru) с указанием компании, адреса сайта на котором был добавлен товар

Как я это сделал:

За основу взят framework laravel и бд MySQL Решил сделать 2-е отдельные платформы 1 - для основного сайта портала test.ru 2 - для всех под сайтов *.test.ru Обе платформы подключены к одной базе

Немного о том как все устроено

1 - основной сайт test.ru В бд используются таблицы

categories - Общие категории для использования на под сайтах *.test.ru id | title | slug | description | photo | meta_title | meta_description | view

prods - Все товары с под сайтов *.test.ru id | title | slug | up_text | down_text | category_id | price | nalichie | dostavka | rating | meta_title | meta_description | view

sites - Все созданные сайты id | name | site_url | email | phone | city_id | rating | prefix | rating

2 - под сайты *.test.ru Для каждого под сайты используется свой фаил с конфигурацией .env в нем отличия только в префиксе для БД Для каждого под сайта используются свои таблицы, они отличаются префиксом d3_(3 - порядковый номер сайта)

d3_prods - Все товары сайта d3.test.ru id | prod_id | title | slug | up_text | down_text | category_id | price | nalichie | dostavka | rating | meta_title | meta_description | view - появился новый столбик prod_id в нем указан id товара расположенного на основном сайте То есть при добавлении товара на под сайт d3.test.ru товар сначала добавляется в таблицу d3_prods, затем пользователь выбирает публиковать/не публиковать на портале test.ru и если да, то это товар добавляется в таблицу prods - от сюда берем его id и обновляем поле prod_id в таблице d3_prods для этого товара (поле prod_id нужно, в случае редактирования товара на под сайте, чтобы по prod_id найти товар в таблице prods и в нем также изменить данные)

d3_settings - настройки для под сайта(название, описание, логотип, телефон, емаил, адрес) d3_seos - сео настройки для страниц(meta_title, meta_description) d3_pages - динамические страницы

И пока все шло не плохо, но когда уже было создано более 150 под сайтов и добавлено более 5мл товаров, все начало ужасно виснуть, в БД практически не реально зайти

При том, что используется на мой взгляд хороший сервер Процессор 26 X Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz Оперативная память 6000 / 30249 MiB (в среднем используется / всего) Размер дискового пространства 4.19 TiB

Вопрос? Как правильно сделать структура БД для подобной задачи, какую БД выбрать?


Ответы (0 шт):