litledi
Новичок
Добрый день всем, с большими занимался ранее в основном меньшими объемами данных
поэтому прошу совета, чтобы не изобретать велосипед и копать сразу в нужном направлении.
Есть движок интернет магазина который шустро работает и все довольны, при этом количество номенклатуры не превышало ни разу в общем случае
500 тысяч записей в MySQL базе.
появился проект в котором планируется 5-10 миллионов товаров
есть таблица свойств сущностей
mod_catalog_data
id - ID свойства или элемента списка
pid - ID родительской сущности (только для свойства с типом list)
data_type (attr|list|li) что это за сущность СПИСОК|АТТРИБУТ|ЭЛЕМЕНТ_СПИСКА
data_key - ключ
value_type - string|integer|float|bool|list
и т.д.
есть таблица категорий
mod_catalog_cattree - таблица дерева категорий в виде Nested set
id - ID категории
lleft - индекс слева
rright - индекс справа
level - уровень
Основные данные по каждому товару, находятся в трёх таблицах
mod_catalog_items
id - ид товара
cat_id - категория
brand_id - бренд
coll_id - коллекция
stock_id - акция
и т.д. включая всякие там цену, статусы , флаг выборок(новинки и т.д.), вес товара для SEO-шников и прочая
mod_catalog_images - таблица хранящая изображений итема
item_id
img_src
img_path
img_width
img_height
mod_catalog_data_value - таблица хранящая значения свойств итема
item_id - ID товара из mod_catalog_items
data_id - ID свойства из mod_catalog_data
vvalue_string - значение строкового, числового, булева свойства
vvalue_digit - ID элемента списочного свойства
свойства товара могут создаваться динамически для каждой категории товара
и сказать определённо сколько будет свойств в той или иной категории нельзя, практика показывает, что достаточно много
изображения товара, собственно похожая ситуация, 2-3 изображения на товар стабильно
если кол-во товаров в mod_catalog_items будет порядка 5 миллионов, то кол-во записей будет в таблице
значений свойств и изображения начнёт негативным образом сказываться на времени формирования страницы
обычно специфика интернет магазинов, в том что в основном посетители что-то ищут во вполне определённой категории, относительно какой-то ветки категорий
а значит вероятно можно применить Секционирование, подключив PostgreSQL и переведя эти таблицы туда,
введя доп колонку fcat_id (категория 1-го уровня) в таблицу mod_catalog_items и бить на части по ней
а таблицы mod_catalog_images и mod_catalog_data_value по диапазонам item_id или же быть может тоже по fcat_id, введя этот параметр в таблицы
к сожалению реальных данных на текущий момент нет и пощупать руками на продакшене я не могу и хочу свести холостые попытки к минимуму
кто-то скажет что 5 миллионов это не так много, но сегодня 5, завтра может 50 и т.д.
в таблице mod_catalog_items, я постарался показать наиболее значимые столбцы, которые конечно проиндексированы
всем заранее спасибо
поэтому прошу совета, чтобы не изобретать велосипед и копать сразу в нужном направлении.
Есть движок интернет магазина который шустро работает и все довольны, при этом количество номенклатуры не превышало ни разу в общем случае
500 тысяч записей в MySQL базе.
появился проект в котором планируется 5-10 миллионов товаров
есть таблица свойств сущностей
mod_catalog_data
id - ID свойства или элемента списка
pid - ID родительской сущности (только для свойства с типом list)
data_type (attr|list|li) что это за сущность СПИСОК|АТТРИБУТ|ЭЛЕМЕНТ_СПИСКА
data_key - ключ
value_type - string|integer|float|bool|list
и т.д.
есть таблица категорий
mod_catalog_cattree - таблица дерева категорий в виде Nested set
id - ID категории
lleft - индекс слева
rright - индекс справа
level - уровень
Основные данные по каждому товару, находятся в трёх таблицах
mod_catalog_items
id - ид товара
cat_id - категория
brand_id - бренд
coll_id - коллекция
stock_id - акция
и т.д. включая всякие там цену, статусы , флаг выборок(новинки и т.д.), вес товара для SEO-шников и прочая
mod_catalog_images - таблица хранящая изображений итема
item_id
img_src
img_path
img_width
img_height
mod_catalog_data_value - таблица хранящая значения свойств итема
item_id - ID товара из mod_catalog_items
data_id - ID свойства из mod_catalog_data
vvalue_string - значение строкового, числового, булева свойства
vvalue_digit - ID элемента списочного свойства
свойства товара могут создаваться динамически для каждой категории товара
и сказать определённо сколько будет свойств в той или иной категории нельзя, практика показывает, что достаточно много
изображения товара, собственно похожая ситуация, 2-3 изображения на товар стабильно
если кол-во товаров в mod_catalog_items будет порядка 5 миллионов, то кол-во записей будет в таблице
значений свойств и изображения начнёт негативным образом сказываться на времени формирования страницы
обычно специфика интернет магазинов, в том что в основном посетители что-то ищут во вполне определённой категории, относительно какой-то ветки категорий
а значит вероятно можно применить Секционирование, подключив PostgreSQL и переведя эти таблицы туда,
введя доп колонку fcat_id (категория 1-го уровня) в таблицу mod_catalog_items и бить на части по ней
а таблицы mod_catalog_images и mod_catalog_data_value по диапазонам item_id или же быть может тоже по fcat_id, введя этот параметр в таблицы
к сожалению реальных данных на текущий момент нет и пощупать руками на продакшене я не могу и хочу свести холостые попытки к минимуму
кто-то скажет что 5 миллионов это не так много, но сегодня 5, завтра может 50 и т.д.
в таблице mod_catalog_items, я постарался показать наиболее значимые столбцы, которые конечно проиндексированы
всем заранее спасибо