Помогите проавильно организовать структуру БД ресурсоемкого проекта!

webxtor

Новичок
Помогите проавильно организовать структуру БД ресурсоемкого проекта!

Всем привет!

Немного вступления.
Я делаю очень большой проект. База данных будет занимать место около гига. Поэтому все тонкости оптимизации структуры БД и запросов к ней, тут крайне важна! Использую БД MySQL. Мне кажется, этот проект использует абсолютно все технологии и сталкивается со всеми проблемами хранения данных в БД в вебе, поэтому вам будет очень важно прочитать этот топик и попробовать мне помочь :)

Сайт представляет из себя каталог компаний, их продуктов и торговых предложений (например ищу поставщика такого-то сырья).

Категорий 1,500 штук. Уже организовал их по приниципу вложенных множеств. Все работает классно!

Изучил теорию индексации - скорость работы возросла в несколько раз!

А теперь самое сложное.. то, когда выбор приходится делать из очень похожих друг на друга вариантов.

Итак, суть проблемы.

Нужно хранить 4 типа данных:
1. контактная иформация, логин и пароль компаний
2. профиль компании (для каждого пользователя может быть только один профиль компании)
3. продукты компании
4. торговые предложения компании

Все вопросы я выделю жирным шрифтом. Просьба в ответе написать свое видение организации БД, учитывая, что компаний будут сотни тысяч и соотвественная посещаяемость.

Как хранить контактную информацию (имя, фамилия, телефон, сайт.. всего 10 полей о компаниях:
-в одной таблице, а профиль компании (название, год создания, штат.. всего 20 полей) - в другой? Или все же сделать одну таблицу на 30+ полей?

Хочется разбить эту таблицу на 2, так как на всех страничках касательно этой компании (на всех ее продуктах и торговых предложениях и конечно на ее профиле) внизу будет отображаться контактная информация этой компании.

А может сделать вообще 3 таблицы? В одной храним логин и пароль и время последнего логина, время регестрации и тд, в другой 10 полей контактов а в третей 20 полей профиля компании?

И еще, если скажем появится на сайте возможность создания золотых аккаунтов, для которых количество полей профиля будет увеличино. И обычные пользователи смогут вносить только 10 полей профиля своей компании, а золотые все 20, то в этом случае, как следует быть с таблицами? Сделать 2 таблицы - базовые профили и золотые профили? Или сделать одну таблицу, где у простых пользователей будет всегда 10 пустых полей?
Или сделать одну таблицу на 10 полей, а другую на 20, и при улучшения статуса до золотого, копировать данные данного пользователя в новую таблицу, а из старой удалять?

И еще очень важный момент. Каждое создание профиля/обновление должно проходить через модератора. То есть даже если уже все внесето и посетители сайта просматривают инфу, а владелец компании изменил профиль, то новый профиль должен появится у модератора, а старый все так же висеть на сайте.
Как тут быть? Сделать временную таблицу, из которой постоянно удалять записи при одобрении модератором и перезаписывать информацию в оригинальную? Или в оригинальной таблице сделать еще столько же полей, приписав к названию скажем _temp, но тогда таблица будет иметь 40 полей.. нехорошо вроде как!

Это же касается и продуктов и с тороговыми предложениями. Как там быть с модераторством? Делать временные таблицы или очень большие или сделать пару дополнительных полей, по которым будет ясно, где оригинал, а где ждущая модерирования запись?

И вообще, что лучше, постоянно удалять и записывать или только обновлять (оставлять поля пустыми, кроме ID и company_id)?

Всем, всем всем приооогромной спасибо!!
 

Demiurg

Guest
и что ты хочешь получить в ответ на это ? полностью расписаные варианты структур баз с тщятельным объяснением всех плюсов и минусов или готове приложение ?
 

webxtor

Новичок
Я поставил задачу: много данных, большая посещаемость.

Хочу получить версии каждого, кто их выскажет, как лучше организовать таблицы! (Это выйдет чуть больше твоего поста, ув. Demiurg)
 

Demiurg

Guest
Понимаешь, в чем дело ... подробную и квалифицированую консультацию тебе тут никто не даст.
 

Фанат

oncle terrible
Команда форума
webxtor рекомендую в документации по mysql почитать ХОТЬ ЧТО_НИБУДЬ про оптимизацию.
Если даже и не поймешь сам, как сделать, то хотя бы вопросы твои на форуме будут более осмысленными

-~{}~ 26.02.05 00:43:

уберите отсюда этого ламера.
в одной теме он начинающий, а в другой советы раздает
 

tony2001

TeaM PHPClub
webxtor
тебе нужны не советы в форуме, а грамотный партнер по проекту.
ты неправильно понимаешь сам принцип форума: "я поставил задачу" не пройдет.
решение задачи - это платное удовольствие, т.к. требует значительных затрат времени на _твой_ проект.

конкретный вопрос столько времени не требует и тебе могут ответить на него сразу.
это намёк.
раздели свою задачу на несколько маленьких вопросов и решай их отдельно.
 

webxtor

Новичок
Автор оригинала: Фанат
webxtor рекомендую в документации по mysql почитать ХОТЬ ЧТО_НИБУДЬ про оптимизацию.
Если даже и не поймешь сам, как сделать, то хотя бы вопросы твои на форуме будут более осмысленными

-~{}~ 26.02.05 00:43:

уберите отсюда этого ламера.
в одной теме он начинающий, а в другой советы раздает
Я прочитал про оптимизацию все, но к сожалению, там не очень много написано про проектирование. Я сказал, что проблема не в индексах или фантазиях.

Готов и скрипт и дизайн сайта. Уже сграблены 1,500 категорий и 5,000 компаний с их профилями и продуктами.

Мне просто хотелось получить СОВЕТЫ людей, которым приходилось имет дело с модерированием большого обьема данных, а так же с таблицами, где выборка одних полей чаще, чем других.

Я написал много, чтобы у вас не возникало вопросов по поводу проекта, чтобы была видна вся картина с высоты птичьего полета.

Мне хочется сделать этот проект граммотно с самого начала.

Очень хотелось бы услышать КОНКРЕТНЫЕ мысли по поводу организации таблиц.
 

Фанат

oncle terrible
Команда форума
КОНКРЕТНЫЕ мысли :
выполнить запросы EXPLAIN и поставить нужные индексы.

-~{}~ 26.02.05 01:06:

так же с таблицами, где выборка одних полей чаще, чем других.
а советы людей, которые немного знают теорию, и, в частности, тот факт, что база для того и придумана, чтобы давать проризвольнгый доступ к данным на уровне полей - интересуют?

-~{}~ 26.02.05 01:07:

Уже сграблены 1,500 категорий и 5,000
НЕ ПОНЯЛ

А, тоее, понял.
как всегда, живем чужим трудом, а сами даже базу для ворованного контента сделать не можем
 

webxtor

Новичок
Автор оригинала: tony2001
webxtor
тебе нужны не советы в форуме, а грамотный партнер по проекту.
ты неправильно понимаешь сам принцип форума: "я поставил задачу" не пройдет.
решение задачи - это платное удовольствие, т.к. требует значительных затрат времени на _твой_ проект.

конкретный вопрос столько времени не требует и тебе могут ответить на него сразу.
это намёк.
раздели свою задачу на несколько маленьких вопросов и решай их отдельно.
Ооо! серьезные люди отозвались! :D
Да я и хотел сделать маленькие вопросики... но как-то льется.. текст из моих рук.

Итак уменьшу вопросы до минимума:

1. Если выборка по одним полям таблицы, делается чаще, чем по другим, стоит ли делать отдельную таблицу для тех полей, которые берутся реже? В данном случае, или если хотите, например, чаще берутся контактные данные пользователя, а реже - профиль его компании, хотя концептуально это одной группы данные.

2. Если требуется организовать модерируемость некоторых таблиц, с учетом того, что уже отмодерированные данные должны быть неизменными до момента очередного одобрения модератором, то стоит ли создавать временную таблицу для модерируемых данных с целью снизить нагрузку на основную таблицу из которой постоянно делается выборка?

2.1. Если создавать таблицу сугубо для временных (ожидающих модерирования) данных, то лучше чтобы записи удалялись/записывались или обновлялись (на пустые значения при одобрении и на желаемые изменения, ожидающие модерации)?

:rolleyes:

-~{}~ 26.02.05 01:19:

Автор оригинала: Фанат
КОНКРЕТНЫЕ мысли :
выполнить запросы EXPLAIN и поставить нужные индексы.

-~{}~ 26.02.05 01:06:


а советы людей, которые немного знают теорию, и, в частности, тот факт, что база для того и придумана, чтобы давать проризвольнгый доступ к данным на уровне полей - интересуют?

-~{}~ 26.02.05 01:07:


НЕ ПОНЯЛ

А, тоее, понял.
как всегда, живем чужим трудом, а сами даже базу для ворованного контента сделать не можем
ЕЩЕ РАЗ повторяю: Индексы проставить не проблема! Требуется организовать струкрутуру таблиц.

Сорри, я не понял на счет советов людей, которые немного знают теорию... :(

Да, мы пользуемся чужим трудом, однако это задача из области парсинга, не из легких, для некоторых проектов применяется теория искусственного интеллекта, однако не будем тут об этом.
А базу мы можем не можем но ДЕЛАЕМ ;)
 

Кром

Новичок
>Да, мы пользуемся чужим трудом, однако это задача из области парсинга, не из легких

Итак, все свелось к банальному воровству контента.
Радостно...
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Чувак, даю общий ответ на общий вопрос. Схема базы проектируется следующим образом: сначала проводится нормализация до 3НФ или НФБК (дальше редко нужно). Потом, если возникают конкретные проблемы с конкретными таблицами, проводится денормализация. Повторяю: "конкретные проблемы", т.ч. надо гонять приложение и смотреть, где будет тормозить.

И потом, "база около гига" --- это маленькая база, даже при условии использования такой поделки, как мыскль.

А за контент, надеюсь, вам ещё настучат по тыкве.
 

webxtor

Новичок
Мдя... так мы не что каши не сварим, даже воду не закипятим!!! :mad:

Хотя, я конечно сам виноват, что столько той самой воды налил! :rolleyes:

Прошу закрыть эту тему нафиг! (Создам другую, совсем без воды :) )

ЗЫ. Отдельное спасибо Sad Spirit и tony2001 за ответы по существу!

-~{}~ 26.02.05 12:12:

Да.. к стати про НФ читаем тут (кому нужно):

http://www.info-system.ru/designing/methodology/er/er.html

(Если кто знает еще ссылочки такого плана, давайте!)

-~{}~ 26.02.05 12:17:

Просьба Sad Spirit оценить материал изложенный по той ссылке! :)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: webxtor
Да.. к стати про НФ читаем тут (кому нужно):

http://www.info-system.ru/designing/methodology/er/er.html

(Если кто знает еще ссылочки такого плана, давайте!)

-~{}~ 26.02.05 12:17:

Просьба Sad Spirit оценить материал изложенный по той ссылке! :)
Рекомендую начать с Citforum'а.
Та ссылка, которую ты привёл, содержит перепечатки каких-то материалов (вполне возможно, что оттуда же).
 

webxtor

Новичок
О! спасибо! А я там искал в разделе MySQL, но ничего путного не нашел.. :(
 
Сверху