|
|
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Доброе время суток коллеги. Столкнулся с задачей перепроектирования БД для каталога товаров. Решение пришло, но хотелось бы услышать критику и советы. Описываю проблему: Есть бизнес каталог, в котором размещаются фирмы. Эти фирмы могут добавлять товары как вручную, так и загружать автоматически через XML (каждый день по графику, при этом старые XML товары полностью удаляются). Кроме того, фирма может быть выключенной. При этом ее товары не будут участвовать в поиске. Но удалять их тоже нельзя. Получается, что товары можно условно разделить на 3 категории: 1) обновляемые по XML, 2) добавляемые вручную, 3) выключенные. Хранить их в одной таблице не хочется, т.к. при удалении товаров "обновляемых по XML" будет идти ненужная нагрузка на всю таблицу. Опять таки фрагментация... Хранить "выключенные товары" в той же таблице, что и основные - тоже не очень хочется, т.к. это "ненужная куча" будет "мешаться" при индексации сфинкса. Как вариант, пришло решение разделить товары на 3 таблицы, по типам. По таблицам 1 и 2 - настроить репликацию, чтобы со слейва индексировать сфинкс После выключения/включения фирмы "перемещать только добавленные вручную товары" т.е. из таблицы 2 в 3 Для отображения списка товароы по фирме делать либо UNION по таблицам 1 и 2, либо сделать MERGE таблицу по этим же таблицам. Это решение не очень "возбуждает", т.к. во-первых, нужно перетаскивать товары при включении/выключении фирмы. во-вторых, хотелось бы чтобы у каждого товара был уникальный id, а в случае с 2 таблицами это трудно реализовать без подпор в-третьих, смущают UNION при выводе товаров Буду признателен за совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 11:29 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Максим ОданецХранить их в одной таблице не хочется, т.к. при удалении товаров "обновляемых по XML" будет идти ненужная нагрузка на всю таблицу. Опять таки фрагментация... Что такое "нагрузка на таблицу"? Максим ОданецХранить "выключенные товары" в той же таблице, что и основные - тоже не очень хочется, т.к. это "ненужная куча" будет "мешаться" при индексации сфинкса. Ну не выгружайте их для sphinx'а - при чем тут "одна таблица/три таблицы"? Если у Вас sphinx сам лазает в базу - дайте ему View вместо таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 11:43 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Максим Оданец... Получается, что товары можно условно разделить на 3 категории: 1) обновляемые по XML, 2) добавляемые вручную, 3) выключенные. Бред. Даже нестану объяснять почему. Если у вас нет единого списка товара, то тогда для каждой фирмы должна быть своя таблица товара (я б использовал префикс таблицы для разделения). В таблице фирм добавьте поле с префиксом. При поиске по фирме вытягивайте оттуда префикс и ищите по одной таблице. Все. Будет вопросы - задавайте. Только неспрашивайте про бред. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 11:50 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы. Сейчас товары в одной таблице. Она в MyIsam. Когда сфинкс "сливает" данные из этой таблицы - он ее лочит на время "сливания". Поможет ли избавиться от "залочивания" View? View ведь не копия данных, а "сохраненный" результат выполнения запроса. "Нагрузка на таблицу" - некорректно выразился... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 17:35 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Максим ОданецОна в MyIsam. Кто ж тебя заставлял выбрать такое убогое хранилище... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 17:40 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Имелось ввиду вот что: Т.к. таблица в MyIsam - при удалении и добавлении в нее товаров - она лочится. Плюс ко всему - каждый день при обновлении XML из таблицы удаляется и добавляется около 500 000 строк. Т.к. таблица в MyIsam, то все данные в ней хранятся в 1 файле. При таком постоянном удалении/добавлении - не будет ли фрагментации HDD? По поводу разделения на группы товаров и отдельные таблицы. Разделение - это просто идея, может и не очень хорошая :) Что касается "для каждой фирмы своя таблица" - эта идея тоже была, но на сервере около 300 000 фирм. Для каждой таблицу делать не хочется :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 17:40 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Сам себя корю :) Но я не первый программер на проекте, и проект жил до меня. Сейчас перепланируем все - в связи с этим и вопрос возник. Планировали использовтаь InnoDB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 17:44 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Сразу пара моментов Во первых разберитесь с "удалять все и закачивать заново". Нужно принять набор атрибутов за первичный ключ и не трогать неизменные записи. Измененные записи можете хоть обновлять, хоть удалять/закачивать. То бишь алгоритм 1 заливаем в стэйджинговую таблицу новый XML 2 производим слияние с рабочей 3 чистим стэйджинговую таблицу Далее Union замените на union all (без удаления дубликатов). Тогда смущать не будет (если это поддерживается в вашем mysql) По "выключенным" товарам - все зависит от доли выключенных товаров и частоте "включения/выключения". Однозначного ответа не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 18:28 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Максим ОданецПо поводу разделения на группы товаров и отдельные таблицы. Разделение - это просто идея, может и не очень хорошая Однозначно идею убить в зародыше. Иначе потом только на вазелин и работать. Максим ОданецЧто касается "для каждой фирмы своя таблица" - эта идея тоже была, но на сервере около 300 000 фирм. Для каждой таблицу делать не хочется Ну делать же не руками ... Просто если у вас нет единой таблицы товара, то других вариантов нету. По крайней мере из первого поста я так понял. Максим ОданецСам себя корю :) Но я не первый программер на проекте, и проект жил до меня. Сейчас перепланируем все - в связи с этим и вопрос возник. Планировали использовтаь InnoDB. А может посмотреть в сторону оракла или мелкомягкого (это из платных), ну или постгрес (из бесплатного). Хотя незная деталей сложно что-то советовать. Кроме того непонятно что вы там каждый раз обновляете. Может у вас подход такой же как и к выбору БД. Тогда будет у вас не только фрагментация жесткого, но и весь прочий набор прелестей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 19:09 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы. SERG1257, подскажите пожалуйста что такое "стэйджинговая таблица"? Злой Бобр, все товары однотипны. Идею разбивать на три таблицы - убил =) Получается одна таблица с товарами. Спасибо за PostgreSQL. Посмотрим в эту сторону. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 19:25 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
авторSERG1257, подскажите пожалуйста что такое "стэйджинговая таблица"?Суть в том что XML использовать для слияния чуть сложнее чем обычную таблицу. Поэтому делаем пустую копию вашей таблицы, заливаем ее из XML, строим индексы если большая и сливаем уже ее. То есть разделяем процесс на "Заливка + Слияние" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 19:42 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Максим ОданецИмелось ввиду вот что: Т.к. таблица в MyIsam - при удалении и добавлении в нее товаров - она лочится. Плюс ко всему - каждый день при обновлении XML из таблицы удаляется и добавляется около 500 000 строк. Т.к. таблица в MyIsam, то все данные в ней хранятся в 1 файле. При таком постоянном удалении/добавлении - не будет ли фрагментации HDD? По поводу разделения на группы товаров и отдельные таблицы. Разделение - это просто идея, может и не очень хорошая :) Что касается "для каждой фирмы своя таблица" - эта идея тоже была, но на сервере около 300 000 фирм. Для каждой таблицу делать не хочется :( ?!? Что-то мне подсказывает что это очередная курсовая с завышением объемов "сверх меры"... 300тыщ фирм... ежедневное обновление 500тыщ строк... tiu.ru, market-Яши (у них кстати есть заливка из xml) или хто це таке? ... хотя, сдается мне, даже у них объемы поменьше будут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 20:45 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Arhat109, 500 тыс. товарных позиций в день для яндекс-маркета - это тьфу, плюнуть и растереть. Только мы ему отдаем 2 раза в день по 100k примерно. А общий объем - я думаю, порядка на 3 побольше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 21:31 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
Всем еще раз спасибо за советы. Вариант использования PostgreSQL мы в начале вообще не рассматривали. Сейчас задумались над расширением кругозора =) Каждый разработчик хочет, чтобы его сайты работали "как можно лучше" и, как это часто бывает, некоторая ограниченность знаний и затурканность дают о себе знать и порождают такие велосипеды, что потом и ездить на них страшно =) Спасибо, что от изобретения подобного велосипеда отговорили =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2013, 22:41 |
|
||
|
Нужна помощь в проектировании БД для каталога товаров
|
|||
|---|---|---|---|
|
#18+
> Получается, что товары можно условно разделить на 3 категории: Любая задача, связанная с проектированием, имеет цель. Вы решаете рекламную задачу. Способ хранения данных для вашей задачи безразличен. Одна, три или десять таблиц - не играет роли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2013, 05:53 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38334771&tid=1541171]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
156ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 496ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...