|
|
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
Есть задача хранить в базе объекты с различными атрибутами, причем будут добавляться новые типы объектов. Мне привычнее создать таблицу с id и типом объекта и таблицу с атрибутами и через таблицу связей связывать объект и его атрибуты. Мой руководитель говорит что так будет тормозить и предлагает при каждом создании новых типов объектов создавать новую таблицу (объектов и его атрибутов). Разных типов объектов может доходить до тысячи, то есть база будет состоять из тысячи таблиц и они будут постоянно добавляться . Вряд ли будут запросы по склеиванию таблиц, но точно будут запросы которые нужно будет прогнать по всем таблицам сразу. В общем кол-во объектов теоретически может достигать несколько десятков миллионов. Количество типов объектов несколько тысяч. Используемая СУБД Postgresql. Какой способ будет более правильным и быстрым? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 17:15 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
"серебряной пули нет"(с) В одних случаях лучше первый способ, в других - второй. у каждого из них есть недостатки. Если интересно почитать подробнее про преимущества и недостатки - сделайте поиск по EAV на форуме, будете обеспечены материалом на пару месяцев чтения :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 17:29 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ. А можно вкратце плюсы и минусы обоих способов по вашему мнению. Надо уже срочно определиться с БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 17:36 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
progand, Вы ТЗ озвучьте, может что и подскажем. А стрелять по воробьям лично у меня нет желания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 17:39 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
за вашего руководителя divide et impera Пишите (моделируете) приложение под руководством этого мудрого латинского изречения, затем смотрите в каких местах употребляете union all. это будут кандидаты на объединение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 17:45 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
Постараюсь объяснить вкратце. Есть карта на которую пользователи могут добавлять объекты разных типов с атрибутами (например объект дом с атрибутами имя, граница, этажность, кол-во жильцов, адрес и т.д ), так же пользователь может создавать свои пользовательские типы. Так как пользователей может быть много, типов объектов тоже может быть очень много. Будут возможности выбора объектов определенного типа с различными фильтрами, а также возможность выбора объектов всех типов по определенным условиям (на пример выбрать все объекты находящиеся в определенной зоне). И у меня встал вопрос, какая архитектура БД наиболее выгодна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 17:50 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
progandкакая архитектура БД наиболее выгодна? В данном случае EAV рулит однозначно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 18:17 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, не будет ли запрос, всех объектов определенного типа с атрибутами, очень затратным по производительности в архитектуре EAV, ведь в другой архитектуре запрос будет намного быстрее, но создания для меня тысячи таблиц как-то дико. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 18:29 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
SERG1257, Ну я понимаю что у вас в итоге получается многомерный массив. Но это ничего не значит. Оба подхода имеют право на существование. Другое дело что если вы упретесь по количеству запросов в производительность, то вашу схему придется полностью или частично переделывать в то что вам говорит руководитель. Поэтому смотрите на объем данных и количество запросов. Если изначально нет даже приблизительного понятия что будет, то я б строил по схеме руководителя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 18:30 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
Думаете за пользователя, допрашиваете аналитиков, строите модель, обкатываете модель, но заполняете свойства определяемые пользователем нормальными таблицами. Затем добавляете EAV как дополнительные свойства. Если вам повезет то этих дополнительных свойств, забытых в первой итерации будет немного. Если много, то следующая итерация делает их обычными полями обычных таблиц вынося из EAV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 18:39 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
progandРазных типов объектов может доходить до тысячиИ набор атрибутов у каждого уникален? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 19:07 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
progandDimitry Sibiryakov, не будет ли запрос, всех объектов определенного типа с атрибутами, очень затратным по производительности в архитектуре EAV, ведь в другой архитектуре запрос будет намного быстрееСудя по описанию, запросы предполагаются несложные... В любом случае выгоднее сделать таблицу объект с общими стрибутами, а вот для пользовательских атрибутов выбирать - EAV или таблицы. Зависит от требований к производительности (как я понимаю, это стартап, и в перспективе, буквально через полгода, так инвесторам и сказали, каждый житель земли должен занести туда все объекты реального мира, которые он когда либо видел?) ИМХО можно делать EAV, потом пользовательские атрибуты всегда в таблицы вынести можно, когда "взлетит". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 19:14 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
progandне будет ли запрос, всех объектов определенного типа с атрибутами, очень затратным по производительности в архитектуре EAV, ведь в другой архитектуре запрос будет намного быстрее Код: sql 1. против Код: sql 1. при наличии индекса на attr.id будет, конечно быстрее, но эту разницу придётся разглядывать с микроскопом. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 19:23 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovпри наличии индекса на attr.id будет, конечно быстрее, но эту разницу придётся разглядывать с микроскопом.Зависит от запросов. Если в запросе пишут attr1 = xxx and attr2 between M and K or attr2 < F То в EAV это уже будет не очень быстро :-( Наверное, начальник это и имел в виду, а не простые выборки вида "получить один объект с всеми его атрибутами", иначе бы так не говорил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 21:04 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
alexeyvgЕсли в запросе пишут attr1 = xxx and attr2 between M and K or attr2 < F То в EAV это уже будет не очень быстро :-( Да неужели? С EAV это будет выглядеть примерно так же: Код: sql 1. 2. 3. 4. 5. Индекс по AttrType,AttrValue сильно поможет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 21:12 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovalexeyvgЕсли в запросе пишут attr1 = xxx and attr2 between M and K or attr2 < F То в EAV это уже будет не очень быстро :-( Да неужели? С EAV это будет выглядеть примерно так же: Код: sql 1. 2. 3. 4. 5. Индекс по AttrType,AttrValue сильно поможет.Да, неужели :-) Индекс не поможет, потому что вот эти условия: "AttrType='attr1' and AttrValue = xxx" будут для трёх разных таблиц (трёх экземпляров таблицы атрибутов), и серверу нужно найти результат пересечения выборки. Если есть 100 объектов с указанными пересечениями значений атрибутов, и по милиону объектов с этими значениями, но без пересечений, то представьте, насколько будет эффективнее составной индекс на атрибуты по сравнению с пересечением результата для каждого фильтра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 21:50 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
alexeyvgИндекс не поможет, потому что вот эти условия: "AttrType='attr1' and AttrValue = xxx" будут для трёх разных таблиц (трёх экземпляров таблицы атрибутов) Какой идиот разнесёт атрибуты по трём таблицам?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 21:57 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
progandЕсть задача хранить в базе объекты с различными атрибутами, причем будут добавляться новые типы объектов. Мне привычнее создать таблицу с id и типом объекта и таблицу с атрибутами и через таблицу связей связывать объект и его атрибуты. Мой руководитель говорит что так будет тормозить и предлагает при каждом создании новых типов объектов создавать новую таблицу (объектов и его атрибутов). Разных типов объектов может доходить до тысячи, то есть база будет состоять из тысячи таблиц и они будут постоянно добавляться . Вряд ли будут запросы по склеиванию таблиц, но точно будут запросы которые нужно будет прогнать по всем таблицам сразу. В общем кол-во объектов теоретически может достигать несколько десятков миллионов. Количество типов объектов несколько тысяч. Используемая СУБД Postgresql. Какой способ будет более правильным и быстрым? Третий способ: использовать СУБД и хранить в одной "таблице". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 22:14 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovalexeyvgИндекс не поможет, потому что вот эти условия: "AttrType='attr1' and AttrValue = xxx" будут для трёх разных таблиц (трёх экземпляров таблицы атрибутов) Какой идиот разнесёт атрибуты по трём таблицам?.. Спросите у специалиста по СУБД, как написать такой запрос, про который шла речь, ну и вообще про модель EAV. Только свой не показывайте, а то он тоже сделает предположение про идиота :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 22:27 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
alexeyvgDimitry Sibiryakovпропущено... Какой идиот разнесёт атрибуты по трём таблицам?.. Спросите у специалиста по СУБД, как написать такой запрос, про который шла речь, ну и вообще про модель EAV. Только свой не показывайте, а то он тоже сделает предположение про идиота :-)А, с having будет одна таблица, но суть от этого не меняется - всё равно будет пересечение 3-х рогромных выборок, какая разница. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 22:31 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
alexeyvgбудет пересечение 3-х рогромных выборок Это будет пересечение трёх индексных битмапов. Что гораздо меньше чем выборка. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 22:47 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
progand, погугли Тенцер БД хранилище объектов а здесь сравнение различных подходов http://www.inf.tsu.ru/library/Publications/2004/33.pdf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2013, 23:00 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
Запрос с фильтрацией по атрибутам из "широкой" таблицы будет проще и быстрее чем для EAV. Хотя для UNION из 1000 таблиц да еще если с группировкой да сортировкой - это как фишка ляжет. Проблемы будут в другом: 1. Объекты определяются пользователями системы. То есть приложению нужны права на модификацию схемы, хотя бы частично. Любая дырка в безопасности типа SQL INJECTION даст полный контроль над базой. И админ нужен весьма опытный. Есть кто сумеет грамотно права распредилить ? 2. Пользователи будут создавать объекты, менять, ошибаться, переделывать. ALTER TABLE требует эксклюзивной блокировки (даже чтение блокируется ), и обычно довольно медленная, так как операция обычно редкая оптимизацией в последнюю очередь заморачиваются. То есть на редактирование система будет почти однопользовательской, пока один меняет все ждут. Несмотря на быстрое выполнение запросов. 3. На каком языке клиент ? большинство фреймворков : Java, Ruby/Rails, Django ... довольно хорошо работают с EAV, а вот для работы с редактируемыми пользователем широкими таблицами на ум ничего не приходит. Возможно весь стек доступа к базе придется писать с нуля, а это человеко-месяцы а то и годы. Ресурсы на это есть ? 4. Насколько хорошо переменная схема для бэкапов, репликации/standby ? 5. Средства ETL/отчеты - что может поддерживать динамическую схему ? И сколько придется допиливать напильником даже если есть возможность ? 6. Разработка, как такую схему данных держать в системе контроля версий, как переносить от разработчика к QA и в production ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2013, 08:13 |
|
||
|
Проектирование БД с созданием кучи таблиц
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovalexeyvgбудет пересечение 3-х огромных выборок Это будет пересечение трёх индексных битмапов. Что гораздо меньше чем выборка.Понятно, не полноценная выборка, но это всё таки больше, чем поиск по индексу, причём намного, разница же в сотни, тысячи раз. пролетевшийХотя для UNION из 1000 таблиц да еще если с группировкой да сортировкой - это как фишка ляжет.Как я понял ТС, наиболее типичными будут запросы поиска объектов одного типа по каким то условиям с аттрибутами. Ну и конечно получение одного объекта с аттрибутами по ИД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2013, 08:49 |
|
||
|
|

start [/forum/topic.php?fid=32&startmsg=38184335&tid=1541100]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
150ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 473ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...