Mysql Помогите понять нормализацию

MiksIr

miksir@home:~$
Бритва Оккама тут совершенно не к месту. Некоторые одаренные еще на KISS ссылаются.
А так - вы всего лишь перекладываете свои затраты на железо. Ваше право. Только не нужно это в религию возводить.

>прекрасно работает в крупнейших интернет-магазинах рунета
Ага, и без кеширования, конечно.
Ну т.е. тут в левой колонке количество товаров считается каждый раз через join с группировкой и даже без кеширования.
 
  • Like
Реакции: WMix

hell0w0rd

Продвинутый новичок
MiksIr, а почему бы и нет?
Если html генерится на сервере - выносим такой блок в esi. Тем более, что скорее всего не обязательно показывать точное кол-во товаров.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Бритва Оккама всегда при чем, это краеугольный камень проектирования. Аргументация в стиле "в огороде бузина - в городе дядька", как и мнение без обоснования вообще - признак поверхностного знания темы.
Я - дорогой, а компьютер - дешевый, поэтому я перекладываю свои затраты на железо. Час работы среднего программиста - месяц аренды нормального VPS.
Я - инженер, а не демагог, я оптимизирую там, где нужно.

Серьезные сайты работают с кешированием в nginx и в memcached, с hip-hop, со сфинксом, с репликацией, шардингом и партицированием, и если рассматриваем их архитектуру - смотрим варианты, а не "mongo is web scale".
Без кеширования миллион-полтора хитов тянет без проблем. Добавляем реплику - получается 3 млн хитов без затрат времени разработчика.
Тема о нормализации, предлагаю не прятать некомпетентность за умными фразами не по теме.
 
Последнее редактирование:

MiksIr

miksir@home:~$
Кеширование - это точно такая же денормализация, только вынесенная из одной СУБД в другую. Так что не вижу причин "не смешивать". Основная проблема денормализации - меньшая прозрачность способа получения данных и возможность ошибки денормализованных данных. Кеш дает ровно такие недостатки. Рассматривайте денормализацию как кеширование, если вам режет глаз.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Согласен: когда нет аргументации по сути, можно уйти в терминологический спор - отличный способ съехать и, вроде как, сохранить лицо.

Хоть кеширование, хоть денормализация, теме нормализации что-то есть добавить?
 

MiksIr

miksir@home:~$
Вот так и рождаются системы, которые ложатся от малейшего чиха =) Просто программист слишком ценил свое время ;)
К слову, не вижу, как денормализация повышает затраты на время, ну да ладно, это уже такое высокое ЧСВ...
Тесты, наверно, тоже пишете только тогда, когда уже завалили проект багами, да? ;) Ну, исходя из тех же принципов.
 

MiksIr

miksir@home:~$
согласен: когда нет аргументации по сути, можно уйти в терминологический спор - отличный способ съехать и вроде как, сохранить лицо
О, вижу у вас другой способ съехать. Не более оригинальный, увы. Еще про тролля забыли упомянуть.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
так и рождаются системы, которые ложатся от малейшего чиха
щас мы по этому треду составим список самых популярных способов съехать с темы.
способ второй: гиперболизация слов оппонента, довести до абсурда, привести пример неудачи, игнорируя остальные удачные случаи.
запасся попкорном :)
 
  • Like
Реакции: WMix

MiksIr

miksir@home:~$
Ладно уже обычный срач пошел, останемся при своих. Для меня денормализация - это часто способ как раз экономить мое время.
 

MiksIr

miksir@home:~$
Да не, это вы скачете то от серьезных баз с миллионами инсертов, то до vps.
Как говорил фишер, "дешевле добавить железа" - уже не работает на больших системах. Ибо не дешевле.

Да и на vps - вопрос. Может быть час программиста и есть стоимость vps, только час работы единичен, а стоимость vps - ежемесячна. Так что получается такая весьма советская экономия.

Добавляем реплику - получается 3 млн хитов без затрат времени разработчика.
Зато со стоимостью нового сервера, размещения, настройки, установки. Зато программист час сэкономил ;)
 

fixxxer

К.О.
Партнер клуба
Как говорил фишер, "дешевле добавить железа" - уже не работает на больших системах.
Большие системы - это когда как баду. 10-20 серверов - это небольшая система.

Может быть час программиста и есть стоимость vps, только час работы единичен, а стоимость vps - ежемесячна. Так что получается такая весьма советская экономия.
Ты забыл посчитать стоимость поддержки кода.
 

MiksIr

miksir@home:~$
Большие системы - это когда как баду. 10-20 серверов - это небольшая система.
5-10% производительности = 1 сервер = много больше, чем час работы программиста


Ты забыл посчитать стоимость поддержки кода.
Этот вопрос слишком абстрактен, что бы его считать ;) Может повысить стоимость поддержки, а может уменьшить... но скорее всего сильно не изменит. А может, перенесет на другой уровень, что позволит равномернее загружать специалистов - на уровень проектировщика СУБД, ведь, например, материализованная вьюшка - это тоже денормализация.
 

fixxxer

К.О.
Партнер клуба
Кэширование - это не положить хрень в кэш по md5 на минуту, такое кэширование сделает обычно только хуже. Кэширование - это построение perstistance layer с учетом инвалидации кэшей и оптимизации hit-miss ratio, что все принципиально меняет.
 

MiksIr

miksir@home:~$
Кэширование - это построение perstistance layer с учетом инвалидации кэшей и оптимизации hit-miss ratio, что все принципиально меняет
Ничего принципиально не меняет. "Инвалидация кеша" - процедура денормализации; "оптимизации hit-miss ratio" - играет роль лишь при наличии miss-ов, что не является требованием кеширования, а является требованием ограниченности инфраструктуры; построение perstistance layer - этот layer может быть где угодно, хоть внутри СУБД,
 

fixxxer

К.О.
Партнер клуба
Если устраивает кэш внутри СУБД, то есть база одна - включаешь этот кэш и все, это не рассматривается - приложение никак не меняется.

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

fixxxer

К.О.
Партнер клуба
"Инвалидация кеша" - процедура денормализации
Чочочо

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

grigori

( ͡° ͜ʖ ͡°)
Команда форума
вопрос слишком абстрактен, что бы его считать
час работы единичен, а стоимость vps - ежемесячна
Если что-то похоже на рыбу, пахнет как рыба и выловлено из воды - не надо проводить глубокий анализ, чтобы утверждать, что это - рыба. (С)
Если добавление слоя кеширования требует рефакторинга в 2 недели + тестирование, а реплика стоит $100 в месяц - не надо быть экономистом, чтобы утверждать, что первые 2 реплики выгоднее. После 3й начинает расти latency и нужен умный драйвер поддержки репликации. Это немного меняет экономику, но до пары сотен тысяч уников в сутки это не нужно.

Например, sotmarket с 200-500к униками и >400к товаров в каталоге живет на 1м фронте + 1 master db, остальные - это failover, статистика, crm, рассылки, биллинг и т.п.
DBA несколько лет вычищает базу и занимается нормализацией потому что проблем со скоростью нет, но денормализованная структура не позволяет менять логику приложения.

Сказочных больших систем, на которых "уже не работает" в рунете аж 10: вконтактик, mail.ru, яндекс, одноклассники, мамба, hh, кто там еще. Архитектурой какой из них ты занимаешься?

"Инвалидация кеша" - процедура денормализации
Остапа понесло.
 
Последнее редактирование:

MiksIr

miksir@home:~$
есть товары, есть выборки товаров по фильтрам, с сортировкой по цене или рейтингу. где тут денормализация?
Даже если вы храните копию данных 1 в 1 в кеше - это все-равно вторая копия данных, т.е. избыточность. Можно поспорить, конечно, если бы не одно но. Вы вряд ли будете хранить в кеше 1 в 1, скорее всего у вас там будут рассчитанные данные. Ну, т.е., если товары с рейтингом, то в кеше у вас будет не все структура голосов, а исключительно сам рейтинг, заранее посчитанный.

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

MiksIr

miksir@home:~$
Если добавление слоя кеширования требует рефакторинга в 2 недели + тестирование, а реплика стоит $100 в месяц - не надо быть экономистом, чтобы утверждать, что первые 2 реплики выгоднее.
А можно не добавлять слой кеширования, а упростить наиболее затратный запрос, убрать оттуда 10 джойнов за счет денормализации - потратить пару дней, получить общий прирост в 3 раза, сэкономить на репликах, сэкономить на слое кеширования.
 
Сверху