|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#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 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Бредятина, Ничего не понял :) Как пользователи могут владеть данными, если они ими только пользуются? Вот вы написали пост - разве вы владеете его представлением в базе форума или отвечаете за сохранность этих данных, в том числе в долговременной перспективе? Расшифруйте DOA/IOA - гугль не в курсе этих аббривеатур. "Избавиться от приложений полностью" - вы сторонник подхода "пихаем всё в СУБД, включая веб-сервер"? Видел я и такие проекты... Что конкретно читать? Если вы про те 73 страницы - то пока не набрался смелости, чтобы выуживать из того болота ценные факты :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 10:10 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scf, Просто приведите пример, который наглядно бы показал преимущество "того, что Вы предлагаете" над "тем, что сейчас, обычно, используется". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 10:12 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfvadiminfo, "просто извлечь всем" - это важный критерий для database-centric архитектур, которые не очень хороши, ибо хрупки. . Основная цель ИС удовлетворение информационных потребностей. В частности, что бы просто было получать требуемую инфу. В том числе и извлеч. Т.е. это, скорее всего, важный критерей всей ИС, а не архитектур. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 10:13 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Бредятина, Пожалуйста, ответьте на предыдущий пост. Что касается ОП - я думал, что преимущества очевидны :). Простота в использовании со стороны приложений и быстродействие. Меня больше недостатки интересуют, насчет преимуществ я вполне в курсе. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 10:19 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfБредятина, Ничего не понял :) Как пользователи могут владеть данными, если они ими только пользуются? Вот вы написали пост - разве вы владеете его представлением в базе форума или отвечаете за сохранность этих данных, в том числе в долговременной перспективе? Расшифруйте DOA/IOA - гугль не в курсе этих аббривеатур. "Избавиться от приложений полностью" - вы сторонник подхода "пихаем всё в СУБД, включая веб-сервер"? Видел я и такие проекты... Что конкретно читать? Если вы про те 73 страницы - то пока не набрался смелости, чтобы выуживать из того болота ценные факты :-) 1) Я сказал потребители - опять невнимательность. Вы что хотите сказать, что человек не владеет велосипедом, который купил????? 2) А разве здесь не РСХОД?)) Тогда, конечно, не владею. 3) Архитектура, ориентированная на данные. Гугль не обладает знаниями в области теории и проектирования баз данных. Но по IOA (... на информацию) материал, конечно, есть. См. соседнюю тему. Не ленитесь. 4) Болото создают те, кто не хочет обсуждать вопросы по существу, но хотят, тем не менее, что-то написать. Это неизбежность. Так что, наберитесь смелости, если действительно хотите разобраться. 5) Мне неизвестно о подходе "пихаем...". Неизвестно о том, что Вы видели. Поэтому и говорю приведите пример, демонстрирующий преимущество (или конкурентоспособность) Вашего подхода. Но, сначала четко опишите этот самый подход)) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 10:20 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfБредятина, Пожалуйста, ответьте на предыдущий пост. Что касается ОП - я думал, что преимущества очевидны :). Простота в использовании со стороны приложений и быстродействие. Меня больше недостатки интересуют, насчет преимуществ я вполне в курсе. Ничего не понял((( Что за ОП. Я где-то написал про ОП??? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 10:22 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Бредятина, ОП = OP=open post Огромное спасибо за расшифровки, наконец-то нашел внемяемую литературу по проектированию хранилищ данных. Насчет преимуществ. Возьмем, например, базу страховых полисов. Полисов бывает большое кол-во типов, у каждого типа куча информации, которая в нем хранится, причем часть этой информации опциональна, причем опциональность зависит не от типа полиса, а от его данных. Итого, как можно поступить, проектируя базу данных для этих полисов? Классический подход - (местами) нормализованное хранилище, со связами один-ко-многим и многие-ко-многим через таблицы, местами денормализованное для повышения быстродействия плюс тщательно затюненные индексы для того, чтобы все нужные запросы работали быстро. Альтернатива? Одна таблица с тремя полями: id, номер полиса, clob с json-ом. Плюсы: - простота и скорость вставки и чтения полисов. никакого random io, никаких джойнов, никакой необходимости вытаскивать полис по частям, т.к. json пусть и сложен по формату, но невелик по объему - не больше 5 кб. Для пущей эффективности можно его сжимать или даже использовать двоичный формат (хотя это может быть плохим решением - см. ниже) - простота приложения, которое с этой базой работает. несколькими строчками можно достать из базы и развернуть полноценный объект полиса Проблемы и пути их решения: - справочники. Большая часть справочников не слишком велика и не обновляется оперативно, так что можно их кешировать на стороне приложения. Если обновляется оперативно - обновлять через другое приложение, которое предоставляет возможность подписки всем желающим. Если справочник реально огромен - делать селект из приложения по id. Если еще и roundtrip большой до базы... придется эти айдишники выносить из json в нашу таблицу и джойнить при извлечении полиса. - Юзер хочет список полисов, отсортированный и отфильтрованный по хитрым, юзерским критериям. Используем внешний индекс, закачивая в него данные в формате, заточенном под требования пользователя. Т.е. с данными, по которым будет идти поиск + данными, которые надо показывать в списке полисов. - Экспорт данных в другие системы? ETL уже не катит, да. Экспорт должно делать специальное приложение, которое загрузит полис, преобразует его и зальет куда надо. - Отчеты и аналитика? Если используется OLAP, то у него все равно отдельная база звездой, см. предыдущий пункт про экспорт. Если обычная база, то при ее проектировании можно учитывать только задачи аналитики - это сильно упростит задачу. Если данных реально много и юзер может подождать несколько минут, то из исходной базы данные отлично переливаются в Hadoop. Проблемы, которые я не уверен, как решать: - Consistency. Поиск может не возвращать свежайшие данные, экспорт будет экспортировать не совсем снапшот(частично решается версионностью записей с таймстампом) - Управление данными. Уже не посадишь sql-щика вычищать мусор из базы. И если данные в классической СУБД почти самодокументируемы, т.е. следующее поколение разработчиков, в теории, сможет их использовать, то json, а, тем более, двоичный формат потребует тщательного документирования. О том, нафига создавать все эти проблемы, а потом их решать: Масштабируемость. Производительность поиска, ETL, отчетов больше не зависит от машины(ах), на которых стоит оракл. Для многих задач время отклика или пропускную способность можно улучшать линейно от кол-ва задействованных машин. Фух :) Надеюсь, это внесет какую-то ясность. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 10:56 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
авторРасшифруйте DOA/IOA Подозреваю, что сэр Бредятина подразумевает Data Oriented Architecture и Information Oriented Architecture ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 10:57 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scf шансом сломать любое из них при любом изменении характера данных в базе, необязательно её схемы. Так что - редкие релизы и обширнейшее интеграционное тестирование. Практичнее изолировать базу за слоем API, сделанном или на хранимках, или на приложениях - "переходниках". Можно пример "изменения характера данных", которое неизбежно сломает приложение, но от которого спасет "слой API"? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 11:05 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
А, насчет трех полей я погорячился - еще будут нужны поля для версионности и экспорта. дата создания, дата последнего изменения, номер версии и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 11:05 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Кот Матроскин, "Неизбежно" - неудачное слово. Простейший пример - если мы добавили новое поле в таблицу, с дефолтом разумеется, чтобы инсерты не сломать. А приложение по этой таблице делало select * from ... Чем не повод сломаться? Пример поинтереснее - мы решили добавить в базу новый тип полисов. Теперь любое приложение, которое селектит по этой базе, надо перетестировать - как оно себя поведет с этим новым типом? API отличается тем, что может дать более жесткие гарантии. Или хотя бы более четкие гарантии. Насчет набора возвращаемых данных, насчет характера этих данных. И если что, то можно подпилить слой API, чтобы даунстрим не заметил разницы, пока они не смогут мигрировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 11:11 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfКот Матроскин, "Неизбежно" - неудачное слово. Простейший пример - если мы добавили новое поле в таблицу, с дефолтом разумеется, чтобы инсерты не сломать. А приложение по этой таблице делало select * from ... Чем не повод сломаться? Никогда не видел клиентского приложения, которое бы могло сломаться от select *. Это на какой библиотеке доступа такое возможно? Ну так не пишите в приложении select *, если боитесь этой конструкции - при чем тут API? scfПример поинтереснее - мы решили добавить в базу новый тип полисов. Теперь любое приложение, которое селектит по этой базе, надо перетестировать - как оно себя поведет с этим новым типом? И как тут спасет API? И как тут спасут Ваши JSON'ы? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 11:22 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Кот Матроскин, А, простите, я не обратил внимания, что вы тот самый человек альтернативной адекватности, который пишет ответы, не читая посты. Давайте я вас буду просто игнорировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 11:25 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfДавайте я вас буду просто игнорировать. Не могу Вам в свою очередь этого обещать ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 11:31 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Кот МатроскинscfДавайте я вас буду просто игнорировать. Не могу Вам в свою очередь этого обещать Сейчас цветут многолетние травы, и они могут, через аллергические рецидивы способствовать обострению дискуссий, это также необходимо учитывать на уровне потенциальных угроз достижению целей. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 11:36 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfБредятина, ... Фух :) Надеюсь, это внесет какую-то ясность. Конечно, внесло) "- Юзер хочет список полисов, отсортированный и отфильтрованный по хитрым, юзерским критериям. Используем внешний индекс, закачивая в него данные в формате, заточенном под требования пользователя. Т.е. с данными, по которым будет идти поиск + данными, которые надо показывать в списке полисов." Это - бесконечное программирование, как и в случае использования реляционных систем. Потребитель даже полис по фамилии владельца не сможет получить без программиста))). Но, когда, наконец-то, получит, то это будет "быстрее").. Для начала, если уж Вы говорите об "одной таблице", подумайте об одной таблице со всеми полями (всеми свойствами полисов всех типов), а не с тремя или десятью)) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 11:43 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Бредятина, Насчет поиска - увы, это неизбежно. Для фильтрации по новому полю нужно как минимум писать новый запрос, так что доработки неизбежны. Плюс индексы, плюс доработка гуя, плюс много чего еще. "Все данные в одной таблице" а-ля денормализация - очень популярный способ упрощения базы, НО плохо применим к отношениям один-ко-многим. В итоге появляются кадавры Fio1, Fio2, Fio3 и в итоге упираются в макс. кол-во столбцов в таблице. Плюс без пол-литры не поймешь, какие поля в данной строке используются, а какие не очень. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 12:12 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfБредятина, Насчет поиска - увы, это неизбежно. Для фильтрации по новому полю нужно как минимум писать новый запрос, так что доработки неизбежны. Плюс индексы, плюс доработка гуя, плюс много чего еще. "Все данные в одной таблице" а-ля денормализация - очень популярный способ упрощения базы, НО плохо применим к отношениям один-ко-многим. В итоге появляются кадавры Fio1, Fio2, Fio3 и в итоге упираются в макс. кол-во столбцов в таблице. Плюс без пол-литры не поймешь, какие поля в данной строке используются, а какие не очень. Итак, Вы предлагаете постоянное программирование (а не просто доработки), как и в случае использования реляционных систем. Это совсем плохо для потребителя, но очень хорошо для программиста, конечно)) Популярный способ упрощения какой базы? Ведь ни в одной модели данных нет никаких ограничений на количество "столбцов в таблице" или на "длину записи". Зачем говорить о том, что, пока, никому еще не удалось реализовать даже РМД? Что за отношения "один-ко-многим"??? Поясняйте конкретно на Вашем примере. Почему не поймешь какие используются, а какие нет? Что трудно сделать одно из полей как раз "классификатором записей" (вот такой системный тип добавить в Вашу СУБД)?)) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 12:32 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Понеслась философия авторИтак, Вы предлагаете постоянное программирование (а не просто доработки) Чем программирование отличается от доработки в данном случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 12:36 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
xenixПонеслась философия авторИтак, Вы предлагаете постоянное программирование (а не просто доработки) Чем программирование отличается от доработки в данном случае? Пожалуйста, сначала исправьте Ваше сообщение на корректное. Как к существу вопроса относится фраза "Понеслась философия"? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 12:40 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Бредятина, Тоже не понял фразу про программирование и доработки. "добавить в индекс новое поле" - это как раз доработка. Конфигурации индексатора и подсистемы экспорта данных в этот индексатор. Плюс гуй. Как раз есть) Вот что гугль говорит с ходу про оракл: https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:53174778859588 А просто - задачу "у полиса есть список застрахованных" в одну строчку таблицы нормально не денормализуешь. Да, формально, конечно, можно отличить используемые поля от неиспользуемых по полю "тип записи". Но визуально и без долгого вкуривания кода - навряд ли. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 12:53 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfБредятина, Тоже не понял фразу про программирование и доработки. "добавить в индекс новое поле" - это как раз доработка. Конфигурации индексатора и подсистемы экспорта данных в этот индексатор. Плюс гуй. Как раз есть) Вот что гугль говорит с ходу про оракл: https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:53174778859588 А просто - задачу "у полиса есть список застрахованных" в одну строчку таблицы нормально не денормализуешь. Да, формально, конечно, можно отличить используемые поля от неиспользуемых по полю "тип записи". Но визуально и без долгого вкуривания кода - навряд ли. Я снова и снова говорю - не торопитесь, будьте внимательнее)) Ни одна МОДЕЛЬ ДАННЫХ не накладывает ограничений на количество "столбцов в таблице" или "длину записи". Причем здесь реализации неизвестно чего? Давайте, пока, не будем рассматривать случаи, когда разработчики СХОД не смогли реализовать какую-то модель и добавили какие-то свои ограничения. Давайте от темы не отвлекаться. Если бы Вы использовали СУБД, то при "добавлении поля" в подавляющем большинстве случаев НИЧЕГО БЫ ВООБЩЕ не пришлось делать. Да, могут быть доработки какие-то изредка. А у Вас именно постоянное программирование (в лучшем случае, визуальное)... Что значит формально и визуально??? Зачем выкуривать код??? Вы же даже не пробовали это сделать)) Поэтому пока рано говорить о результате. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 13:02 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
авторЕсли бы Вы использовали СУБД, то при "добавлении поля" в подавляющем большинстве случаев НИЧЕГО БЫ ВООБЩЕ не пришлось делать Даже не сомневаюсь. А если под этим полем лежит "кучерявая" логика, она сама собой сгенерируется ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 13:04 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
xenixавторЕсли бы Вы использовали СУБД, то при "добавлении поля" в подавляющем большинстве случаев НИЧЕГО БЫ ВООБЩЕ не пришлось делать Даже не сомневаюсь. А если под этим полем лежит "кучерявая" логика, она сама собой сгенерируется Пожалуйста, цитируйте полностью и не вводите себя и других в заблуждение. Очевидно, что далеко не под каждым полем "лежит кучерявая логика". Да, могут быть доработки какие-то изредка. Однако, для многих приложений БД (разумеется не самых сложных) уже сейчас интерактивный интерфейс СУБД может покрывать весь функционал (то есть, ничего не нужно программировать). А еще 20 лет назад не превышал 20%. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 13:19 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
авторДа, могут быть доработки какие-то изредка. Вы раскроете разницу между программированием и доработкой? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 13:23 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
xenixавторДа, могут быть доработки какие-то изредка. Вы раскроете разницу между программированием и доработкой? 1) Доработка не всегда требует программирования. 2) Доработка не перманентное мероприятие. Если она требует программирования, то это не постоянное программирование, как в подходе, предложенном автором. Так что, именно постоянное программирование, а не просто доработка. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 13:34 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
xenixПонеслась философия Скорее всего, называть редкостную ахинею философией все еще преждевременно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 13:37 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
авторСкорее всего, называть редкостную ахинею философией все еще преждевременно. Вы правы. Может, правильнее сказать "софистика, пастор, софистика" ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 13:43 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scf, Как видите, подключились специалисты по формированию из темы того самого болота)) Это неизбежно, к сожалению. Так получается много страниц, из которых более половины лишние. Это не беда, я думаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 13:59 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
mad_nazgul У-у-у вы даже ООП не знаете. Классический пример с геометрическими фигурами. Есть абстрактный класс "Фигура" у которой есть метод "нарисовать". Есть потомки "квадрат", "круг", "треугольник". У которых переопределен метод "нарисовать". Данные разные, классы разные, используются одинаково! Умник, попробуй эти данные после рисования куда-нибудь СОХРАНИТЬ, а потом проиндексировать и ПОИСКАТЬ фигуры, входящие в заданую область. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 15:56 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfКот Матроскин, А, простите, я не обратил внимания, что вы тот самый человек альтернативной адекватности, который пишет ответы, не читая посты. Давайте я вас буду просто игнорировать. Не торопитесь игнорировать замечания ветеранов форума Ваш пример как раз из области документно ориентированных NoSQL СУБД, на что Вам намекал Кот Матроскин. Кроме базы полисов, есть много других задач: бухгалтерия, склад, и т.п. Там Ваш подход явно не прокатит. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 15:57 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
mad_nazgulНе знаю, просто всегда когда перед ORM ставиться задача чуть сложнее прочитать несколько строк из таблицы. Тут же возникают ХП. Ну и что же в этом прохого, в чём проблема ? Объекты Hiber (или кто ещё) легко может читать и из процедур, и можно вообще не использовать Hiber именно в этом отдельном месте. mad_nazgul1) ХП не относиться к РМД. Это процедурное расширение РМД. Напомню, что РМД расшифровывается как "реляционная модель ДАННЫХ". Код не обязан подчиняться модели ДАННЫХ. Всё, на твоём уровне развития я с тобой общаться не хочу. Неинтересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 16:01 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
авторORM - это, конечно, хорошо, и при правильном использовании несет много пользы, но правильно использовать его очень тяжело, а при неправильном он генерит очень неоптимальные запросы. Правильно его использовать ОЧЕНЬ ЛЕГКО. Ну, ладно, просто легко. С GRAILS например -- очень легко. Просто ключ тут в слове "правильно". А это значит -- не забивать гвоздь отвёрткой, а шуруп не закручивать молотком. авторКто-нибудь знает книжку по данному вопросу? или хотя бы ключевые слова? Я не понял, о чём это. если хочешь -- уточни, может скажу книгу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 16:04 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfКлассический подход - (местами) нормализованное хранилище, со связами один-ко-многим и многие-ко-многим через таблицы, местами денормализованное для повышения быстродействия плюс тщательно затюненные индексы для того, чтобы все нужные запросы работали быстро. Забудь про выделенное, это уже давно неработающий бред. Давно неправда. Денормализация никогда не приводит к повышению быстродействия, потому что она приводит к росту физического объёма данных, а оно ведёт к коллосальному падению производительности. Сейчас решения в VLDB строятся наоборот на гипернормализации и сжатии на физичесом уровне хранения данных. scfАльтернатива? Одна таблица с тремя полями: id, номер полиса, clob с json-ом. Плюсы: ... Проблемы и пути их решения: На самом деле проблем только одна -- это не база данных, не хранилище данных, а склад данных. Данные в таком складе невозможно обрабатывать средствами СУБД, внутри БД. Почти все описанные тобой проблемы -- это следствие этого. Фактически ты вообще предлагаешь закинуть всё в некое хранилище, и не решать ни одну из проблем из области использования этих данных -- поиск и сортировки как делать -- ты не знаешь, аналитику предлагаешь делать во внешней БД (OLAP), в которую ты даже не знаешь, как эти данные выгружать. А какую ж из задач по созданию системы для хранения и обработки этих данных ты тогда решил ? Простую вставку данных? Но она и на ORM + RDBMS решается неплохо. Я тебе сообщу о ещё одной проблеме, которую ты не видишь -- это проблема консистентности (т.е. целостности данных). Кто будет проверять твой JSON перед вставкой в БД ? БД этого не сделает. А в JSON формат данных свободный, можно и добавить лишний атрибут, и не добавить обязательный, а обнаружишь ты это только на уровне приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 16:16 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfЯ пришел к выводу, что классический/школьный подход к разработке БД а-ля "нормализуйте все, нафигачьте справочников, пишите сложные запросы В общем, как резюме к топику. У тебя в голове -- каша. Нет порядка, нет чёткого понимания, что где и зачем. Не обижайся -- это нормально, это на каком-то этапе у всех так. Тебе сейчас надо не делать какие-то выводы, а просто поработать так, как все, в стандартных технологиях. Поднабраться опыта, понять, проанализировать, потом уже делать выводы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 16:21 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZivДенормализация никогда не приводит к повышению быстродействия, потому что она приводит к росту физического объёма данных, а оно ведёт к коллосальному падению производительности. Сейчас решения в VLDB строятся наоборот на гипернормализации и сжатии на физичесом уровне хранения данных. wikiДенормализация (англ. denormalization) — намеренное приведение структуры базы данных в состояние, не соответствующее критериям нормализации, обычно проводимое с целью ускорения операций чтения из базы за счет добавления избыточных данных.Не? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 16:45 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZivДенормализация никогда не приводит к повышению быстродействия, потому что она приводит к росту физического объёма данных, Это неправда - нормализованные данные запросто могут занимать больший объем, нежели ненормализованные. Задача нормализации вообще не в том, чтобы экономить место - это всего лишь необязательный сопутствующий бонус. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 16:49 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Infernal V. RavenMasterZivДенормализация никогда не приводит к повышению быстродействия, потому что она приводит к росту физического объёма данных, а оно ведёт к коллосальному падению производительности. Сейчас решения в VLDB строятся наоборот на гипернормализации и сжатии на физичесом уровне хранения данных. wikiДенормализация (англ. denormalization) — намеренное приведение структуры базы данных в состояние, не соответствующее критериям нормализации, обычно проводимое с целью ускорения операций чтения из базы за счет добавления избыточных данных.Не? А что неправильно ? Написано, что ЦЕЛЬ денормализации -- УСКОРЕНИЕ. Это то, для чего её делают. Но это не значит, что если сделали, то достигли цели. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 17:19 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Кот МатроскинMasterZivДенормализация никогда не приводит к повышению быстродействия, потому что она приводит к росту физического объёма данных, Это неправда - нормализованные данные запросто могут занимать больший объем, нежели ненормализованные. Задача нормализации вообще не в том, чтобы экономить место - это всего лишь необязательный сопутствующий бонус. Ну-ка расскажи подробнее... Пока -- смешно. Ну да, в каких-то самых простейших случаях так может быть, типа табличка в две строчки, и 20 справочников. Но стоит ли об этом исключительном случае говорить ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 17:22 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZivКот Матроскинпропущено... Это неправда - нормализованные данные запросто могут занимать больший объем, нежели ненормализованные. Задача нормализации вообще не в том, чтобы экономить место - это всего лишь необязательный сопутствующий бонус. Ну-ка расскажи подробнее... Пока -- смешно. Ну да, в каких-то самых простейших случаях так может быть, типа табличка в две строчки, и 20 справочников. Но стоит ли об этом исключительном случае говорить ? Пожалуйста - классический пример нарушения 1 НФ с перечислением ID товаров(скажем, пятизначных) в строчку через запятую в таблице заказа. Нормализовав это безобразие, практически наверняка получим увеличение обьема данных- причем чем больше строк будет в таблице заказов и чем больше товаров в среднем в заказе, тем большее увеличение. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 17:45 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfИ, разумеется, что не хотелось бы услышать :) "КГАМ", "читай маны", "всё бред" Ну, я вот уже лет 10 делаю довольно сложные и требовательные к производительности проекты примерно таким образом. Особых проблем нет, есть несколько выработавшихся практик, достаточно простых. Даже несколько раз доклады делал на разных конференциях. Как показывает опыт, практически невозможно объяснить классическим разрабочикам СУБД, чем такая схема удобнее и проще - отрицание происходит на уровне "так делать нельзя, даже думать в эту сторону грешно, нафиг-нафиг", так что проще и не пытаться ) А вот программисты предметной области легко такой подход принимают и начинают развивать. Сложности начинаются при потребности в сложных взаимосвязях между сущностями (впрочем, при нормальном проектировании предметной области это бывает крайне редко), при требовании сложных произвольных поисков (хотя тут уже нужен OLAP, а не OLTP), при попытке использовать стандартные генераторы отчетов (но там тоже есть свои решения, разумеется). Разумеется, такая СУБД остается вполне реляционной, всякие фразы про NoSQL тут совершенно не при чем. Кстати, в 90% случаев подобные СУБД формально нормализованы (так как блоб с точки зрения СУБД является атомарным аттрибутом и только на уровне ApplicationLayer становится не атомарным), остальные формы сверх первой там тоже соблюдаются. И если удерживать в голове хотя бы первую форму, то проектирование такой СУБД становится гораздо проще. Из подсказок - обязательно в БД для каждого блоб-поля хранить версию его формата. Иначе обновление структуры станет сложным (хотя все равно проще, чем для обычного перенормализованного решения). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 18:03 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Ранее MasterZivДенормализация никогда не приводит к повышению быстродействия Теперь MasterZivНаписано, что ЦЕЛЬ денормализации -- УСКОРЕНИЕ. Это то, для чего её делают. Но это не значит, что если сделали, то достигли цели.Т.е. добиться таки можно? Чаще всего, по-опыту, достигают. Раскрой первую мысль. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 18:09 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
DPH3, А что со справочниками? Вы добавляете данные из них в блоб, грузите их отдельно по id (с кешированием), выносите айдишники за блоб и джойните при выборке? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 19:06 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfDPH3, А что со справочниками? Вы добавляете данные из них в блоб, грузите их отдельно по id (с кешированием), выносите айдишники за блоб и джойните при выборке? ))) Пожалуйста, определитесь с терминологией. Многие люди здесь, если читают что-то непонятное, считают, что дело не в них, и обижаются на того, кто пишет что-то непонятное. А я вот считаю, что если что-то не понимаю, то дело во мне. И стараюсь понять, задавая вопросы. Вы много раз использовали термин "справочник", но ни разу не пояснили - что это такое. Дайте ясное определение. В некоторых системах, например, может быть Справочник сотрудников, Справочник товаров и т.п. Вы тоже называете справочником данные о людях? Или нет? И как Вы называете другие элементы структуры данных, которые (по Вашему) не справочники? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 20:00 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Бредятина, Ну академическое определение справочника я не дам :) И вообще, вам должно быть известно, насколько это скользкая тема, что считать справочником, а что нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 20:09 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfБредятина, Ну академическое определение справочника я не дам :) И вообще, вам должно быть известно, насколько это скользкая тема, что считать справочником, а что нет. Но, Вы же спокойно используете термин. Вы понимаете, что Вас не понимают?)) Давайте вместе определимся, а заодно посмотрим нужен ли этот термин вообще. Похоже Вы не читаете материал как раз и по этому вопросу(( ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2014, 20:11 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZivmad_nazgulУ-у-у вы даже ООП не знаете. Классический пример с геометрическими фигурами. Есть абстрактный класс "Фигура" у которой есть метод "нарисовать". Есть потомки "квадрат", "круг", "треугольник". У которых переопределен метод "нарисовать". Данные разные, классы разные, используются одинаково! Умник, попробуй эти данные после рисования куда-нибудь СОХРАНИТЬ, а потом проиндексировать и ПОИСКАТЬ фигуры, входящие в заданую область. Точно, вы в ООП вообще ни в зуб ногой. Все решается для объекта созданием общих методов "сохранить_в_БД", "прочитать_из_БД" А для БД создания приблизительно такой структуры: Фигура: ID Тип_Фигуры_ID Тип: ID Название Точка: ID Фигура_ID Координата_X Кордината_Y При реализации методов объекты сохраняют данные которые у них есть и считывают их из БД. Почему нельзя структуру БД напрямую использовать в ООП? Потому что это не удобно! В программе гораздо удобнее использовать конкретные объекты (Круг, квадрат, треугольник и т.д.), а вот для сохранения нужна декомпозиция данных. Т.е. из каких данных состоит объект фигура. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 07:17 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZivНу и что же в этом прохого, в чём проблема ? Объекты Hiber (или кто ещё) легко может читать и из процедур, и можно вообще не использовать Hiber именно в этом отдельном месте. Можно, только зачем? Если persist для этих объектов не сделаешь (ну или опять же ч/з ХП) Лучше сразу работать с SQL. Т.е. ORM вынуждает кроме "прослойки" на стороне приложения, иметь еще "прослойку" на стороне СУБД. Когда можно ограничится только стороной приложения. MasterZivmad_nazgul1) ХП не относиться к РМД. Это процедурное расширение РМД. Напомню, что РМД расшифровывается как "реляционная модель ДАННЫХ". Код не обязан подчиняться модели ДАННЫХ. Всё, на твоём уровне развития я с тобой общаться не хочу. Неинтересно. Вот об этом и речь! Код ХП не относиться к РМД, т.к. он процедурный. А вот, например, запрос (SELECT) относиться - он декларативный и работает в рамках РМД. Хотя и то, и то код. ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 07:27 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
mad_nazgulКод ХП не относиться к РМД, т.к. он процедурный. А вот, например, запрос (SELECT) относиться - он декларативный и работает в рамках РМД.какая редкостная чушь. 1. Код ХП может быть написан только с использованием оператора SELECT, 2. язык SQL может поддерживаться не только в РСУБД, но и в СУБД, основанных на других моделях данных, например в СУБД Cashe, 3. некоторые РСУБД не поддерживают язык SQL. язык SQL не зависит от модели данных, это язык написания запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 14:04 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
egorych1. Код ХП может быть написан только с использованием оператора SELECT, PL/SQL и TSQL - процедурные языки, точно так же как и xBase. В частности уже в FoxPro был возможность выполнять SQL команды, но это не делает его декларативным ЯП. egorych2. язык SQL может поддерживаться не только в РСУБД, но и в СУБД, основанных на других моделях данных, например в СУБД Cashe, Вообще то SQL был специально создан под РМД. Остальные, просто "натянули глобус" egorych 3. некоторые РСУБД не поддерживают язык SQL. язык SQL не зависит от модели данных, это язык написания запросов. Зависит. В некоторых СУБД могут использоваться команды SQL. А так почитайте на досуге стандарт SQL ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 15:06 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Вот кто бы вас обоих забанил за оффтоп и кидание какашками... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 15:09 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Кот МатроскинMasterZivпропущено... Ну-ка расскажи подробнее... Пока -- смешно. Ну да, в каких-то самых простейших случаях так может быть, типа табличка в две строчки, и 20 справочников. Но стоит ли об этом исключительном случае говорить ? Пожалуйста - классический пример нарушения 1 НФ с перечислением ID товаров(скажем, пятизначных) в строчку через запятую в таблице заказа. Нормализовав это безобразие, практически наверняка получим увеличение обьема данных- причем чем больше строк будет в таблице заказов и чем больше товаров в среднем в заказе, тем большее увеличение. Плохой пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 15:15 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Infernal V. RavenРанее MasterZivДенормализация никогда не приводит к повышению быстродействия Теперь MasterZivНаписано, что ЦЕЛЬ денормализации -- УСКОРЕНИЕ. Это то, для чего её делают. Но это не значит, что если сделали, то достигли цели.Т.е. добиться таки можно? Чаще всего, по-опыту, достигают. Раскрой первую мысль. Да нет, чаще всего ДУМАЮТ, что достигают. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 15:16 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
mad_nazgulВсе решается для объекта созданием общих методов "сохранить_в_БД", "прочитать_из_БД" А для БД создания приблизительно такой структуры: Фигура: ID Тип_Фигуры_ID Тип: ID Название Точка: ID Фигура_ID Координата_X Кордината_Y При реализации методов объекты сохраняют данные которые у них есть и считывают их из БД. Ну вот, ты явно раскрыл структуру данных всех объектов. Где же инкапсуляция ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 15:19 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
mad_nazgulМожно, только зачем? Если persist для этих объектов не сделаешь (ну или опять же ч/з ХП) Лучше сразу работать с SQL. Мне например лень писать по 4 лишних процедуры/запроса на каждый объект, если это Hiber делает самостоятельно. mad_nazgulMasterZivпропущено... Напомню, что РМД расшифровывается как "реляционная модель ДАННЫХ". Код не обязан подчиняться модели ДАННЫХ. Всё, на твоём уровне развития я с тобой общаться не хочу. Неинтересно. Вот об этом и речь! Код ХП не относиться к РМД, т.к. он процедурный. А вот, например, запрос (SELECT) относиться - он декларативный и работает в рамках РМД. Код не может ни относится к какой-то модели данных, ни не относится. Потому что это код, а не данные. Продолжай оставаться mad . Успехов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 15:22 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfВот кто бы вас обоих забанил за оффтоп и кидание какашками... Пожалуй ты прав. Я всё по теме сказал, поэтому от данного топика самоустраняюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 15:24 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZivКот Матроскинпропущено... Пожалуйста - классический пример нарушения 1 НФ с перечислением ID товаров(скажем, пятизначных) в строчку через запятую в таблице заказа. Нормализовав это безобразие, практически наверняка получим увеличение обьема данных- причем чем больше строк будет в таблице заказов и чем больше товаров в среднем в заказе, тем большее увеличение. Плохой пример. Потому что он Вас опровергает? Да, это, конечно, очень нехорошо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 15:31 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZivmad_nazgulВсе решается для объекта созданием общих методов "сохранить_в_БД", "прочитать_из_БД" А для БД создания приблизительно такой структуры: Фигура: ID Тип_Фигуры_ID Тип: ID Название Точка: ID Фигура_ID Координата_X Кордината_Y При реализации методов объекты сохраняют данные которые у них есть и считывают их из БД. Ну вот, ты явно раскрыл структуру данных всех объектов. Где же инкапсуляция ? Так структура данных в БД а не в объектах. Вы не знаете точно как, например, хранятся координаты точек в классах. То ли это массив, то ли каждая точка отдельно, то ли вообще храниться ссылка на какой-то общий объект фигура. Реализация как и что храниться в объектах вы не знаете. У вас есть только есть методы - "нарисовать", "сохранить_в_БД", "прочитать_из_БД". А в БД да, все данные "на виду" и доступны. ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 15:48 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZivМне например лень писать по 4 лишних процедуры/запроса на каждый объект, если это Hiber делает самостоятельно. За вас это напишут программисты СУБД :-) Потому что любой ORM может написать такие запросы только для простейших случаев. Остальное ХП. ;-) MasterZivКод не может ни относится к какой-то модели данных, ни не относится. Потому что это код, а не данные. А вот ЯП может. SQL специально создан для работы с РМД. И SQL специально создан для манипуляции с данными в рамках РМД. Команды SQL можно использовать в не реляционных БД, но с большими ограничениями. А если полностью реализовывать стандарт SQL, то получим что нужно реализовывать РМД. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 15:56 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfDPH3, А что со справочниками? Вы добавляете данные из них в блоб, грузите их отдельно по id (с кешированием), выносите айдишники за блоб и джойните при выборке? А смотря что за справочники. Есть просто бизнес-сущности (типа списка пользователей) - и это не справочник, а нормальная сущность, связь с которой желательно хранить явно. Есть всяческие справочники, имеющие смысл только на уровне бизнес-логики (типа списка алгоритмов, типов объектов и т.п.) - им в БД вообще делать нечего, так как существенна целостность совместно БД и кода приложения и только на уровне БД ее не отконтролировать. Иногда под справочниками прячут разнообразный UI контент, типа списков стран. Но тут стандарты в помощь ) А что в конкретном случае вызывает проблему? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2014, 16:14 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
On 28.08.2014 16:48, mad_nazgul wrote: > Ну вот, ты явно раскрыл структуру данных всех объектов. Где же > инкапсуляция ? > > Так структура данных в БД а не в объектах. Это -- структура ДАННЫХ в ОБЪЕКТАХ. И именно потому, что ты допускаешь, что она может быть разной в БД и в объектах, у тебя начинается object-relational gap. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2014, 18:18 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
On 28.08.2014 16:56, mad_nazgul wrote: > MasterZiv > Мне например лень писать по 4 лишних процедуры/запроса на каждый объект, > если это Hiber делает самостоятельно. > > За вас это напишут программисты СУБД :-) > Потому что любой ORM может написать такие запросы только для простейших > случаев. > Остальное ХП. ;-) Есть одна маленькая проблемка: я и есть программист СУБД :-( Поэтому писать мне. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2014, 18:21 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZiv> Так структура данных в БД а не в объектах. Это -- структура ДАННЫХ в ОБЪЕКТАХ. И именно потому, что ты допускаешь, что она может быть разной в БД и в объектах, у тебя начинается object-relational gap. Именно из-за того, что я допускаю что она может быть разная, я не использую ORM. ;-) Т.е. проектирую объекты как удобно для решения задачи. А потом делаю "слой" который сохраняет данные из объектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2014, 09:15 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MasterZivЕсть одна маленькая проблемка: я и есть программист СУБД :-( Поэтому писать мне. Рад за вас. Я программист Java, мне проще написать запрос, чем использовать ORM и писать ХП. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2014, 09:16 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Ну чего решили то? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2014, 10:37 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
prog123, Решили, что ты - тролль ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2014, 13:03 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
prog123, Решили, что уже пошла четвертая страница, а я получил ровно 1(один) ценный ответ. Ну и еще штуки три содержат полезную информацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2014, 15:05 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfprog123, Решили, что уже пошла четвертая страница, а я получил ровно 1(один) ценный ответ. Ну и еще штуки три содержат полезную информацию. О, а что за ответ и какая информация? Сделай уж summary ) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 04:53 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Попробую подвести итог: Концепция, работы с данными, основанная на таблицах (сущностях) себя не просто изжила, но и с самого начала была ошибочной. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 06:26 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
prog123, точно, тролль. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 06:27 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
prog123Попробую подвести итог: Концепция, работы с данными, основанная на таблицах (сущностях) себя не просто изжила, но и с самого начала была ошибочной. Вы правы! Все NoSQL обречены от рождения! <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 07:09 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
prog123Попробую подвести итог: Концепция, работы с данными, основанная на таблицах (сущностях) себя не просто изжила, но и с самого начала была ошибочной. Соответственно 99 % баз данных работающих сейчас это только исключение из этого правила, а всех кто заработал кучу бабла на этом - просьба вернуть бабло обратно или перечислить заработанное на благотворительность в фонд убогих и немощных, которые не смогли заработать на таблицах.... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 08:55 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
prog123Попробую подвести итог: Концепция, работы с данными, основанная на таблицах (сущностях) себя не просто изжила, но и с самого начала была ошибочной. Вроде ничего не предвещало таких сильных итогов. Скорее даже наоборот, реальных альтернатив не нашли пока. А если есть то для каких-то простых структур и запросов, но более производительных сетевых архитектурах (т.е. не модельное преимущество, а архитектрное реализации СУБД). Но это скорей претендует на дополнение, затычки, а не замену. Ни на ошибочность ни на изжитость это, вроде, не тянет. На ассемблере тоже моно написать что-то более производительное чем более высокорувневых языках, но это же не значит, что их концепция изжила себя или ошибочна с самого начала. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 09:53 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
prog123Попробую подвести итог: Концепция, работы prog123 с данными, основанная на таблицах (сущностях) себя не просто изжила, но и с самого начала была ошибочной. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 10:09 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
zeon11_prog123Попробую подвести итог: Концепция, работы prog123 с данными, основанная на таблицах (сущностях) себя не просто изжила, но и с самого начала была ошибочной. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 10:21 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
vadiminfoprog123Попробую подвести итог: Концепция, работы с данными, основанная на таблицах (сущностях) себя не просто изжила, но и с самого начала была ошибочной. Вроде ничего не предвещало таких сильных итогов. Скорее даже наоборот, реальных альтернатив не нашли пока. А если есть то для каких-то простых структур и запросов, но более производительных сетевых архитектурах (т.е. не модельное преимущество, а архитектрное реализации СУБД). Но это скорей претендует на дополнение, затычки, а не замену. Ни на ошибочность ни на изжитость это, вроде, не тянет. На ассемблере тоже моно написать что-то более производительное чем более высокорувневых языках, но это же не значит, что их концепция изжила себя или ошибочна с самого начала. Нашли. Основой всему, - поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 15:03 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
prog123Нашли. Основой всему, - поле. Торсионное? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 17:38 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
prog123 Нашли. Основой всему, - поле. Хлеб всему голова? Ну это без дополнительных пояснений звучит как что-то сельскохозяйственное. Типа Хлеб всему голова? На поля, товарищи!!! Но пропагандой ИТ, скорее всего, не обманешь. Это я мыстль Явлинского расширил: у него вместо ИТ была экономика. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2014, 18:37 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
prog123Нашли. Основой всему, - поле. Нифига! Основой всему группа! А поле потом... после группы ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2014, 06:54 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
mad_nazgulОсновой всему группа! А поле потом... после группы ;-) ну ясен пень.... какой же дурак пойдет в одиночку косить всё поле.... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2014, 09:06 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scf- В крупных БД с десятками миллионов записей явные FK не используются , а кол-во констрейнтов сильно ограничено, ибо индексы. Это правда на 2018 г? scf- Справочники меняются крайне редко, разве что создаются новые версии элементов или добавляются новые. Иначе у юзера отчет за прошлый год не будет совпадать с бумажной версией или что-то подобное. Как обычно реализуется БД, если справочники меняются, а отчеты за прошлые годы постоянно нужны? scf- логику выносят из базы во внешние приложения - база только исполняет запросы. Причина очевидна - ЦПУ не резиновое, а распределенные базы ентерпрайз класса сложны и жутко дороги. Это правда на 2018 г? С NoSQL пока знаком на уровне расшифровки аббревиатуры, буду изучать позже. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 04:00 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Пельмениscf- В крупных БД с десятками миллионов записей явные FK не используются , а кол-во констрейнтов сильно ограничено, ибо индексы. Это правда на 2018 г? Нет. Пельмениscf- Справочники меняются крайне редко, разве что создаются новые версии элементов или добавляются новые. Иначе у юзера отчет за прошлый год не будет совпадать с бумажной версией или что-то подобное. Как обычно реализуется БД, если справочники меняются, а отчеты за прошлые годы постоянно нужны?Отчёты строятся не по справочникам, а по фактам. Факты за прошлый год не меняются. Либо сохраняют историю справочных данных. Пельмениscf- логику выносят из базы во внешние приложения - база только исполняет запросы. Причина очевидна - ЦПУ не резиновое, а распределенные базы ентерпрайз класса сложны и жутко дороги. Это правда на 2018 г?Да, выносят. Но не все. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 09:40 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
И ещё есть версионность, ивент-сорсинг, лямбда-архитектура... Вообщем как обычно решение зависит от задачи ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 09:47 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Пельмениscf- логику выносят из базы во внешние приложения - база только исполняет запросы. Причина очевидна - ЦПУ не резиновое, а распределенные базы ентерпрайз класса сложны и жутко дороги. Это правда на 2018 г? И да, и нет. Хорошие разработчики: Выносят логику из базы во внешние приложения - Сервера приложений (Application Servers) . Не хорошие разработчики: Используют курсоры, динамический SQL(который хз как отлаживать) и ищут любые причины, что бы ничего не переделывать. У них 15+лет опыта и вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:27 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:21 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Valery_BХорошие разработчики: Выносят логику из базы во внешние приложения - Сервера приложений (Application Servers) . Бугага. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 12:18 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Пельмениscf- В крупных БД с десятками миллионов записей явные FK не используются , а кол-во констрейнтов сильно ограничено, ибо индексы. Это не зависит от размера БД, а лишь от бизнес-задач и первичного проектирования. У меня на текущей работе так сложилось, что в 99% случаем FK отсуствует. Но в 50% я считаю, что зря, т.к. это потенциальный источник ошибок. Но так исторически сложилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 12:23 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
MegabyteУ меня на текущей работе так сложилось, что в 99% случаем FK отсуствует. Меня жизнь вообще к такому не готовила. Если меня пьяного разбудить в 3 часа ночи в поджечь кровать - я все равно расскажу про ключи и нормализацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 17:19 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
ПельмениЕсли меня пьяного разбудить в 3 часа ночи в поджечь кровать - я все равно расскажу про ключи и нормализацию. Пожалуй, это самая убедительная причина не будить кого-то в 3 часа ночи, какую я только слышал. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 18:03 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Ооо, мою первую тему подняли :-) Добавлю свеженького опыта: - одной базой должно пользоваться ровно одно приложения, для остальных есть API - если базой пользуется одно приложение, оно может эффективно кешировать содержимое - концепция "большой бизнес-объект в базе" ущербна, вместо наворачивания отношений один-ко-многим в хибернейте лучше сделать отдельно "страховой полис" и отдельно "список застрахованных страхового полиса по id полиса" и работать с ними независимо ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 18:16 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfодной базой должно пользоваться ровно одно приложения Админка? Приложения, которыми пользуются пользователи напрямую в базу ходить не должны, ибо не фиг! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 21:13 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfесли базой пользуется одно приложение, оно может эффективно кешировать содержимое А два типа не могут? Или Memcached, Redis считаются не эффективными? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 21:15 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfконцепция "большой бизнес-объект в базе" ущербна, вместо наворачивания отношений один-ко-многим в хибернейте лучше сделать отдельно "страховой полис" и отдельно "список застрахованных страхового полиса по id полиса" и работать с ними независимо О да, давайте выкинем на помойку DDD и NoSQL базы ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 21:18 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Дмитрий Мух, Админка тоже должна использовать API. Помимо архитектурных плюсов, такой подход дает еще и плюс к безопасности в виде независимой авторизации, аудита и ограничение возможностей админки только запланированным функционалом. Два приложения писать в базу и поддерживать общий или собственный кеш - не могут. Инвалидация будет слишком сложна, да и совместное использование кеша имеет те же проблемы, что и совместное использование базы, только гораздо хуже. Правильней отдать кеш одному приложению и спрятать его за API. Про помойку - топик про реляционные СУБД. NoSQL - отдельная тема. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 21:41 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfАдминка тоже должна использовать API. Помимо архитектурных плюсов, такой подход дает еще и плюс к безопасности в виде независимой авторизации, аудита и ограничение возможностей админки только запланированным функционалом. Короче Вы фанат микросервисной архитектуры ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 22:03 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
scfДва приложения писать в базу и поддерживать общий или собственный кеш - не могут. Инвалидация будет слишком сложна, да и совместное использование кеша имеет те же проблемы, что и совместное использование базы, только гораздо хуже. Ещё как могут, и никаких сложностей с инвалидацией. Годами проверено на практике. Хорошо бы Вы конкретные примеры проблем привели, а то я, признаюсь, в недоумении ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 22:09 |
|
Проектирование БД - текущее состояние дел?
|
|||
---|---|---|---|
#18+
Valery_BХорошие разработчики: Выносят логику из базы во внешние приложения - Сервера приложений (Application Servers) . Не хорошие разработчики: Используют курсоры, динамический SQL(который хз как отлаживать) и ищут любые причины, что бы ничего не переделывать. У них 15+лет опыта и вообще.Вывод- хорошие=молодые. Опыт не нужен. Сарказм офф ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2018, 09:40 |
|
|
start [/forum/topic.php?all=1&fid=32&tid=1539997]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
162ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
148ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 368ms |
0 / 0 |