|
|
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток! Уважаемые архитекторы, проектировщики баз данных, поделитесь опытом, по какому принципу, личных соображений, исходите при выборе нормализации данных? Меньше редудантных данных обеспечивает компактное их хранение, возможно и скорость, но "усложняет" oбработку "join"-ов. Денормализация- все в "одну табличку"- зато "один" select. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2012, 02:30 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
DamirIпо какому принципу, личных соображений, исходите при выборе нормализации данных? По принципу "не хочешь срать - не мучай жопу". Не надо тюнить перфоманс если его и так хватает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2012, 02:32 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
По умолчанию нормализуется все до формы Бойса-Кодда (данные должны хранится в одном месте) Затем, если задача позволяет и выгода от денормализации перевешивает риски бардака в данных, проводится денормализация. Разрабатывается регламент проверки денормализованной базы, чтобы если по какому-то недоразумению бардак затесался, то его можно было выловить. Например, по ночам выполняется хитрый запрос. Если запрос данных не вывел - все хорошо, если вывел, то результат посылается письмом ДБА) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2012, 02:41 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
> Уважаемые архитекторы, проектировщики баз данных, поделитесь опытом, по какому > принципу, личных соображений, исходите при выборе нормализации данных? Всегда нормализуем. Меньше > редудантных данных обеспечивает компактное их хранение, возможно и скорость, но > "усложняет" oбработку "join"-ов. JOIN-ы -- не проблема для СУБД, проблема -- запросы без селективных фильтров. 10-30 join-ов в запросе -- ерунда, если запрос имеет нормальный фильтр, напр. на 10-200 записей. Денормализация- все в "одну табличку"- зато > "один" select. Дебилизм. SERG1257 тут дал вполне адекватный взгляд на вещи. Я добавлю ещё следующее: данные у нас защищены от ad-hoc запросов пользователей (прямые запросы запрещены, даже на чтение, а уж тем более на изменение), поэтому свою БД мы можем денормализировать в любое время. Но принципы такие: -- Денормализация производится только для нужд улучшения производительности, только в крайних случаях, когда по-другому уже не выкрутится. -- денормализация -- это СНАЧАЛА нормализация, ПОТОМ следующий шаг. Не наоборот. В БД ВСЕГДА остаются нормализованные данные и ТОЛЬКО ОНИ модифицируются. Денормализованные поля проносятся при этом в (обычно дочерние) таблицы. Пользователь естественно этого изменения данных никогда не видит. Типичный случай денормализации -- это как я бы его назвал разнесённый селективный ключ. Набор полей, используемый в запросе, имеющий высокую селективность, но хранящийся в разных таблицах. Чтобы сделать по нему индекс, поля одной таблицы копируются в другую. Например, (КЛАСС ОБЪЕКТА, СОСТОЯНИЕ ОБЪЕКТА) хранились у нас в разных таблицах, были сведены в одну в физической БД. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2012, 13:06 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
Народ, спасибо, за компетентные ответы. В двух словах предысторию. Сделал шефу дизайн базы, следуя принципам нормализации. Шеф, он же хозяин фирмы, посмотрел, говорит, что хотел бы немного по-другому. Одним словом- для него редудантные данные- не проблема. И он, на самом деле предложил - все в одну табличку. Скажем есть табличка с константными значиями, например, "тип самолета". Определенный "клиент" - может иметь, множество "типов самолетов". Вместо, чтобы содзавать таблицу "релатион_клиент_то_тип_самолета", предлагает, в самой табличке "клиент" создать поле "тип самолета", и в нем типы самолетов разделенные запятой. Тип поля varchar2(200byte) (oracle-db). Понятно, что в таких полях, при не совсем правильном использованием, возможно появления "мусора". Пытался и это преподнести, на это шеф говорит, что performance в таком случае оптимальна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2012, 23:33 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
DamirI, Я понимаю, что решение принимает шеф. Но какое и почему должны объяснить ему Вы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2012, 23:39 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
> В двух словах предысторию. Сделал шефу дизайн базы, следуя принципам > нормализации. Шеф, он же хозяин фирмы, посмотрел, говорит, что хотел бы немного > по-другому. Если шеф смотрит в БД -- это уже мегастранно. Он не должен туда смотреть, его должен интересовать только конечный результат. Одним словом- для него редудантные данные- не проблема. И он, на > самом деле предложил - все в одну табличку. Для него -- не проблема. Это ТВОЯ проблема будет. Не его. А тебе он прикажет "ЧТОБЫ ВСЁ БУЛО ОК" -- и всё. Ты будешь отдуваться, не он. Скажем есть табличка с константными > значиями, например, "тип самолета". Определенный "клиент" - может иметь, > множество "типов самолетов". Вместо, чтобы содзавать таблицу > "релатион_клиент_то_тип_самолета", предлагает, в самой табличке "клиент" создать > поле "тип самолета", и в нем типы самолетов разделенные запятой. Тип поля нарушение 1 НФ, ты не сможешь обрабатывать эти данные на SQL-е. Очень грубая ошибка проектированич БДю > varchar2(200byte) (oracle-db). Понятно, что в таких полях, при не совсем > правильном использованием, возможно появления "мусора". Дело даже не в этом. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 00:51 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
DamirIв самой табличке "клиент" создать поле "тип самолета", и в нем типы самолетов разделенные запятой. Тип поля varchar2(200byte) (oracle-db). Понятно, что в таких полях, при не совсем правильном использованием, возможно появления "мусора". Пытался и это преподнести, на это шеф говорит, что performance в таком случае оптимальна. Оптимальна? Он забавный... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 01:23 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
MasterZiv, >Если шеф смотрит в БД -- это уже мегастранно. >Он не должен туда смотреть, его должен интересовать только конечный результат. Как ни странно это не звучит, сейчас он смотрит в БД. Он, в принципе, как коллеги рассказывали, лично написал ранние версии продукта. Короче, последние пару лет, пара горе-архитекторов, с него так сказать денежки поимели, сделали ему "гавняшку". Их недавно уволили. >нарушение 1 НФ, ты не сможешь обрабатывать эти данные на SQL-е. >Очень грубая ошибка проектированич БДю референтных свойств, подобных "тип самолета", и привязанных к таблице "клиент", около 15 штук. Количество "join"-ов, при создании объекта в конечном приложении- возрастает до 20. С DBA-никами разговаривал на эту тему, нормализированный вариант им был по душе. Но, сами референтные свойства никакаким образом не обратываются на уровне БД (никаких селектов не нашел). Эти свойства обрабытаваются лишь на уровне приложения. >Для него -- не проблема. Это ТВОЯ проблема будет. Не его. А тебе он прикажет >"ЧТОБЫ ВСЁ БУЛО ОК" -- и всё. Ты будешь отдуваться, не он. MasterZiv, я Тебя павильно понимаю, что в данном случае лучше постараться еще и еще раз обьяснить шефу, что нормализированный вариант, будет одназначно лучше, даже при наличии множества референтных свойств, подобных "тип самолета" (ок.15)? И что "join"-ы особой проблемы на скорость предоставления данных не будут влиять? (Hardware: топ - собственный дата-центр. Software: Oracle 10) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 05:40 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
авторЭти свойства обрабытаваются лишь на уровне приложения. Ну разве что так... Т.е. понимаем, что хранить свойства объекта через запятую в строку - это задница. Но берем и прикрываем эту задницу дырявым тазиком, перенося работу с этой дурацкой строкой на клиент. Это и есть наследие тех архитекторов, которое теперь никто не хочет переделывать? Задница как была, так и осталась голая. Но по документам - прикрыта. Все довольны =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 06:13 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
Edd.Dragon, >наследие тех архитекторов имеется ввиду следующее: продуктивно используется версия продукта, написанная несколько лет назад, где "тип_самолета" используется как поле. Пару лет назад, горе-арихтекторы "продали", так сказать, шефу идею про jpa. Существующую базу, даже особо не смотрели. Короче, актуальная разработка- просто "монстр"- никакой нормализации нет, performance на нуле. Шеф недавно устроил "разгоняйки",-"полетели головы". Tекущаю задача: то как озвучил выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 06:37 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
DamirI, денормализацию стоит использовать только уже на очень больших объемах данных - мы начали где-то после 15гиг на одной табличке - доставить оборудования -> денег не выделяли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 07:19 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
> Я понимаю, что решение принимает шеф. Но какое и почему должны объяснить ему Вы. Если за вас решение принимает шеф, надо увольняться. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 10:04 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
> Как ни странно это не звучит, сейчас он смотрит в БД. Он, в принципе, как > коллеги рассказывали, лично написал ранние версии продукта. Короче, последние > пару лет, пара горе-архитекторов, с него так сказать денежки поимели, сделали > ему "гавняшку". Их недавно уволили. > Если товарищь предлагает делать такое: "Вместо, чтобы содзавать таблицу "релатион_клиент_то_тип_самолета", предлагает, в самой табличке "клиент" создать поле "тип самолета", и в нем типы самолетов разделенные запятой. Тип поля varchar2(200byte) (oracle-db)." то он нифига не смыслит в базах данных однозначно, а соответственно слушать его бессмысленно (в этом вопросе) > > >нарушение 1 НФ, ты не сможешь обрабатывать эти данные на SQL-е. > >Очень грубая ошибка проектированич БДю > > референтных свойств, подобных "тип самолета", и привязанных к таблице "клиент", > около 15 штук. Количество "join"-ов, при создании объекта в конечном приложении- > возрастает до 20. С DBA-никами разговаривал на эту тему, нормализированный Ты перепутал что-то, JOIN один, точнее два. От пользователя -- к типам самолётов пользователя и потом куда уже надо с типами самолётов пользователя. > вариант им был по душе. Но, сами референтные свойства никакаким образом не > обратываются на уровне БД (никаких селектов не нашел). Эти свойства > обрабытаваются лишь на уровне приложения. Это как ? > MasterZiv, я Тебя павильно понимаю, что в данном случае лучше постараться еще и > еще раз обьяснить шефу, что нормализированный вариант, будет одназначно лучше, Он не будет однозначно лучше, он будет единственно правильным. Другого варианта нет. Да, посторайся объяснить. Ещё раз, такие дизайны БД -- это 100% вопиющая безграмотность проектировщика. Ты можешь убедить шефа очень просто: создай прототип такой БД, маленький, забей немного данных тестовых. И потом попробуй решить какую-то типовую задачку с использованием типа самолёта пользвателя, напр, список всех рейсов самолётов типов, записанных за данным пользователем (НА SQL, РАЗУМЕЕТСЯ). > даже при наличии множества референтных свойств, подобных "тип самолета" (ок.15)? > И что "join"-ы особой проблемы на скорость предоставления данных не будут влиять? JOIN-ы вообще для СУБД не проблема, хоть 200 их будет. А скорость -- используешь индексы -- получаешь скорость пропорциональную логарифму от размера таблицы. Посчитай сам. Логарифм возми напр. по основанию 10, хотя бы (в реальности основание больше). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 10:14 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
> имеется ввиду следующее: продуктивно используется версия продукта, написанная > несколько лет назад, где "тип_самолета" используется как поле. Пару лет назад, > горе-арихтекторы "продали", так сказать, шефу идею про jpa. Существующую базу, На самом деле обсуждать так какую -то БД смысла большого нет. Надо знать постановку задачи, надо знать БД эту, структуру её. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 10:16 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
> денормализацию стоит использовать только уже на очень больших объемах данных - > мы начали где-то после 15гиг на одной табличке - доставить оборудования -> денег > не выделяли Наоборот, я бы сказал. Чем больше БД, тем актуальнее нормализованные данные. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 10:17 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Шеф, он же хозяин фирмы, он же руководитель ИТ-подразделения. Подготовил оба варианта(нормализ. и денормализ.). Посмотрим, как оценят за "большим" столом, DBA-ников приглашу. На днях будет известно- отпишусь)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 10:39 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 10:57 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
DamirI http://www.selikoff.net/2008/11/19/why-too-much-database-normalization-can-be-a-bad-thing/ Там же написано, "too much Database" В тексте написано что 10 000 пользователей и т.д. А Вас столько-же? По-любому, начинать с денормализации, тут уже хором все говорят - дурной тон, если-же говорить по простому, по-пацански, то это быдлокодерство, никого не хотел обидеть, но если шеф будет настаивать, то уж лучше свалить от такого шефа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 13:08 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
zeon11, - количество записей в "клиент"-е -до 10^6 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 13:47 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
... DBA-ники меня поддерживают относительно нормализированного варианта. Думаю, все будет в ажуре. Так, поприкалывались с DBA-ником, все поля "клиента" как одно поле BLOB-ом сохранять- жуть ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 14:55 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
> http://www.selikoff.net/2008/11/19/why-too-much-database-normalization-can-be-a-bad-thing/ Идиотская статья. В сети сейчас много идиотов, они все пишут статьи. Точнее, конечно же, они не такие и идиоты -- деньги зарабатывают на рекламе на своих сайтиках и бложиках. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 17:06 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
Если данные вообще никак не обрабатываются на уровне СУБД (куском считали, куском записали) есть паллиатив в виде XML Проблема в том, что если база стала успешной вероятность ее использования не через приложение растет. Нарушение нормальных форм - потенциальные грабли и на них идут когда овчинка явно стоит выделки. Шефу можете найти SQL Antipatterns: Avoiding the Pitfalls of Database Programming там грабли расписаны по пунктам. А вообще ты попал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 17:14 |
|
||
|
Нормализация vs Денормализация данных for Performance tuning
|
|||
|---|---|---|---|
|
#18+
Статья - троллинг. Типа почему можно перебегать дорогу в неположеном месте, на красный свет с аргументами - полицанер не видит, штраф - копейки, время дорого и т.д. выпуская самый главный аргумент - рано или поздно попадешь под машину так как правила написаны кровью. В статье совсем не озвучена логическая необходимость нормализации. Да у вас на страже целостности триггеры, пермишены, процедуры и вооруженная охрана, но тот кто будет базу ломать (не по злобному умыслу конечно, он уже найден, сознался, расстрелян уволен) отключит триггеры, будет иметь необходимые пермишены, не запустит вашу процедуру и покажет пропуск охране. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 19:32 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37705896&tid=1541795]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
139ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 411ms |

| 0 / 0 |
