Как правильно сделать архитектуру проекта и какую выбрать БД?
Здравствуйте, есть задача сделать портал подобный пульсу цен - 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
Вопрос?
Как правильно сделать структура БД для подобной задачи, какую БД выбрать?