powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование БД - текущее состояние дел?
25 сообщений из 122, страница 1 из 5
Проектирование БД - текущее состояние дел?
    #38728472
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Зарегался тут, чтобы поделиться мыслями и собрать опыт тех, кто длительное время проектируют и используют крупные/старые базы данных.

Я пришел к выводу, что классический/школьный подход к разработке БД а-ля "нормализуйте все, нафигачьте справочников, пишите сложные запросы, которые будут выгребать и обновлять данные" в современном мире не работает. Мне сложно сформулировать, так что я перечислю некоторые утверждения, которые мне кажутся правильными, а внизу сделаю выводы. Вышенаписанное применимо, разумеется, к базам общего назначения, где требуется относительно быстрая вставка и селекты. Аналитические базы оставим в стороне.

- В крупных БД с десятками миллионов записей явные FK не используются, а кол-во констрейнтов сильно ограничено, ибо индексы.
- Справочники меняются крайне редко, разве что создаются новые версии элементов или добавляются новые. Иначе у юзера отчет за прошлый год не будет совпадать с бумажной версией или что-то подобное.
- Большая часть запросов по базе - "запихай-ка мне в базу большой и сложный бизнес-объект", "прочитай его же", "выдай справочник или его часть", "сделай поиск по тому самому большому и сложному бизнес-объекту".
- логику выносят из базы во внешние приложения - база только исполняет запросы. Причина очевидна - ЦПУ не резиновое, а распределенные базы ентерпрайз класса сложны и жутко дороги.
- Датабазные джойны дороги. По моим старым замерам в mssql, запрос без джойнов работает примерно раза в 2 быстрее, чем запрос с одним джойном по ПК.

Теперь выводы.

Сначала о справочниках. Зачем их джойнить при загрузке объекта? Приличные приложения справочники кешируют у себя и джойнят сами, руками или тем же Хибернейтом. Или еще лучше - почему бы не встроить данные из справочника в сам объект, раз уж почти всегда требуется, чтобы сущности после создания не менялись при изменениях справочников?

Бизнес-объекты. Обычно представляют из себя в базе мессиво мелких табличек, призванных отобразить разнообразные вложенные коллекции. Это мессиво сложно использовать и непрактично извлекать - см. цену джойнов. Почему бы тогда не зафигачивать данные в одну таблицу json-ом или аналогичным форматом? Ответ на вопрос "а как тогда селекты делать" чуть ниже, а пока назову только одну причину - "без приложения эти данные сложно извлечь, т.к. они не описаны в схеме".

Что касается селектов или какого-то поиска. Селекты, где критично получить именно актуальные данные в транзакции - почти всегда примитивны и просты. Все остальное отлично покрывается внешними индексирующими приложениями вроде Apache Solr или Sphinx. В своей сфере они работают намного эффективнее СУБД.

Что получается в итоге? Таблицы состоят из небольшого набора полей плюс клоб с Json-ом. Справочники есть, но большинство справочников используется только для создания новых объектов (данные из справочника встраиваются в сам объект). Простые и важные селекты идут по тем немногоим полям, которые остались в таблице. Сложный поиск делается специализированным софтом, данные в которое импортируются в рантайме приложением, которое висит на этой базе (в тяжелый случаях - джобой). Аналитика и кубы - на отдельной базе, с отдельным олап-кубом или тупо импорт в qlikview или подобную штуку.

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

И, разумеется, что не хотелось бы услышать :) "КГАМ", "читай маны", "всё бред"
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728481
prog123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое количество таблиц призваны разнообразить жизнь разработчику на этапе проектирования и всем остальным, - долгие годы потом.
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728489
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поздравляю, Вы изобрели NoSQL.
Про недостатки NoSQL - можете спросить Гугл
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728491
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,

Спасибо за ваше непрочтение моего поста. Ваш ответ не содержит полезной информации, так что вы можете свернуть его в рулончик и повесить справа от унитаза.
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728501
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf,

В общем Кот конечно же прав. Я могу только сказать что все зависит от поставленных задач. Тут могут быть как одни так и другие решения, в т.ч. и смешанные. Из всего что вы нацарапали верно только следующее:
scfАналитика и кубы - на отдельной базе
хотя немного непонятно, ведь вначале вы сами четко сказали:
scfАналитические базы оставим в стороне.
так зачем говорить о том что вы оставляете в стороне?..

Одним словом вам нужно не зацикливаться а повышать свой уровень, смотреть как устроены другие БД, как работают те или иные подходы в решении конкретных задач. Делать какие-то выводы увидев пару-тройку баз - это даже не смешно. Думаю со временем вы и сами поймете как заблуждались.
Удачи вам на вашем пути.
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728506
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Злой Бобр,

В моем посте довольно много вопросительных знаков. Если вы обладаете достаточным опытом, то, пожалуйста, поделитесь им. Не нужно придираться к ничего не значащим мелочам и давать общие советы по саморазвитию (а также ссылки на знаменитые мануалы по ораклу 2500 страниц каждый и стандарты ISO по data architecture)
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728512
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf

Я пришел к выводу, что классический/школьный подход к разработке БД а-ля "нормализуйте...
Так уж и школьная? Вроде в институте читают, и не все эти самые нормальные формы осиливают. Там есть теория РБД. Теорий нет у других типов БД. Что относят к одному из недостатков этих других.

scf Чем такая схема плоха?

Ненормализованная? Плоха аномалиями, избыточностью. Опять же траблы могут быть с навязыванием ОЦ(констрейнов). Это то, как раз может и школах проходят. Если структура сложная и сложные запросы, то риски не малые.
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728540
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf,

Ссылок я изначально недавал, т.к. прекрасно понимаю что читать мануалы человеку который уже сделал выводы - ну как минимум лень.
Что касается вопросов. Если есть вопросы то задавайте конкретно по СУБД, с описанием задачи и т.п. Вопросы риторического характера я игнорирую, т.к. незная применения нельзя дать мало мальски правильный совет.

По написанному - не все разработчики выносят логику в приложение. Наоборот, тенденция идет к тому чтобы использовать тонкого клиента а все процедуры отрабатывались на сервере. Именно для этого и существуют кластеры, именно это и решают облачные сервисы. Конечно реализация может отличаться, но тем не менее вся нагрузка переносится на сервер.
Звучала мысль собрать все в одной таблице и селект будет зашибись как быстро отрабатывать. Ну а вы размеры такой таблицы представляете? Плюс увеличив селект вы наступите на грабли с инсертом и т.п., т.к. будет блокировка таблицы. Исходя из практики могу сказать что лучше пожертвовать скоростью селекта чем вводом и изменением данных. Да, именно поэтому в БД куча таблиц. Ну а чтоб ускорить селекты как раз и пользуют индексы.
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728594
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Зарегался тут, чтобы поделиться мыслями

Напрасно потратили время: это не мысли, это помои.

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

Ничего личного, на самом деле вы вполне в мейнстриме.
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728630
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfИ, собственно, что хотелось бы услышать. Чем такая схема плоха? Для приложений? Для быстродействия или DBA? Для архитектуры системы в целом? Для управления данными в этой базе в долгосрочной перспективе?

И, разумеется, что не хотелось бы услышать :) "КГАМ", "читай маны", "всё бред"

Вы путает ООП и РМД.
В ООП все так как вы говорите.
А РМД немного другое.
Нельзя "как есть" сохранить объекты в РБД.
Т.к. в РМД структура данных не должна меняться часто (в идеале вообще неизменна)
В отличии от ООП. Здесь "изменчивость" это основная "фишка".
На стыке данных технологий происходит весь холивар.
РБД "заточены" на хранение данных ACID наше все.
ООП наоборот на "работу" с данными их изменение.
Там где важно накопление точных данных, там всегда РМД (в основном финансы)
Там где это не важно, а важно быстро изменить структуру данных, там обычно разные NoSQL решения.

ООП применяется и там, и там, но при использовании РБД с РМД начинается "конфликт интересов".
Разработчики ООП "плюются на" РБД, что там нельзя изменить структуру как им удобно, а разработчики под РБД "фигеют", что программисты ООП не хотят/не могут сделать нормализацию данных.
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728794
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf,
можно букв мнгого написать по данной теме, чуть больше, чем все изложенное вами, на мой взгляд, стало результатом недостаточного опыта использования СУБД (как вариант - не качественным опытом использования СУБД).

Из пары десятков ваших концептуальных заблуждений прокомментирую 3, 7 и 15-ую (с).

К примеру вот это утверждение:
автор- В крупных БД с десятками миллионов записей явные FK не используются, а кол-во констрейнтов сильно ограничено, ибо индексы.
мягко сказать заблуждение. Оперировать приходилось и приходится с базами в миллиарды записей в таблицах, и отсутствие FK на них привело бы как минимум к несогласованности данных и проблемам по типу "какого хрена эта запись здесь делает, если нет родительской?".
"Висяки" (читай нарушение ссылочной целостности) в противном случае (т.е. при отсутствии констреинтов) - это отдельная головная боль, т.к. надо напрягать всех и вся от аналитиков до QA на тему "что будет, если мы их удалим? а как можно их удалить/откорректировать?".

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

Пойдем дальше:
автор- Справочники меняются крайне редко, разве что создаются новые версии элементов или добавляются новые. Иначе у юзера отчет за прошлый год не будет совпадать с бумажной версией или что-то подобное.
Совершенно не верное понимание справочника и структуры справочников. Если предполагается расширение справочника или изменение справочной информации и при этом отчетность за произвольный период, то любая сущность должна иметь характеристику - период актуальности. И тут уж без СУБД достаточно сложно организовать структуру и поиск справочной информации на конкретную дату.

На счет крайне редко меняются - ой ли... Возьмите, к примеру, справочник товаров любого ритейлера.
Или к примеру справочник терминалов/банкоматов Банка.

Конечно же есть статичный справочники по типу регионов страны/городов, но как показал последние события (присоединение Крыма) - и они не достаточно статичны...
авторпочему бы не встроить данные из справочника в сам объект,
Как бэ "школьная" нормализация - чуть выше вы же сами переживали за размер БД (или мне показалось).
Ну и смена наименования сущности справочника - опять же не настолько редкая ситуация. И апдейт при этом одной записи именно в справочнике или всех сущностей, где данная справочная инфа пользуется. Как по вашему, что "дешевле"?


автор- логику выносят из базы во внешние приложения - база только исполняет запросы. Причина очевидна - ЦПУ не резиновое, а распределенные базы ентерпрайз класса сложны и жутко дороги.
Таки да - базы ентерпрайза достаточно сложны. Вы думали ДБА просто так свой хлеб едят?
Опять же задача архитектора грамотно распределить зоны ответственности между СУБД и клиентской частью, задача ДБА совместно с ДБ девелоперами = правильно сбалансировать нагрузку и сформировать распределенную серверную часть.


Ну и далее можно продолжать в том же духе - но лень =)
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728821
ALOTE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинПоздравляю, Вы изобрели NoSQL.

+1
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728906
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38728917
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 26.08.2014 08:32, mad_nazgul wrote:

> В ООП все так как вы говорите.
> А РМД немного другое.
> Нельзя "как есть" сохранить объекты в РБД.

Да можно.

> Т.к. в РМД структура данных не должна меняться часто (в идеале вообще
> неизменна)
> В отличии от ООП. Здесь "изменчивость" это основная "фишка".

Нет, основная фишка в ООП -- не изменчивость, а инкапсуляция и полиморфизм.


> На стыке данных технологий происходит весь холивар.
> РБД "заточены" на хранение данных ACID наше все.
> ООП наоборот на "работу" с данными их изменение.
> Там где важно накопление точных данных, там всегда РМД (в основном финансы)
> Там где это не важно, а важно быстро изменить структуру данных, там
> обычно разные NoSQL решения.

Это ты говоришь про Schemaless. Это не одно и то же с NoSQL. Одно не
означает другое, и наоборот.

РБД есть и такие, которые заточены не на ACID, а на хранилища данных.


> ООП применяется и там, и там, но при использовании РБД с РМД начинается
> "конфликт интересов".

Нет такого конфликта, он выдуман.

> Разработчики ООП "плюются на" РБД, что там нельзя изменить структуру как
> им удобно, а разработчики под РБД "фигеют", что программисты ООП не
> хотят/не могут сделать нормализацию данных.

Это надумано. Нет такой проблемы. Если хочешь, менять структуру БД даже
и проще, чем структуру объектов -- в БД это просто изменение структуры,
в ООП надо ещё и переписать все программы, которые используют эту
структуру. Если в БД есть ещё и код, то та же проблема будет и в БД --
надо переписывать и триггера, и процедуры.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38729061
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv> ООП применяется и там, и там, но при использовании РБД с РМД начинается
> "конфликт интересов".

Нет такого конфликта, он выдуман.
воистину +1 ))
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38729159
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv> Нельзя "как есть" сохранить объекты в РБД.

Да можно.


Это приведет к проблеме о которой вы писали.
Поэтому нельзя ;-)
Т.к. данные в РМД и данные в виде объектов это по большому счету разные вещи.
Хотя на первый взгляд кажутся "одно и то же".

MasterZiv> Т.к. в РМД структура данных не должна меняться часто (в идеале вообще
> неизменна)
> В отличии от ООП. Здесь "изменчивость" это основная "фишка".

Нет, основная фишка в ООП -- не изменчивость, а инкапсуляция и полиморфизм.


А для чего нужны "инкапсуляция" и "полиморфизм"?!
Чтобы обеспечить "изменчивость".
Мы скрываем как "внутри" устроен объект, чтобы его можно было менять как нам нужно.
;-)


MasterZivРБД есть и такие, которые заточены не на ACID, а на хранилища данных.


На сколько я помню они либо вымерли, либо их занимают ну очень специфичную нишу.
Сейчас балом правит SQL ;-)


MasterZivНет такого конфликта, он выдуман.


Но он есть.
И я его наблюдаю не на одном проекте.
Как только начинается использоваться ORM, так сразу он и возникает.
Т.к. со временем любое обращение к БД ч/з ORM обрастает кучей ХП (хранимых процедур).

MasterZivЭто надумано. Нет такой проблемы. Если хочешь, менять структуру БД даже
и проще, чем структуру объектов -- в БД это просто изменение структуры,
в ООП надо ещё и переписать все программы, которые используют эту
структуру.


С точностью до наоборот!
За счет наследования, инкапсуляции и полиморфизма в ООП всегда можно остановить старые данные и добавить новые.
Для этого ООП и внедрялось, чтобы каждый раз не переписывать работу зависимых модулей при расширении функциональности или изменении структуры данных.
С СУБД (SQL) все гораздо сложнее. Любое изменение структуры данных приводит к перепроектировке БД.

MasterZivЕсли в БД есть ещё и код, то та же проблема будет и в БД --
надо переписывать и триггера, и процедуры.


Вот именно!
Но не только.
Нужно еще не забывать о нормализации и ACID!
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38729489
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38729495
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulКак только начинается использоваться универсальный ORM, так сразу
он и возникает.
Поправил. Когда это "one size fits all" вообще работало?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38729589
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf,
Вам нужно, мне кажется, почитать аналитические темы, которые здесь периодически обсуждаются. Например, если бы Вы поучаствовали в этой теме
http://www.sql.ru/forum/973198-1/db-specific-orm
это помогло бы более формально описать то, что Вы предлагаете.
Просто приведите пример, который наглядно бы показал преимущество "того, что Вы предлагаете" над "тем, что сейчас, обычно, используется".
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38729694
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДанные -- это данные. Ещё раз, т.н. object-relational gap -- выдумка.
Она вызвана грубо говоря тем, что в РМД нет массивов. Но всё это
решается. См. решения в Hibernate etc.


Вообще для РМД массив - это лишняя сущность.
Например в PostgreSQL есть массивы, но они там нужны для очень специфичных случаев (там их ввели для поддержки GIS).
На моей практике ни разу не использовались.
Hibernate - это ORM.
ORM - зло!

MasterZivЕсли ты пишешь объекты куда угодно в БД (любую), то тебе надо забыть о
инкапсуляции, это -- раз. Поэтому обеспечить просто изменчивость
объектов в этой БД невозможно ( сложно так же, как и в РБД ).


Опять же на моей практике ни полиморфизм, ни инкапсуляция не мешали сохранять данные из объектов в БД.
И это не мешает менять объекты как мне заблагорассудится.
Просто не надо "напрямую" "мапить" объекты в БД.


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


У-у-у вы даже ООП не знаете.
Классический пример с геометрическими фигурами.
Есть абстрактный класс "Фигура" у которой есть метод "нарисовать".
Есть потомки "квадрат", "круг", "треугольник".
У которых переопределен метод "нарисовать".
Данные разные, классы разные, используются одинаково!


MasterZivОбычно я такие слова слышу от людей, которые просто не умеют работать ни
с объектами, ни с РБД, ни с ОРМ.


Не знаю, просто всегда когда перед ORM ставиться задача чуть сложнее прочитать несколько строк из таблицы.
Тут же возникают ХП.
Практика из нескольких холиваров по поводу ORM.

MasterZiv> Т.к. со временем любое обращение к БД ч/з ORM обрастает кучей ХП
> (хранимых процедур).

И что в этом плохого, в ?



1) ХП не относиться к РМД. Это процедурное расширение РМД. Что приводит к тому, что методы оптимизации которые хорошо работают в РМД, там перестают работать, ну или работают плохо.
2) ХП это всегда перенос бизнес-логики из приложения в БД. Что "размазывает" бизнес-лгику м/у приложением и БД. И это приводит к п 3)
3) Зачем нам лишняя сущность "приложение", если все можно сделать в СУБД. (Смотреть все холивары с Oracle)
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38729721
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul...
ORM - зло!
...
Просто не надо "напрямую" "мапить" объекты в БД.
...
Зачем нам лишняя сущность "приложение", если все можно сделать в СУБД...
Все может сделать в том, что Вы назвали СУБД - программист. Потребитель даже фамилию человека не сможет узнать без программиста)) Так что это не СУБД, а СХОД (система хранения и обработки данных, предназначенная для программиста). Можно ли создать СУБД в среде РСХОД, например, в Oracle. Конечно. Получим некоторую модель данных верхнего уровня и маппинг в РМД по всем трем аспектам (структура, ограничения целостности, язык манипулирования). Который, видимо - зло))
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38729738
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, что-то вы скатились не туда :-)
ORM - это, конечно, хорошо, и при правильном использовании несет много пользы, но правильно использовать его очень тяжело, а при неправильном он генерит очень неоптимальные запросы.

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

Итого возможны следующие варианты:

- DBA низвергают до позиции инфраструктурщика, который занимается работоспособностью баз и дает консультации. Структурой и наполнением базы владеют разработчики, которые полностью изолируют базу от всех желающих ей пользоваться, предоставляя высокоуровневый сетевой API. Гугль, например, так работает.
- DBA владеет структурой и данными, для доступа и модификации данных он пишет хранимки, которые защищают данные от кривых рук разработчиков. Эти хранимки НЕ должны содержать бизнес-логику.
- Вся логика сосредоточена в базе, внешние приложения отвечают только за гуй.

Кто-нибудь знает книжку по данному вопросу? или хотя бы ключевые слова?
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38729750
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfИзвестно, что данные часто живут намного дольше, чем приложения, которые их породили, ....
В общем случае БД предназначена для разнах приложений, не только тех что "их породили" (их вообще проекты породили в общем случае): в них вся инфа ИС, которую должно быть относительно простол извлечь. Даже если структура сложная.
В этом и показала себя РМД. Если БД удачно спректирована, то с помощью SQL (декларативно, ассоциативно) и проги которая уменеет посылыть эти запросы БД и возвращть результат инфу можно относительно просто извлеч.
Остальные МД тоже как бы пытаются это повторить, но, возможно, что-то утрачивается в этих МД при этом. В частности, некоторые РСУБД пытаются расширить РМД до ОРМД, но на практике в основном все юзают РМД.
Т.е. на уровне МД пока потеснить РМД не получается. Только на физическом для каких-то областей может удается потеснить РСУБД. В частности, и Оракла в линейке продуктов есть какая-то там NoSQL для каких-то задач.
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38729773
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo,

"просто извлечь всем" - это важный критерий для database-centric архитектур, которые не очень хороши, ибо хрупки. Такой подход приводит к десяткам приложений вокруг одной базы и шансом сломать любое из них при любом изменении характера данных в базе, необязательно её схемы. Так что - редкие релизы и обширнейшее интеграционное тестирование.

Практичнее изолировать базу за слоем API, сделанном или на хранимках, или на приложениях - "переходниках".
...
Рейтинг: 0 / 0
Проектирование БД - текущее состояние дел?
    #38729779
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfНарод, что-то вы скатились не туда :-)
ORM - это, конечно, хорошо, и при правильном использовании несет много пользы, но правильно использовать его очень тяжело, а при неправильном он генерит очень неоптимальные запросы.

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

Итого возможны следующие варианты:

- DBA низвергают до позиции инфраструктурщика, который занимается работоспособностью баз и дает консультации. Структурой и наполнением базы владеют разработчики, которые полностью изолируют базу от всех желающих ей пользоваться, предоставляя высокоуровневый сетевой API. Гугль, например, так работает.
- DBA владеет структурой и данными, для доступа и модификации данных он пишет хранимки, которые защищают данные от кривых рук разработчиков. Эти хранимки НЕ должны содержать бизнес-логику.
- Вся логика сосредоточена в базе, внешние приложения отвечают только за гуй.

Кто-нибудь знает книжку по данному вопросу? или хотя бы ключевые слова?
Вы невнимательны, все игнорируете и меняете темы))
Данными должен владеть тот, кто владеет велосипедом или табуреткой - потребитель, кто же еще. Вы движетесь в правильном направлении - DOA (сейчас скромно говорят IOA). Желательно, конечно, избавиться от приложений полностью, в том числе и от тех, которые обеспечивают интерфейс. А для этого придется либо использовать ORM, либо какую-то модель нижнего уровня, чтобы обойтись без маппинга. Но, вы же не хотите ничего читать((
...
Рейтинг: 0 / 0
25 сообщений из 122, страница 1 из 5
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование БД - текущее состояние дел?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]