Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нужна помощь в проектировании БД для каталога товаров / 15 сообщений из 15, страница 1 из 1
17.07.2013, 11:29
    #38333817
Нужна помощь в проектировании БД для каталога товаров
Доброе время суток коллеги.
Столкнулся с задачей перепроектирования БД для каталога товаров. Решение пришло, но хотелось бы услышать критику и советы.

Описываю проблему:
Есть бизнес каталог, в котором размещаются фирмы. Эти фирмы могут добавлять товары как вручную, так и загружать автоматически через XML (каждый день по графику, при этом старые XML товары полностью удаляются).
Кроме того, фирма может быть выключенной. При этом ее товары не будут участвовать в поиске. Но удалять их тоже нельзя.

Получается, что товары можно условно разделить на 3 категории:
1) обновляемые по XML,
2) добавляемые вручную,
3) выключенные.

Хранить их в одной таблице не хочется, т.к. при удалении товаров "обновляемых по XML" будет идти ненужная нагрузка на всю таблицу. Опять таки фрагментация...
Хранить "выключенные товары" в той же таблице, что и основные - тоже не очень хочется, т.к. это "ненужная куча" будет "мешаться" при индексации сфинкса.

Как вариант, пришло решение разделить товары на 3 таблицы, по типам.
По таблицам 1 и 2 - настроить репликацию, чтобы со слейва индексировать сфинкс
После выключения/включения фирмы "перемещать только добавленные вручную товары" т.е. из таблицы 2 в 3

Для отображения списка товароы по фирме делать либо UNION по таблицам 1 и 2, либо сделать MERGE таблицу по этим же таблицам.

Это решение не очень "возбуждает", т.к.
во-первых, нужно перетаскивать товары при включении/выключении фирмы.
во-вторых, хотелось бы чтобы у каждого товара был уникальный id, а в случае с 2 таблицами это трудно реализовать без подпор
в-третьих, смущают UNION при выводе товаров

Буду признателен за совет.
...
Рейтинг: 0 / 0
17.07.2013, 11:43
    #38333836
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в проектировании БД для каталога товаров
Максим ОданецХранить их в одной таблице не хочется, т.к. при удалении товаров "обновляемых по XML" будет идти ненужная нагрузка на всю таблицу. Опять таки фрагментация...

Что такое "нагрузка на таблицу"?

Максим ОданецХранить "выключенные товары" в той же таблице, что и основные - тоже не очень хочется, т.к. это "ненужная куча" будет "мешаться" при индексации сфинкса.

Ну не выгружайте их для sphinx'а - при чем тут "одна таблица/три таблицы"?
Если у Вас sphinx сам лазает в базу - дайте ему View вместо таблицы.
...
Рейтинг: 0 / 0
17.07.2013, 11:50
    #38333849
Злой Бобр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в проектировании БД для каталога товаров
Максим Оданец...
Получается, что товары можно условно разделить на 3 категории:
1) обновляемые по XML,
2) добавляемые вручную,
3) выключенные.
Бред. Даже нестану объяснять почему.

Если у вас нет единого списка товара, то тогда для каждой фирмы должна быть своя таблица товара (я б использовал префикс таблицы для разделения). В таблице фирм добавьте поле с префиксом. При поиске по фирме вытягивайте оттуда префикс и ищите по одной таблице. Все. Будет вопросы - задавайте. Только неспрашивайте про бред.
...
Рейтинг: 0 / 0
17.07.2013, 17:35
    #38334518
Нужна помощь в проектировании БД для каталога товаров
Спасибо за ответы.
Сейчас товары в одной таблице. Она в MyIsam. Когда сфинкс "сливает" данные из этой таблицы - он ее лочит на время "сливания".
Поможет ли избавиться от "залочивания" View? View ведь не копия данных, а "сохраненный" результат выполнения запроса.

"Нагрузка на таблицу" - некорректно выразился...
...
Рейтинг: 0 / 0
17.07.2013, 17:40
    #38334526
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в проектировании БД для каталога товаров
Максим ОданецОна в MyIsam.
Кто ж тебя заставлял выбрать такое убогое хранилище...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.07.2013, 17:40
    #38334528
Нужна помощь в проектировании БД для каталога товаров
Имелось ввиду вот что:

Т.к. таблица в MyIsam - при удалении и добавлении в нее товаров - она лочится. Плюс ко всему - каждый день при обновлении XML из таблицы удаляется и добавляется около 500 000 строк. Т.к. таблица в MyIsam, то все данные в ней хранятся в 1 файле. При таком постоянном удалении/добавлении - не будет ли фрагментации HDD?

По поводу разделения на группы товаров и отдельные таблицы. Разделение - это просто идея, может и не очень хорошая :)
Что касается "для каждой фирмы своя таблица" - эта идея тоже была, но на сервере около 300 000 фирм. Для каждой таблицу делать не хочется :(
...
Рейтинг: 0 / 0
17.07.2013, 17:44
    #38334539
Нужна помощь в проектировании БД для каталога товаров
Dimitry Sibiryakov,

Сам себя корю :) Но я не первый программер на проекте, и проект жил до меня. Сейчас перепланируем все - в связи с этим и вопрос возник. Планировали использовтаь InnoDB.
...
Рейтинг: 0 / 0
17.07.2013, 18:28
    #38334616
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в проектировании БД для каталога товаров
Сразу пара моментов

Во первых разберитесь с "удалять все и закачивать заново".
Нужно принять набор атрибутов за первичный ключ и не трогать неизменные записи. Измененные записи можете хоть обновлять, хоть удалять/закачивать.
То бишь алгоритм
1 заливаем в стэйджинговую таблицу новый XML
2 производим слияние с рабочей
3 чистим стэйджинговую таблицу

Далее Union замените на union all (без удаления дубликатов). Тогда смущать не будет (если это поддерживается в вашем mysql)
По "выключенным" товарам - все зависит от доли выключенных товаров и частоте "включения/выключения". Однозначного ответа не будет.
...
Рейтинг: 0 / 0
17.07.2013, 19:09
    #38334668
Злой Бобр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в проектировании БД для каталога товаров
Максим ОданецПо поводу разделения на группы товаров и отдельные таблицы. Разделение - это просто идея, может и не очень хорошая
Однозначно идею убить в зародыше. Иначе потом только на вазелин и работать.
Максим ОданецЧто касается "для каждой фирмы своя таблица" - эта идея тоже была, но на сервере около 300 000 фирм. Для каждой таблицу делать не хочется
Ну делать же не руками ... Просто если у вас нет единой таблицы товара, то других вариантов нету. По крайней мере из первого поста я так понял.
Максим ОданецСам себя корю :) Но я не первый программер на проекте, и проект жил до меня. Сейчас перепланируем все - в связи с этим и вопрос возник. Планировали использовтаь InnoDB.
А может посмотреть в сторону оракла или мелкомягкого (это из платных), ну или постгрес (из бесплатного). Хотя незная деталей сложно что-то советовать.

Кроме того непонятно что вы там каждый раз обновляете. Может у вас подход такой же как и к выбору БД. Тогда будет у вас не только фрагментация жесткого, но и весь прочий набор прелестей.
...
Рейтинг: 0 / 0
17.07.2013, 19:25
    #38334685
Нужна помощь в проектировании БД для каталога товаров
Спасибо за ответы.

SERG1257, подскажите пожалуйста что такое "стэйджинговая таблица"?
Злой Бобр, все товары однотипны. Идею разбивать на три таблицы - убил =)

Получается одна таблица с товарами.
Спасибо за PostgreSQL. Посмотрим в эту сторону.
...
Рейтинг: 0 / 0
17.07.2013, 19:42
    #38334701
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в проектировании БД для каталога товаров
авторSERG1257, подскажите пожалуйста что такое "стэйджинговая таблица"?Суть в том что XML использовать для слияния чуть сложнее чем обычную таблицу. Поэтому делаем пустую копию вашей таблицы, заливаем ее из XML, строим индексы если большая и сливаем уже ее. То есть разделяем процесс на "Заливка + Слияние"
...
Рейтинг: 0 / 0
17.07.2013, 20:45
    #38334771
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в проектировании БД для каталога товаров
Максим ОданецИмелось ввиду вот что:

Т.к. таблица в MyIsam - при удалении и добавлении в нее товаров - она лочится. Плюс ко всему - каждый день при обновлении XML из таблицы удаляется и добавляется около 500 000 строк. Т.к. таблица в MyIsam, то все данные в ней хранятся в 1 файле. При таком постоянном удалении/добавлении - не будет ли фрагментации HDD?

По поводу разделения на группы товаров и отдельные таблицы. Разделение - это просто идея, может и не очень хорошая :)
Что касается "для каждой фирмы своя таблица" - эта идея тоже была, но на сервере около 300 000 фирм. Для каждой таблицу делать не хочется :(

?!? Что-то мне подсказывает что это очередная курсовая с завышением объемов "сверх меры"... 300тыщ фирм... ежедневное обновление 500тыщ строк... tiu.ru, market-Яши (у них кстати есть заливка из xml) или хто це таке?

... хотя, сдается мне, даже у них объемы поменьше будут.
...
Рейтинг: 0 / 0
17.07.2013, 21:31
    #38334814
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в проектировании БД для каталога товаров
Arhat109,

500 тыс. товарных позиций в день для яндекс-маркета - это тьфу, плюнуть и растереть. Только мы ему отдаем 2 раза в день по 100k примерно. А общий объем - я думаю, порядка на 3 побольше.
...
Рейтинг: 0 / 0
17.07.2013, 22:41
    #38334864
Нужна помощь в проектировании БД для каталога товаров
Всем еще раз спасибо за советы. Вариант использования PostgreSQL мы в начале вообще не рассматривали. Сейчас задумались над расширением кругозора =)
Каждый разработчик хочет, чтобы его сайты работали "как можно лучше" и, как это часто бывает, некоторая ограниченность знаний и затурканность дают о себе знать и порождают такие велосипеды, что потом и ездить на них страшно =)
Спасибо, что от изобретения подобного велосипеда отговорили =)
...
Рейтинг: 0 / 0
18.07.2013, 05:53
    #38334999
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в проектировании БД для каталога товаров
> Получается, что товары можно условно разделить на 3 категории:

Любая задача, связанная с проектированием, имеет цель. Вы решаете рекламную задачу. Способ хранения данных для вашей задачи безразличен. Одна, три или десять таблиц - не играет роли.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нужна помощь в проектировании БД для каталога товаров / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]