|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Всем привет. Зарегался тут, чтобы поделиться мыслями и собрать опыт тех, кто длительное время проектируют и используют крупные/старые базы данных. Я пришел к выводу, что классический/школьный подход к разработке БД а-ля "нормализуйте все, нафигачьте справочников, пишите сложные запросы, которые будут выгребать и обновлять данные" в современном мире не работает. Мне сложно сформулировать, так что я перечислю некоторые утверждения, которые мне кажутся правильными, а внизу сделаю выводы. Вышенаписанное применимо, разумеется, к базам общего назначения, где требуется относительно быстрая вставка и селекты. Аналитические базы оставим в стороне. - В крупных БД с десятками миллионов записей явные FK не используются, а кол-во констрейнтов сильно ограничено, ибо индексы. - Справочники меняются крайне редко, разве что создаются новые версии элементов или добавляются новые. Иначе у юзера отчет за прошлый год не будет совпадать с бумажной версией или что-то подобное. - Большая часть запросов по базе - "запихай-ка мне в базу большой и сложный бизнес-объект", "прочитай его же", "выдай справочник или его часть", "сделай поиск по тому самому большому и сложному бизнес-объекту". - логику выносят из базы во внешние приложения - база только исполняет запросы. Причина очевидна - ЦПУ не резиновое, а распределенные базы ентерпрайз класса сложны и жутко дороги. - Датабазные джойны дороги. По моим старым замерам в mssql, запрос без джойнов работает примерно раза в 2 быстрее, чем запрос с одним джойном по ПК. Теперь выводы. Сначала о справочниках. Зачем их джойнить при загрузке объекта? Приличные приложения справочники кешируют у себя и джойнят сами, руками или тем же Хибернейтом. Или еще лучше - почему бы не встроить данные из справочника в сам объект, раз уж почти всегда требуется, чтобы сущности после создания не менялись при изменениях справочников? Бизнес-объекты. Обычно представляют из себя в базе мессиво мелких табличек, призванных отобразить разнообразные вложенные коллекции. Это мессиво сложно использовать и непрактично извлекать - см. цену джойнов. Почему бы тогда не зафигачивать данные в одну таблицу json-ом или аналогичным форматом? Ответ на вопрос "а как тогда селекты делать" чуть ниже, а пока назову только одну причину - "без приложения эти данные сложно извлечь, т.к. они не описаны в схеме". Что касается селектов или какого-то поиска. Селекты, где критично получить именно актуальные данные в транзакции - почти всегда примитивны и просты. Все остальное отлично покрывается внешними индексирующими приложениями вроде Apache Solr или Sphinx. В своей сфере они работают намного эффективнее СУБД. Что получается в итоге? Таблицы состоят из небольшого набора полей плюс клоб с Json-ом. Справочники есть, но большинство справочников используется только для создания новых объектов (данные из справочника встраиваются в сам объект). Простые и важные селекты идут по тем немногоим полям, которые остались в таблице. Сложный поиск делается специализированным софтом, данные в которое импортируются в рантайме приложением, которое висит на этой базе (в тяжелый случаях - джобой). Аналитика и кубы - на отдельной базе, с отдельным олап-кубом или тупо импорт в qlikview или подобную штуку. И, собственно, что хотелось бы услышать. Чем такая схема плоха? Для приложений? Для быстродействия или DBA? Для архитектуры системы в целом? Для управления данными в этой базе в долгосрочной перспективе? И, разумеется, что не хотелось бы услышать :) "КГАМ", "читай маны", "всё бред" ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2014, 20:25 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Большое количество таблиц призваны разнообразить жизнь разработчику на этапе проектирования и всем остальным, - долгие годы потом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2014, 20:50 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Поздравляю, Вы изобрели NoSQL. Про недостатки NoSQL - можете спросить Гугл ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2014, 21:08 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Кот Матроскин, Спасибо за ваше непрочтение моего поста. Ваш ответ не содержит полезной информации, так что вы можете свернуть его в рулончик и повесить справа от унитаза. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2014, 21:09 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scf, В общем Кот конечно же прав. Я могу только сказать что все зависит от поставленных задач. Тут могут быть как одни так и другие решения, в т.ч. и смешанные. Из всего что вы нацарапали верно только следующее: scfАналитика и кубы - на отдельной базе хотя немного непонятно, ведь вначале вы сами четко сказали: scfАналитические базы оставим в стороне. так зачем говорить о том что вы оставляете в стороне?.. Одним словом вам нужно не зацикливаться а повышать свой уровень, смотреть как устроены другие БД, как работают те или иные подходы в решении конкретных задач. Делать какие-то выводы увидев пару-тройку баз - это даже не смешно. Думаю со временем вы и сами поймете как заблуждались. Удачи вам на вашем пути. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2014, 21:28 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Злой Бобр, В моем посте довольно много вопросительных знаков. Если вы обладаете достаточным опытом, то, пожалуйста, поделитесь им. Не нужно придираться к ничего не значащим мелочам и давать общие советы по саморазвитию (а также ссылки на знаменитые мануалы по ораклу 2500 страниц каждый и стандарты ISO по data architecture) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2014, 21:46 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scf Я пришел к выводу, что классический/школьный подход к разработке БД а-ля "нормализуйте... Так уж и школьная? Вроде в институте читают, и не все эти самые нормальные формы осиливают. Там есть теория РБД. Теорий нет у других типов БД. Что относят к одному из недостатков этих других. scf Чем такая схема плоха? Ненормализованная? Плоха аномалиями, избыточностью. Опять же траблы могут быть с навязыванием ОЦ(констрейнов). Это то, как раз может и школах проходят. Если структура сложная и сложные запросы, то риски не малые. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2014, 22:08 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scf, Ссылок я изначально недавал, т.к. прекрасно понимаю что читать мануалы человеку который уже сделал выводы - ну как минимум лень. Что касается вопросов. Если есть вопросы то задавайте конкретно по СУБД, с описанием задачи и т.п. Вопросы риторического характера я игнорирую, т.к. незная применения нельзя дать мало мальски правильный совет. По написанному - не все разработчики выносят логику в приложение. Наоборот, тенденция идет к тому чтобы использовать тонкого клиента а все процедуры отрабатывались на сервере. Именно для этого и существуют кластеры, именно это и решают облачные сервисы. Конечно реализация может отличаться, но тем не менее вся нагрузка переносится на сервер. Звучала мысль собрать все в одной таблице и селект будет зашибись как быстро отрабатывать. Ну а вы размеры такой таблицы представляете? Плюс увеличив селект вы наступите на грабли с инсертом и т.п., т.к. будет блокировка таблицы. Исходя из практики могу сказать что лучше пожертвовать скоростью селекта чем вводом и изменением данных. Да, именно поэтому в БД куча таблиц. Ну а чтоб ускорить селекты как раз и пользуют индексы. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2014, 23:15 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
> Зарегался тут, чтобы поделиться мыслями Напрасно потратили время: это не мысли, это помои. Разумеется, никто не может запретить вам практическую реализацию ваших хм... умозаключений. Парадоксально, но на самом деле она выгодна рынку, поднимая стоимость архитекторов баз данных: чем больше кривых решений, тем выше цена специалистов с прямыми руками. Ничего личного, на самом деле вы вполне в мейнстриме. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2014, 02:39 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfИ, собственно, что хотелось бы услышать. Чем такая схема плоха? Для приложений? Для быстродействия или DBA? Для архитектуры системы в целом? Для управления данными в этой базе в долгосрочной перспективе? И, разумеется, что не хотелось бы услышать :) "КГАМ", "читай маны", "всё бред" Вы путает ООП и РМД. В ООП все так как вы говорите. А РМД немного другое. Нельзя "как есть" сохранить объекты в РБД. Т.к. в РМД структура данных не должна меняться часто (в идеале вообще неизменна) В отличии от ООП. Здесь "изменчивость" это основная "фишка". На стыке данных технологий происходит весь холивар. РБД "заточены" на хранение данных ACID наше все. ООП наоборот на "работу" с данными их изменение. Там где важно накопление точных данных, там всегда РМД (в основном финансы) Там где это не важно, а важно быстро изменить структуру данных, там обычно разные NoSQL решения. ООП применяется и там, и там, но при использовании РБД с РМД начинается "конфликт интересов". Разработчики ООП "плюются на" РБД, что там нельзя изменить структуру как им удобно, а разработчики под РБД "фигеют", что программисты ООП не хотят/не могут сделать нормализацию данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2014, 07:32 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scf, можно букв мнгого написать по данной теме, чуть больше, чем все изложенное вами, на мой взгляд, стало результатом недостаточного опыта использования СУБД (как вариант - не качественным опытом использования СУБД). Из пары десятков ваших концептуальных заблуждений прокомментирую 3, 7 и 15-ую (с). К примеру вот это утверждение: автор- В крупных БД с десятками миллионов записей явные FK не используются, а кол-во констрейнтов сильно ограничено, ибо индексы. мягко сказать заблуждение. Оперировать приходилось и приходится с базами в миллиарды записей в таблицах, и отсутствие FK на них привело бы как минимум к несогласованности данных и проблемам по типу "какого хрена эта запись здесь делает, если нет родительской?". "Висяки" (читай нарушение ссылочной целостности) в противном случае (т.е. при отсутствии констреинтов) - это отдельная головная боль, т.к. надо напрягать всех и вся от аналитиков до QA на тему "что будет, если мы их удалим? а как можно их удалить/откорректировать?". Что вы подразумевали под частью "ибо индексы" - не совсем понятно. Ибо много места занимают индексы? Ибо индексы "задерживают" вставку в таблицу? Ибо индексы надо периодически обслуживать? Дык это все вопросы архитектуры и все зависит от архитектора в первую очередь - нужен тривиальный баланс, когда индексы пойдут во благо, а не во вред процессу... Пойдем дальше: автор- Справочники меняются крайне редко, разве что создаются новые версии элементов или добавляются новые. Иначе у юзера отчет за прошлый год не будет совпадать с бумажной версией или что-то подобное. Совершенно не верное понимание справочника и структуры справочников. Если предполагается расширение справочника или изменение справочной информации и при этом отчетность за произвольный период, то любая сущность должна иметь характеристику - период актуальности. И тут уж без СУБД достаточно сложно организовать структуру и поиск справочной информации на конкретную дату. На счет крайне редко меняются - ой ли... Возьмите, к примеру, справочник товаров любого ритейлера. Или к примеру справочник терминалов/банкоматов Банка. Конечно же есть статичный справочники по типу регионов страны/городов, но как показал последние события (присоединение Крыма) - и они не достаточно статичны... авторпочему бы не встроить данные из справочника в сам объект, Как бэ "школьная" нормализация - чуть выше вы же сами переживали за размер БД (или мне показалось). Ну и смена наименования сущности справочника - опять же не настолько редкая ситуация. И апдейт при этом одной записи именно в справочнике или всех сущностей, где данная справочная инфа пользуется. Как по вашему, что "дешевле"? автор- логику выносят из базы во внешние приложения - база только исполняет запросы. Причина очевидна - ЦПУ не резиновое, а распределенные базы ентерпрайз класса сложны и жутко дороги. Таки да - базы ентерпрайза достаточно сложны. Вы думали ДБА просто так свой хлеб едят? Опять же задача архитектора грамотно распределить зоны ответственности между СУБД и клиентской частью, задача ДБА совместно с ДБ девелоперами = правильно сбалансировать нагрузку и сформировать распределенную серверную часть. Ну и далее можно продолжать в том же духе - но лень =) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2014, 11:01 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Кот МатроскинПоздравляю, Вы изобрели NoSQL. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2014, 11:25 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
On 25.08.2014 21:25, scf wrote: > Я пришел к выводу, что классический/школьный подход к разработке БД а-ля > "нормализуйте все, нафигачьте справочников, пишите сложные запросы, > которые будут выгребать и обновлять данные" в современном мире не > работает. Ты пришёл к неверному выводу. > - В крупных БД с десятками миллионов записей явные FK не используются, а > кол-во констрейнтов сильно ограничено, ибо индексы. Используются. Вторая часть утверждения -- пока просто неразличимый бред. > - Датабазные джойны дороги. По моим старым замерам в mssql, запрос без > джойнов работает примерно раза в 2 быстрее, чем запрос с одним джойном > по ПК. Это тоже бред. JOIN по индексу -- очень дешёвая операция. А сравнивать "запрос без джойнов" с "запросом с одним джойном по ПК" -- это вообще верх непрофессионализма -- запросы разные бывают, к тому же я полагаю, что твои способности замерять производительность запросов достаточно примитивны. > Сначала о справочниках. Зачем их джойнить при загрузке объекта? > Приличные приложения справочники кешируют у себя и джойнят сами, руками > или тем же Хибернейтом. СУБД это сделает в 100 раз быстрее и эффективнее, чем все остальные. Или еще лучше - почему бы не встроить данные из > справочника в сам объект, раз уж почти всегда требуется, чтобы сущности > после создания не менялись при изменениях справочников? Денормализация. Ересь. > Бизнес-объекты. Обычно представляют из себя в базе мессиво мелких > табличек, призванных отобразить разнообразные вложенные коллекции. Это > мессиво сложно использовать и непрактично извлекать - см. цену джойнов. > Почему бы тогда не зафигачивать данные в одну таблицу json-ом или > аналогичным форматом? Ответ на вопрос "а как тогда селекты делать" чуть > ниже, а пока назову только одну причину - "без приложения эти данные > сложно извлечь, т.к. они не описаны в схеме". У тебя каша в голове. Бизнес-объект, который ты имеешь в виду, никогда почти не нужно иметь вне БД целиком, в полном виде. А когда закачиваешь только те аспекты объекта, что нужны, таких проблем не будет. > Что касается селектов или какого-то поиска. Селекты, где критично > получить именно актуальные данные в транзакции - почти всегда примитивны > и просты. Все остальное отлично покрывается внешними индексирующими > приложениями вроде Apache Solr или Sphinx. В своей сфере они работают > намного эффективнее СУБД. Нет, это неправда. Это системы полнотектового индексирования. Если они встроены в СУБД (а они встроены во многие СУБД), то они так же эффективны, как и внешние индексаторы. > Что получается в итоге? В итоге получается фарш из каши из твоего головного мозга, я понял. :-) Таблицы состоят из небольшого набора полей плюс > клоб с Json-ом. Справочники есть, но большинство справочников > используется только для создания новых объектов (данные из справочника > встраиваются в сам объект). Простые и важные селекты идут по тем > немногоим полям, которые остались в таблице. Сложный поиск делается > специализированным софтом, данные в которое импортируются в рантайме > приложением, которое висит на этой базе (в тяжелый случаях - джобой). > Аналитика и кубы - на отдельной базе, с отдельным олап-кубом или тупо > импорт в qlikview или подобную штуку. > И, собственно, что хотелось бы услышать. Чем такая схема плоха? Тем, что она будет работать только для определённого рода приложений, которые ты, по видимому, только и разрабатывал. Например, все внешние индексаторы типа Apache Solr или Sphinx работают с данными off-line, т.е. в них хранится некий слепок БД из прошлого, отдалённого от настоящего настолько, насколько просто обновлять эту БД. Соотв., чем больше БД, тем сложнее её обновлять. > большинство справочников используется только для создания новых > объектов (данные из справочника встраиваются в сам объект). Это денормализация, опастность взрывного увеличения объёма данных. > Для приложений? Уже написал. > Для быстродействия или DBA? Быстродействие к этому индифирентно. Т.е. быстродействию пофиг. > Для архитектуры системы в целом? Архитектура системы должна подбираться под задачу, а не наоборот. Твоя архитектура, ещё раз, не универсальна, под любую задачу она не подойдёт. > Для управления данными в этой базе в долгосрочной перспективе? Для управления данными нужны хорошие системы хранения данных. Реляционные таблицы -- это хорошие системы хранения данных. JSON в блобе -- это неизвестно что, как его обрабатывать с помощью СУБД -- не понятно. Хорошо, если в СУБД есть поддержка JSON-а, а если нет? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2014, 12:32 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
On 26.08.2014 08:32, mad_nazgul wrote: > В ООП все так как вы говорите. > А РМД немного другое. > Нельзя "как есть" сохранить объекты в РБД. Да можно. > Т.к. в РМД структура данных не должна меняться часто (в идеале вообще > неизменна) > В отличии от ООП. Здесь "изменчивость" это основная "фишка". Нет, основная фишка в ООП -- не изменчивость, а инкапсуляция и полиморфизм. > На стыке данных технологий происходит весь холивар. > РБД "заточены" на хранение данных ACID наше все. > ООП наоборот на "работу" с данными их изменение. > Там где важно накопление точных данных, там всегда РМД (в основном финансы) > Там где это не важно, а важно быстро изменить структуру данных, там > обычно разные NoSQL решения. Это ты говоришь про Schemaless. Это не одно и то же с NoSQL. Одно не означает другое, и наоборот. РБД есть и такие, которые заточены не на ACID, а на хранилища данных. > ООП применяется и там, и там, но при использовании РБД с РМД начинается > "конфликт интересов". Нет такого конфликта, он выдуман. > Разработчики ООП "плюются на" РБД, что там нельзя изменить структуру как > им удобно, а разработчики под РБД "фигеют", что программисты ООП не > хотят/не могут сделать нормализацию данных. Это надумано. Нет такой проблемы. Если хочешь, менять структуру БД даже и проще, чем структуру объектов -- в БД это просто изменение структуры, в ООП надо ещё и переписать все программы, которые используют эту структуру. Если в БД есть ещё и код, то та же проблема будет и в БД -- надо переписывать и триггера, и процедуры. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2014, 12:43 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZiv> ООП применяется и там, и там, но при использовании РБД с РМД начинается > "конфликт интересов". Нет такого конфликта, он выдуман. воистину +1 )) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2014, 14:22 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZiv> Нельзя "как есть" сохранить объекты в РБД. Да можно. Это приведет к проблеме о которой вы писали. Поэтому нельзя ;-) Т.к. данные в РМД и данные в виде объектов это по большому счету разные вещи. Хотя на первый взгляд кажутся "одно и то же". MasterZiv> Т.к. в РМД структура данных не должна меняться часто (в идеале вообще > неизменна) > В отличии от ООП. Здесь "изменчивость" это основная "фишка". Нет, основная фишка в ООП -- не изменчивость, а инкапсуляция и полиморфизм. А для чего нужны "инкапсуляция" и "полиморфизм"?! Чтобы обеспечить "изменчивость". Мы скрываем как "внутри" устроен объект, чтобы его можно было менять как нам нужно. ;-) MasterZivРБД есть и такие, которые заточены не на ACID, а на хранилища данных. На сколько я помню они либо вымерли, либо их занимают ну очень специфичную нишу. Сейчас балом правит SQL ;-) MasterZivНет такого конфликта, он выдуман. Но он есть. И я его наблюдаю не на одном проекте. Как только начинается использоваться ORM, так сразу он и возникает. Т.к. со временем любое обращение к БД ч/з ORM обрастает кучей ХП (хранимых процедур). MasterZivЭто надумано. Нет такой проблемы. Если хочешь, менять структуру БД даже и проще, чем структуру объектов -- в БД это просто изменение структуры, в ООП надо ещё и переписать все программы, которые используют эту структуру. С точностью до наоборот! За счет наследования, инкапсуляции и полиморфизма в ООП всегда можно остановить старые данные и добавить новые. Для этого ООП и внедрялось, чтобы каждый раз не переписывать работу зависимых модулей при расширении функциональности или изменении структуры данных. С СУБД (SQL) все гораздо сложнее. Любое изменение структуры данных приводит к перепроектировке БД. MasterZivЕсли в БД есть ещё и код, то та же проблема будет и в БД -- надо переписывать и триггера, и процедуры. Вот именно! Но не только. Нужно еще не забывать о нормализации и ACID! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2014, 15:10 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
On 26.08.2014 16:10, mad_nazgul wrote: > Это приведет к проблеме о которой вы писали. > Поэтому нельзя ;-) На сколько я помню, я не говорил ни о каких проблемах. > Т.к. данные в РМД и данные в виде объектов это по большому счету разные > вещи. Данные -- это данные. Ещё раз, т.н. object-relational gap -- выдумка. Она вызвана грубо говоря тем, что в РМД нет массивов. Но всё это решается. См. решения в Hibernate etc. > А для чего нужны "инкапсуляция" и "полиморфизм"?! Если ты пишешь объекты куда угодно в БД (любую), то тебе надо забыть о инкапсуляции, это -- раз. Поэтому обеспечить просто изменчивость объектов в этой БД невозможно ( сложно так же, как и в РБД ). > Чтобы обеспечить "изменчивость". Если у тебя что-то меняется в объекте, то это почти наверняка как-то светится наружу объекта, потому что это кто-то как-то должен использовать, иначе в этом нет смысла. А это значит, что инкапсуляция опять не сильно поможет -- да, данные будут скрыты, но появятся или изменятся новые интерфейсы данного класса, изменится код, использующий этот классю > Мы скрываем как "внутри" устроен объект, чтобы его можно было менять как > нам нужно. Это очень наивное представление о проблеме. > MasterZiv > РБД есть и такие, которые заточены не на ACID, а на хранилища данных. > > На сколько я помню они либо вымерли, либо их занимают ну очень > специфичную нишу. > Сейчас балом правит SQL ;-) Нет, скорее наоборот, их сейчас очень много. > MasterZiv > Нет такого конфликта, он выдуман. > Но он есть. > И я его наблюдаю не на одном проекте. > Как только начинается использоваться ORM, так сразу он и возникает. Обычно я такие слова слышу от людей, которые просто не умеют работать ни с объектами, ни с РБД, ни с ОРМ. > Т.к. со временем любое обращение к БД ч/з ORM обрастает кучей ХП > (хранимых процедур). И что в этом плохого, в ? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2014, 20:29 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
mad_nazgulКак только начинается использоваться универсальный ORM, так сразу он и возникает. Поправил. Когда это "one size fits all" вообще работало?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2014, 20:35 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scf, Вам нужно, мне кажется, почитать аналитические темы, которые здесь периодически обсуждаются. Например, если бы Вы поучаствовали в этой теме http://www.sql.ru/forum/973198-1/db-specific-orm это помогло бы более формально описать то, что Вы предлагаете. Просто приведите пример, который наглядно бы показал преимущество "того, что Вы предлагаете" над "тем, что сейчас, обычно, используется". ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2014, 23:12 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZivДанные -- это данные. Ещё раз, т.н. object-relational gap -- выдумка. Она вызвана грубо говоря тем, что в РМД нет массивов. Но всё это решается. См. решения в Hibernate etc. Вообще для РМД массив - это лишняя сущность. Например в PostgreSQL есть массивы, но они там нужны для очень специфичных случаев (там их ввели для поддержки GIS). На моей практике ни разу не использовались. Hibernate - это ORM. ORM - зло! MasterZivЕсли ты пишешь объекты куда угодно в БД (любую), то тебе надо забыть о инкапсуляции, это -- раз. Поэтому обеспечить просто изменчивость объектов в этой БД невозможно ( сложно так же, как и в РБД ). Опять же на моей практике ни полиморфизм, ни инкапсуляция не мешали сохранять данные из объектов в БД. И это не мешает менять объекты как мне заблагорассудится. Просто не надо "напрямую" "мапить" объекты в БД. MasterZivЕсли у тебя что-то меняется в объекте, то это почти наверняка как-то светится наружу объекта, потому что это кто-то как-то должен использовать, иначе в этом нет смысла. А это значит, что инкапсуляция опять не сильно поможет -- да, данные будут скрыты, но появятся или изменятся новые интерфейсы данного класса, изменится код, использующий этот классю У-у-у вы даже ООП не знаете. Классический пример с геометрическими фигурами. Есть абстрактный класс "Фигура" у которой есть метод "нарисовать". Есть потомки "квадрат", "круг", "треугольник". У которых переопределен метод "нарисовать". Данные разные, классы разные, используются одинаково! MasterZivОбычно я такие слова слышу от людей, которые просто не умеют работать ни с объектами, ни с РБД, ни с ОРМ. Не знаю, просто всегда когда перед ORM ставиться задача чуть сложнее прочитать несколько строк из таблицы. Тут же возникают ХП. Практика из нескольких холиваров по поводу ORM. MasterZiv> Т.к. со временем любое обращение к БД ч/з ORM обрастает кучей ХП > (хранимых процедур). И что в этом плохого, в ? 1) ХП не относиться к РМД. Это процедурное расширение РМД. Что приводит к тому, что методы оптимизации которые хорошо работают в РМД, там перестают работать, ну или работают плохо. 2) ХП это всегда перенос бизнес-логики из приложения в БД. Что "размазывает" бизнес-лгику м/у приложением и БД. И это приводит к п 3) 3) Зачем нам лишняя сущность "приложение", если все можно сделать в СУБД. (Смотреть все холивары с Oracle) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 07:35 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
mad_nazgul... ORM - зло! ... Просто не надо "напрямую" "мапить" объекты в БД. ... Зачем нам лишняя сущность "приложение", если все можно сделать в СУБД... Все может сделать в том, что Вы назвали СУБД - программист. Потребитель даже фамилию человека не сможет узнать без программиста)) Так что это не СУБД, а СХОД (система хранения и обработки данных, предназначенная для программиста). Можно ли создать СУБД в среде РСХОД, например, в Oracle. Конечно. Получим некоторую модель данных верхнего уровня и маппинг в РМД по всем трем аспектам (структура, ограничения целостности, язык манипулирования). Который, видимо - зло)) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 08:51 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Народ, что-то вы скатились не туда :-) ORM - это, конечно, хорошо, и при правильном использовании несет много пользы, но правильно использовать его очень тяжело, а при неправильном он генерит очень неоптимальные запросы. Я думаю, что корень проблемы в вопросе "кто должен владеть данными в базе". Известно, что данные часто живут намного дольше, чем приложения, которые их породили, поэтому передача всего разработчикам приложения закономерно приводит к вопросу "что делать с данными, когда приложение умрет от старости". Итого возможны следующие варианты: - DBA низвергают до позиции инфраструктурщика, который занимается работоспособностью баз и дает консультации. Структурой и наполнением базы владеют разработчики, которые полностью изолируют базу от всех желающих ей пользоваться, предоставляя высокоуровневый сетевой API. Гугль, например, так работает. - DBA владеет структурой и данными, для доступа и модификации данных он пишет хранимки, которые защищают данные от кривых рук разработчиков. Эти хранимки НЕ должны содержать бизнес-логику. - Вся логика сосредоточена в базе, внешние приложения отвечают только за гуй. Кто-нибудь знает книжку по данному вопросу? или хотя бы ключевые слова? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 09:20 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfИзвестно, что данные часто живут намного дольше, чем приложения, которые их породили, .... В общем случае БД предназначена для разнах приложений, не только тех что "их породили" (их вообще проекты породили в общем случае): в них вся инфа ИС, которую должно быть относительно простол извлечь. Даже если структура сложная. В этом и показала себя РМД. Если БД удачно спректирована, то с помощью SQL (декларативно, ассоциативно) и проги которая уменеет посылыть эти запросы БД и возвращть результат инфу можно относительно просто извлеч. Остальные МД тоже как бы пытаются это повторить, но, возможно, что-то утрачивается в этих МД при этом. В частности, некоторые РСУБД пытаются расширить РМД до ОРМД, но на практике в основном все юзают РМД. Т.е. на уровне МД пока потеснить РМД не получается. Только на физическом для каких-то областей может удается потеснить РСУБД. В частности, и Оракла в линейке продуктов есть какая-то там NoSQL для каких-то задач. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 09:39 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
vadiminfo, "просто извлечь всем" - это важный критерий для database-centric архитектур, которые не очень хороши, ибо хрупки. Такой подход приводит к десяткам приложений вокруг одной базы и шансом сломать любое из них при любом изменении характера данных в базе, необязательно её схемы. Так что - редкие релизы и обширнейшее интеграционное тестирование. Практичнее изолировать базу за слоем API, сделанном или на хранимках, или на приложениях - "переходниках". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 09:58 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfНарод, что-то вы скатились не туда :-) ORM - это, конечно, хорошо, и при правильном использовании несет много пользы, но правильно использовать его очень тяжело, а при неправильном он генерит очень неоптимальные запросы. Я думаю, что корень проблемы в вопросе "кто должен владеть данными в базе". Известно, что данные часто живут намного дольше, чем приложения, которые их породили, поэтому передача всего разработчикам приложения закономерно приводит к вопросу "что делать с данными, когда приложение умрет от старости". Итого возможны следующие варианты: - DBA низвергают до позиции инфраструктурщика, который занимается работоспособностью баз и дает консультации. Структурой и наполнением базы владеют разработчики, которые полностью изолируют базу от всех желающих ей пользоваться, предоставляя высокоуровневый сетевой API. Гугль, например, так работает. - DBA владеет структурой и данными, для доступа и модификации данных он пишет хранимки, которые защищают данные от кривых рук разработчиков. Эти хранимки НЕ должны содержать бизнес-логику. - Вся логика сосредоточена в базе, внешние приложения отвечают только за гуй. Кто-нибудь знает книжку по данному вопросу? или хотя бы ключевые слова? Вы невнимательны, все игнорируете и меняете темы)) Данными должен владеть тот, кто владеет велосипедом или табуреткой - потребитель, кто же еще. Вы движетесь в правильном направлении - DOA (сейчас скромно говорят IOA). Желательно, конечно, избавиться от приложений полностью, в том числе и от тех, которые обеспечивают интерфейс. А для этого придется либо использовать ORM, либо какую-то модель нижнего уровня, чтобы обойтись без маппинга. Но, вы же не хотите ничего читать(( ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 10:03 |
|
|
start [/forum/topic.php?fid=32&tid=1539997]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
163ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 294ms |
0 / 0 |