powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / виртуализация EAV против native create table
71 сообщений из 71, показаны все 3 страниц
виртуализация EAV против native create table
    #35913716
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предыдущая моя тема выдохлась.
http://sql.ru/forum/actualthread.aspx?tid=653190

Но зато она позволила лучше сформулировать эту тему.
Вопросы EAV были но вот так в лоб конкретно вопрос никогда не ставился.

EAV против native create table

Немного расшифровки
Для возможности создавать динамически изменяемые таблиц что лучше
Использовать частично или полностью EAV (ну или вообще какую то другую виртуализацию типа мусорных таблиц) или использовать простой create table (прямой или косвенный через какое то метаописание типа orm или xml)

Данная возможность нужна скорее не для конечного пользователя а например для модератора или администратора системы то есть человека в какой то степени квалифицированного.

Прошу всех высказывать аргументы только за и против. одного из подходов.
Если бы возможно было бы создать голосования я его создал бы здесь. Дополнительно. Ну можете написать за какой подход вы.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35913860
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже, намеков Вы не понимаете. ОК, прямым текстом: Ваши варианты - оба - кривой кусок дерьма. Увы. Одно дерьмо лучше другого быть не может.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35913866
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621,

честность ценю. И какой же есть третий вариант ?
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35913875
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Foxluck,

Ну Волга же лучше Запорожца :)
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35913930
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно освежу тему новой информацией.
Вот я юзаю такой популярный фреймворк как django

Если кто не в курсе у Django есть ORM.
как он работает.

Мы создаем модели (классы). И далее работаем с экземплярами этих классов то есть объектами. Причем поддерживаться и наследование. и много чего еще.

Как эти объекты представлены на физическом уровне.
это просто таблицы.

то есть выполняя
команду
manage.py syncdb

Происходит
много
create table если конечно сущности еще не были созданы.

И вот например есть объект
User - этот класс нужен не изменным так как он используеться в модуле авторизации

Но мне нужен User со своими дополнительными полями.

Вот он случай когда пользователю нужны свои дополнительные поля.
Там есть два варианта как это решаеться это profile (не буду о нем сейчас) и более интересный который я использую наследование от User
То есть я делаю

class CustomUser(User):
....

физически
при manage.py syncdb
создается еще одна таблица.

Как я это вижу тут именно избран подход. create table и он неплохо работает.
Но кто то может сказать что это не тоже самое. Может быть буду услышать рад аргументацию.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35913943
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> третий вариант

Их не три, их сильно больше. Вы пытаетесь технический прием (в данном случае структуру данных) использовать как универсальный паттерн. Таки нет, это плохой путь. Поищите аналогичные обсуждения, схемы не найдете, но все основные идеи сформулированы.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35914014
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621,

к сожалению все эти подходы сводяться по сути к двум.
это использовать виртуализацию или нет. то есть пользоваться всеми встроенными возможностями базы или использовать только базовые для построение своих средств. Ну или еще какое то компромиссный случай когда одновременно и то и другое используется.

Ну вот есть если какое это метаописание но на физическом уровне это либо create table либо EAV.

Гибридное решение с xml где в одно дополнительное поле сохраняются все дополнительные поля.
это компромиссная ситуация.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35914129
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> к сожалению все эти подходы сводяться по сути к двум

К двум десяткам, Вы хотели сказать?

Ваша проблема в том, что Вы отталкиваетесь от реализации (Django - отличный фреймворк, спору нет, но структура данных - это отдельная задача), совершенно забывая о данных. Набор атрибутов - это набор _связанных_ атрибутов, в противном случае это каша из данных. Разница в реализации сводится к разнице обеспечения целостности и непротиворечивости данных в условиях, когда стандартными реляционными механизмами целостность и непротиворечивость обеспечить невозможно.

Самый простой вариант реализации - это семантическая типизация атрибутов + примитивные конструктивы. Ну то есть: не у телевизора диагональ 32", а у ЭЛТ или панели. Трубки и панели различаются и особенностями техпроцесса, и собственно разными основными физическими процессами. Согласитесь, нетрудно установить семантическую связь между набором конструктивов, их характеристиками и изделиями. Причем, для практического применения таких конструктивов будет относительно немного, часть будет универсальна (физические характеристики, источники питания). Даже если для их описания использовать примитивные структуры типа EAV, Вы уже имеете элементы связей, которые примитивно же решают часть задачи (целостность и непротиворечивость).
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35914416
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621> к сожалению все эти подходы сводяться по сути к двум

К двум десяткам, Вы хотели сказать?



Перечислите на вскидку сколько все вспомните ?
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35914534
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Перечислите на вскидку сколько все вспомните ?

Типизация на основе:
- BOM,
- семантических конструкций любого рода,
- моделей,
- процессов,
- комбинации перечисленных способов.
Метамодели, метаметамодели.

Плюс вариации типа реализации единиц измерений, справочников, строгой типизации атрибутов и пр. нюансы.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35914724
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621,

Пришли к метаописаниям.. :) Да наверное в случае метаописаний виртуализация оправдана. Ведь в этом случае субд выступает тупо в роли физического носителя. чуть более комфортного чем файлы. Кое что доходит стало
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35914786
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Пришли к метаописаниям..

Это хороший вариант. Реализация как правило хм... требует некоторых нестандартных навыков, хотя никаких особых сложностей нет.

> Кое что доходит стало

Рад, что писал не напрасно.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915096
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxluckguest_20040621,

Пришли к метаописаниям.. :) Да наверное в случае метаописаний виртуализация оправдана. Ведь в этом случае субд выступает тупо в роли физического носителя. чуть более комфортного чем файлы. Кое что доходит стало
Можно сделать так что бы этого не было. Немного избыточности и все.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915408
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxluck пишет:

> Для возможности создавать динамически изменяемые таблиц что лучше
> Использовать частично или полностью EAV (ну или вообще какую то другую
> виртуализацию типа мусорных таблиц) или использовать простой create
> table (прямой или косвенный через какое то метаописание типа orm или

В работающей БД DDL-я быть не должно (только как административные
задачи и апгрейды). Таким образом, ТОЛЬКО EAV.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915418
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxluck пишет:

> честность ценю. И какой же есть третий вариант ?

Ну, третий - сделать БД так, чтобы вам не нужно было бы менять
её структуру. Т.е. просто отказаться от этого.

Но EAV на самом деле ничем не плох, просто есть особенности --
трудно писать запросы (ну как трудно -- трудно привыкнуть, потом
легче будет, чем писать даже на обычных структурах, так как
структура самой БД маленькая, и все запросы -- только к ней),
неприменимы всякие стандартные тулзы типа отчётников, QBE,
построителей запросов, и очень сложно писать аналитические запросы.
Собственно, по одной причине - аналитические запросы и так обычно
сложны, а с EAV эта сложность возводится в некую степень так, что
общая сложность становится вообще неприемлимой.

Наверное тебя уже отсылали к статье Анатолия Тенцера.
Почитай, она хорошая.

Также, если боязно всё реализовывать на EAV, то можно
порекомендовать гибридную БД, где часть структуры создаётся
в обычной технике проектирования реляционных БД, а другая
часть, требующая возможности расширения атрибутов -- в виде
EAV. При этом одновременно один объект может иметь и обычные
атрибуты, и "динамические" через механизм EAV. Достоинства
очевидны -- это позволяет сочетать достоинтсва двух подходов
и одновременно избегать их недостатков. Но, естественно,
тут важно правильно всё спроектировать, иначе эффект может
быть обратным.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915444
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv

Но EAV на самом деле ничем не плох, просто есть особенности --
трудно писать запросы (ну как трудно -- трудно привыкнуть, потом
легче будет, чем писать даже на обычных структурах, так как
структура самой БД маленькая, и все запросы -- только к ней),
неприменимы всякие стандартные тулзы типа отчётников, QBE,
построителей запросов, и очень сложно писать аналитические запросы.
Собственно, по одной причине - аналитические запросы и так обычно
сложны, а с EAV эта сложность возводится в некую степень так, что
общая сложность становится вообще неприемлимой.

Наверное тебя уже отсылали к статье Анатолия Тенцера.
Почитай, она хорошая.


Ерунда. К ЕАВ пишутся обычные запросы чере хранимку с имненм таблицы. Тенцер ТУТ не при чем воще.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915464
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QBE и печать просто.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915493
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
В работающей БД DDL-я быть не должно


Почему?
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915614
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават Юсифов пишет:

> Ерунда. К ЕАВ пишутся обычные запросы чере хранимку с имненм таблицы.

Я чё, писал что ли что не пишут ? И потом, селективные хранимые
процедуры есть не во всех СУБД, не забывай.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915617
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin пишет:

> В работающей БД DDL-я быть не должно
> Почему?

Транзакционный DDL - очень сложная и эксклюзивная
операция. Её нельзя давать пользователям в руки.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915705
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

а зачем мне ВСЕ СУБД????????????
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915706
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

ДА нежелательно
Админам тупым тоже
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35915750
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават Юсифов пишет:

> а зачем мне ВСЕ СУБД????????????
За тебя говорить не могу ...

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35916057
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
belugin пишет:

> В работающей БД DDL-я быть не должно
> Почему?

Транзакционный DDL - очень сложная и эксклюзивная
операция. Её нельзя давать пользователям в руки.

А ее и не надо им давать в руки. В руки они получают инструмент, который полностью контролирует их действия и работает в рамках требований к системе, предъявляя в том числе и свои требования к знаниям и квалификации пользователей, которые будут пользоваться таким инструментом. Здесь стоит только вопрос обоснованности такого инструмента и требования изменения структуры/логики в БД конечным пользователем продукта (естественно имеется ввиду ИТ специалист клиента, а не конечный лузер). В 99% случаев такая динамика используется разработчиками не по назначению - с мифической целью сделать супер пупер платформу, на которой конечный пользователь сам сможет рисовать себе нужные программы. 1% случаев - это или ERP или специфика пользователя. В таких случаях, если в основном требуется хранения данных без сложной обработки (тот же интернет магазин, складской учет и т.д.), EAV хорошее решение. Если требуется не только хранить изменяющиеся структуры данных, но и производить ряд операций над большими массивами данных (статистика, аналитика, автоматизированные расчеты и т.д.), то EAV будет плохим средством, ибо на выходе получим сложные запросы и тормоза, здесь уместнее закладываться на DDL для тех классов сущностей, у которых может изменяться структура.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35916792
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хоть кто то выступил на другой стороне ASCRUS

Про EAV мыши плакали и кололись но все равно жрали кактус :)
модель Тенцера я так понял это просто другое название

Для простейшего функционала может сойдет. Но в дальнешем мы создадим свою СУБД . А свою С
УБД сопаставимую с современными наверное сложно сделать.

Допустим мы отказались от хранения метанинформации EAV в обычной базе данных.

А хранить её например в файле. Пишем свой демон чтобы это как то висело в оперативной памяти , реализуем алгоритмы математических множеств типа декартово произведение ну или реализуем свои специфические какие-нибудь нечеткие множества :) , написать свой специфический язык запросов (как то надо управлять этим же)


Ну вроде сейчас получается стандартом де факто для таких случаев является EAV. Какие то экзотические возможности есть (вроде документоориентированных субд например CoucheDB). но их наверное никто не сможет порекомендовать или сможет?

У нас есть проблемы с тем что у нас рел. субд оперирует четко типизированными объектами.

ddl вроде и изменяет тип сущностей и создает новые

По поводу того что страшно давать пользователю create table
но мы отдаем не весь ddl а только определенные частные случаи.
Да и не всякому пользователю мы дадим такие права только доверенным лицам.
Да может мне и самому так удобнее будет расширять систему. Можно сказать мой девелоперский иструмент дополнительный.


По поводу проблем многотранзакционности интересное замечание. Ну могут быть какие то проблемы но тоже решаемые скорее всего.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35916904
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Допустим мы отказались от хранения метанинформации EAV в обычной базе данных.

Не надо зацикливаться на EAV. Тупая примитивная структура для ограниченного применения, никакого другого смысла в этой аббревиатуре нет.

Используете другие источники данные - будете вынуждены синхронизировать их с содержимым бд. Причем, в обе стороны, как Вы понимаете. Мало штатного геморроя?

> Какие то экзотические возможности есть (вроде документоориентированных субд например
> CoucheDB)

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

> Да может мне и самому так удобнее будет расширять систему.

Не удобнее. Проверено неоднократно.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35918488
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS пишет:

> А ее и не надо им давать в руки. В руки они получают инструмент, который
> полностью контролирует их действия и работает в рамках требований к
> системе, предъявляя в том числе и свои требования к знаниям и

Без базару. Но этот инструмент всё равно таки в конечном итоге
ВЫПОЛНИТ этот самый DDL и заблокирует БД эксклюзивно.

Не, конечно же не так всё страшно, заблокирует он на только
каки-то 2-3 минуты, но вот ежели в таблице 5-10 миллионов,
то уже будет минут 10-20. Ну и т.д.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35918494
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxluck пишет:

> У нас есть проблемы с тем что у нас рел. субд оперирует четко
> типизированными объектами.

Так в чём проблема ? EAV может быть как строго типизированным,
так и наоборот.

> Да может мне и самому так удобнее будет расширять систему. Можно сказать
> мой девелоперский иструмент дополнительный.
> По поводу проблем многотранзакционности интересное замечание. Ну могут
> быть какие то проблемы но тоже решаемые скорее всего.

Так в чём проблема тогда ? Я вижу, ты полон решимости.
Ну, тогда -- ВПЕРЁД ! А про все твои шишки ты ОБЯЗАТЕЛЬНО
напиши сюда, нам, твой опыт будет нам уроком.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35918558
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Не, конечно же не так всё страшно, заблокирует он на только
каки-то 2-3 минуты, но вот ежели в таблице 5-10 миллионов,
то уже будет минут 10-20. Ну и т.д.


Существуют ли такие задачи, где это было бы приемлемым комромиссом?

Например, разрешать модифицировать такие таблицы только DBA, а маленькие таблицы, не явлояющиеся узким местом, таблицы разрешать модифицировать некоторой категории конечных пользователей?
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35920912
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beluginMasterZiv
Не, конечно же не так всё страшно, заблокирует он на только
каки-то 2-3 минуты, но вот ежели в таблице 5-10 миллионов,
то уже будет минут 10-20. Ну и т.д.


Существуют ли такие задачи, где это было бы приемлемым комромиссом?

Например, разрешать модифицировать такие таблицы только DBA, а маленькие таблицы, не явлояющиеся узким местом, таблицы разрешать модифицировать некоторой категории конечных пользователей?


Вот вот... опять же можно выбрать время специальное для таких операций.
Существуют ИС которые считают аналитику всю ночь. Типа завершение операционного дня.

Много данных соответственно породят большое кол-во таблиц. Соотвественно в каждой таблице будет меньше данных. Операции над более маленькими таблицами проходят намного быстрее.

alter table не знаю насколько это дорогостоящая операция. По сравнению с другими.

EAV на 10 миллионах упадет.

Меня вот что еще волнует. что метаинформацию все равно надо где то хранить. если даже мы создаем таблицы через create table.

Нам нужен общий список таблиц. который генерит юзер
Список имен аттрибутов который нагенерил юзер к этой таблице.

Соответственно связь один ко многим между этим таблицами
Но все же это не так страшно. как EAV.

Этого достаточно чтобы динамически генерировать sql.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35921259
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin пишет:

> Существуют ли такие задачи, где это было бы приемлемым комромиссом?

Компромисы приемлимы везде.
Маленькие базы данных, я думаю.

Но главное, на самом деле (я про это забыл), что EAV НЕ ОГРАНИЧЕН
в числе атрибутов, а таблица в числе колонок в любой СУБД ограничена.
Про это тоже надо помнить.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35921261
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxluck пишет:

> Много данных соответственно породят большое кол-во таблиц. Соотвественно
> в каждой таблице будет меньше данных. Операции над более маленькими
> таблицами проходят намного быстрее.

Объёмы таблиц в СУБД - это не проблема. LOG (N) растёт медленно.

> alter table не знаю насколько это дорогостоящая операция. По сравнению с
> другими.

Там зависит от сложности ALTER-а, Как правило, примерно в половине
модификаций требуется физическое копирование данных в новое место.
(кстати, это очень сильно по-разному в разных СУБД организованно,
так что стоит озаботиться изучением конкретной СУБД, если что).

>
> EAV на 10 миллионах упадет.

Ой, да ладно. какая разница-то ? 10 миллионов , 100 -- не суть
важно. А вот попробуйте в 100 миллионную таблицу добавить поле
not null....

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35921694
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FoxluckЭтого достаточно чтобы динамически генерировать sql.
Если учесть, что один объект м.б. размазан на неограниченное число таблиц, задача "динамически генерировать sql" становится не очень простой. Я в такой ситуации выбрал гибрид EAV+CSV и не жалею.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35922184
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxluckХоть кто то выступил на другой стороне ASCRUS

Про EAV мыши плакали и кололись но все равно жрали кактус :) Да просто "рука бойцов колоть устала...".
Раз в месяц (или чаще) возникает одно и то же обсуждение EAV. И все по кругу...
День сурка какой-то.

Если почитать обсуждение, которое не так давно затеял сам ASCRUS, то там можно много чего посмотреть про EAV, не EAV и варианты реализации не EAV с их достоинствами и недостатками.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35922221
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНе, конечно же не так всё страшно, заблокирует он на только
каки-то 2-3 минуты, но вот ежели в таблице 5-10 миллионов,
то уже будет минут 10-20. Ну и т.д.
Не знаю где как, а в Oracle, если в добавляемом столбце не проставлено значение по умолчанию, то это будет операция со словарем, а не с таблицей.
т.е. 10-20 минут блокировки не будет.

По поводу 5-10 млн. записей - для хранения их в EAV, потребуется таблица с 50-100 млн. строк (или больше). Обрабатывать ее, а особенно считать по ней отчеты - дело не для слабонервных.

Так что не надо инсенуаций.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35922664
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BelyПо поводу 5-10 млн. записей
Зависит от природы этих объектов - 10 млн. это население большого города или число операций крупной фирмы за месяц
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35922750
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
ASCRUS пишет:

> А ее и не надо им давать в руки. В руки они получают инструмент, который
> полностью контролирует их действия и работает в рамках требований к
> системе, предъявляя в том числе и свои требования к знаниям и

Без базару. Но этот инструмент всё равно таки в конечном итоге
ВЫПОЛНИТ этот самый DDL и заблокирует БД эксклюзивно.

Не, конечно же не так всё страшно, заблокирует он на только
каки-то 2-3 минуты, но вот ежели в таблице 5-10 миллионов,
то уже будет минут 10-20. Ну и т.д.

Ну так в том то и дело, что это уже не вопрос программиста, а архитектора и аналитика. Вопрос этот должен быть поставлен и решен в ТЗ - частота и условия проведения изменения метамодели системы. В моем текущем проекте это выведено на администратора - он производит изменения метамодели и самостоятельно запускает режим синхронизации, который проводит изменение физической модели БД, перестраивает формы просмотра и изменения информации. Здесь это оставлено на усмотрение человеческого фактора, так как проект не критичный - кол-во пользователей не большое, массив информации большой, но изменения метамодели не частые. В другом же проекте сейчас разрабатывается более сложная схема, так как там планируемый ежедневный прирост информации около 4 гб и кол-во пользователей за тысячу. Здесь изменения будут происходить в многофазовом режиме: изменение метамодели->проведение синхронизации на тестовой БД->проведение тестирования->синхронизация боевой базы с остановкой на профилактические работы (на ночь). Причем здесь же еще сразу обговариваются условия, когда вне зависимости от видимости и доступности БД, работы сетевых каналов и т.д., существуют группы пользователей, которым необходимо в установленное время обеспечить продолжение их работы по вводу информации. Все это вкупе называется технологическим процессом и именно он должен определять, как, когда и насколько можно изменять структуру базы и кто может подождать, а кто должен работать дальше. Ну а если просто без привязки к конкретным условиям, что DDL зло, так как он блокирует таблицы ... то да, он зло ;)
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35922764
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати в догонку - в зависимости от условий проекта, DDL может и не оказывать значительных временных задержек - например в моих проектах у существующих сущностей могут добавляться новые столбцы и изменяться размер длины и разрядности поля. Смены типов или имен полей не предусмотрено. Все поля в таблице объявляются как NULL, а требование NOT NULL обрабатывается в триггере представления, через которое и работают клиентские приложения (слой таблиц для клиентов не доступен).
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35922953
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BelyFoxluckХоть кто то выступил на другой стороне ASCRUS

Про EAV мыши плакали и кололись но все равно жрали кактус :) Да просто "рука бойцов колоть устала...".
Раз в месяц (или чаще) возникает одно и то же обсуждение EAV. И все по кругу...
День сурка какой-то.

Если почитать обсуждение, которое не так давно затеял сам ASCRUS, то там можно много чего посмотреть про EAV, не EAV и варианты реализации не EAV с их достоинствами и недостатками.

Нашел эти темы пойду читать.

А вообще с ваших слов стало понятно что модификация структур таблиц. довольно затратная и опасная операция. поэтому вы её так и не рекомендуете. операции с ddl.

Но побольшому счету надо это проверить провести какое нибудь исследование на производительность.

Типа создать случайным образом 1000 таблиц. Набить данными. По играть с alter table
Случайные выборки сделать.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35922972
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> изменение метамодели->проведение синхронизации на тестовой БД->проведение
> тестирования->синхронизация

Дружище, какая метамодель? Чтобы метамодель менялась, сначало нужно реализовать метаметамодель, а это явно не для Вас задача. Может, таки _модель_ меняется?

Удивляюсь, как с такой кашей в голове вообще можно проектированием заниматься.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35923278
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПрошу всех высказывать аргументы только за и против. одного из подходов.
Очередной поиск "универсального и правильного" решения на все случаи жизни.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35923293
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> изменение метамодели->проведение синхронизации на тестовой БД->проведение
> тестирования->синхронизация

Дружище, какая метамодель? Чтобы метамодель менялась, сначало нужно реализовать метаметамодель, а это явно не для Вас задача. Может, таки _модель_ меняется?

Удивляюсь, как с такой кашей в голове вообще можно проектированием заниматься.
Модель в БД, метамодель сверху в своих таблицах, а каша у Вас в голове.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35923300
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxluck Типа создать случайным образом 1000 таблиц. Набить данными. По играть с alter table Случайные выборки сделать.
Смысл ? У Вас в задаче пользователи будут случайным образом создавать 1000 таблиц, добавлять или изменять просто так в них колонки ? :)
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35923597
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Модель в БД, метамодель сверху в своих таблицах, а каша у Вас в голове.

;) Дружище, мало просто выучить модное слово, нужно хотя бы в общих чертах представлять его смысл.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35923635
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely пишет:

> Не знаю где как, а в Oracle, если в добавляемом столбце не проставлено
> значение по умолчанию, то это будет операция со словарем, а не с таблицей.
> т.е. 10-20 минут блокировки не будет.

Читай внимательней. Если новое поле NOT NULL !

> По поводу 5-10 млн. записей - для хранения их в EAV, потребуется таблица
> с 50-100 млн. строк (или больше). Обрабатывать ее, а особенно считать по
> ней отчеты - дело не для слабонервных.
В чём же твоя проблема ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35923640
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS пишет:

> Ну так в том то и дело, что это уже не вопрос программиста, а
> архитектора и аналитика.

Ты думаешь, программист - это тот, кто в редакторе notepad
пишет код на visual basic ? Я на этот счёт непного другого
мнения.

Ну да ладно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35923641
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS пишет:

> Кстати в догонку - в зависимости от условий проекта, DDL может и не
> оказывать значительных временных задержек - например в моих проектах у
> существующих сущностей могут добавляться новые столбцы и изменяться

Ладно, фиг с ней, с задержкой. А как ты решаешь проблему с количеством
атрибутов ? Я хочу 1000. Нет, завтра уже -- 2000. А потом - 3000.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35923804
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
а таблица в числе колонок в любой СУБД ограничена.
Про это тоже надо помнить.


Нельзя ли приджоинить новую табличку 1:0..1 в случае исчерпания?
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35923917
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin пишет:

> Нельзя ли приджоинить новую табличку 1:0..1 в случае исчерпания?
Да можно. Но вроде бы противники EAV боролись за простоту написания
запросов.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35924045
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> Модель в БД, метамодель сверху в своих таблицах, а каша у Вас в голове.

;) Дружище, мало просто выучить модное слово, нужно хотя бы в общих чертах представлять его смысл.
Есть такое понятие, как терминология. В разных направлениях один и тот же термин может означать немного разные вещи. Вот например обращение дружище к незнакомому человеку вместо Вы в моей терминологии имеет отрицательный оттенок. Думаю слово метамодель у нас с Вами тоже имеет разный смысл.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35924058
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Ты думаешь, программист - это тот, кто в редакторе notepad
пишет код на visual basic ? Я на этот счёт непного другого
мнения.
...

Ладно, фиг с ней, с задержкой. А как ты решаешь проблему с количеством
атрибутов ? Я хочу 1000. Нет, завтра уже -- 2000. А потом - 3000.

Вот я о том и говорю. Когда программист начинает хотеть неизведанные дали, в итоге получается супер пупер универсальная платформа. Когда же есть некая нестандартная задача, не вписывающаяся к примеру в рамки РСУБД (требования динамического изменения структуры в рантайме), архитектор не начинает проводить тесты на таблицах с тысячами колонок, миллиардами записей и прочим, а для начала полностью собирает по задаче все требования и ограничения, стараясь максимально ограничить круг нестандартности, ибо как известно клиенты часто на словах хотят больше, чем им нужно на самом деле. И только после этого выбирается решение, в том числе на определенной РСУБД проводятся тесты с целью выявления подводных камней в решении. В моем случае в обоих проектах поставлено ограничение на кол-во столбцов в 255. Тоже самое касается и максимального кол-ва записей в актуальных и исторических таблицах - определен собираемый объем данных, правила и время их хранения в операционной и аналитических базах, где OLTP и DSS - это разные СУБД, ибо предназначены для выполнения разных задач.

Еще раз подчеркиваю - при выборе решения надо руководствоваться не тем, что лучше - DDL vs EAV vs Еще чего то, а отталкиваться от конкретной задачи и поставленных условий. Если соблюдать это правило, то в тему будет и DDL и EAV и Еще чего то, потому что когда есть определенные задачи и условия - то решение будет простым, эффективным и цели будут достигнуты. Когда есть мифическая цель сделать нечто универсальное, то процесс разработки будет бесконечным, а проект считаться безнадежным.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35924095
Фотография GUESТ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSКогда есть мифическая цель


много бкв не читал - но вот это понравилось...
вы не обратили внимания? все дискуссии вокруг подобных тем эквифинальны...

ушел насвистывая

мифическая цель - виньетка ложной сути
мифическая цель - не стыдно говорю
мифическую цель - понять мне не позвольте
мифическую цель - я скоро догорю....
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35924319
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GUESТвы не обратили внимания? все дискуссии вокруг подобных тем эквифинальны...
Да потому что можно до опупения каждый раз яростно обсуждать, что круче - колеса или гусеницы, без привязки к местности и результат будет тот же самый ;)
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35924405
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS пишет:

> Еще раз подчеркиваю - при выборе решения надо руководствоваться не тем,
> что лучше - DDL vs EAV vs Еще чего то, а отталкиваться от конкретной
> задачи и поставленных условий.

Безусловно, об этом я и не говорю. Само собой разумеется.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35925366
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот освежу направление.
А что если дать пользователю возможность только создавать сущности. (таблицы).
Но не модифицировать. их. Тогда бы мы избежали серьезного гемора. со всякими там блокировками.
Да это Серьезное ограничение.

А как можно раширять сущности не изменяя таблиц.

Есть Возможность наследования таблиц.
То есть вторая таблица расширяет первую.



Но они вместе представляют одну сущность. На уровне метаописания.


И позволяет нам только создавать таблицы.
Только выполнять create table Никакого alter table.
Как вам такая идея.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35925457
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТолько выполнять create table Никакого alter table.
Как вам такая идея.
Каждому полю по таблице - замечательная идея.Тебе уже объяснили, что не бывает универсальных решений.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35925639
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxluck пишет:

> Но они вместе представляют одну сущность. На уровне метаописания.
>
>
> И позволяет нам только создавать таблицы.
> Только выполнять create table Никакого alter table.
> Как вам такая идея.

Это - лучше. Это и проблему с большим числом атрибутов
в таблице решает. Только я бы всё же разрешил им временно,
до введения в эксплуатацию, alter на эту самую новую таблицу.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35925800
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
Foxluck пишет:

> Но они вместе представляют одну сущность. На уровне метаописания.
>
>
> И позволяет нам только создавать таблицы.
> Только выполнять create table Никакого alter table.
> Как вам такая идея.

Это - лучше. Это и проблему с большим числом атрибутов
в таблице решает. Только я бы всё же разрешил им временно,
до введения в эксплуатацию, alter на эту самую новую таблицу.



Согласен. Это увеличит гибкость. Определить. Некоторый переходный режим. Когда еще возможен alter table. Ну кстати на этом переходном этапе когда пользователю нужен только макет. Сойдет решение когда не нужно трогать базу. Например XML поле. То есть работать уже будет. Но еще плохо.
Когда пользователь принимает решение закончить редактирование таблицы. все это фиксируется ddl.



По таблице на поле. :)
Мда это крайний случай (Точнее как минимум два поля на таблицу вместо с id). Кстати полезно его рассмотреть с точки зрения к чему ведет такое дробление . Даже трудно представить. Наверное это пагубно скажется на производительно много joinов.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35927540
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxluckПо таблице на поле. :)
Мда это крайний случай (Точнее как минимум два поля на таблицу вместо с id). Кстати полезно его рассмотреть с точки зрения к чему ведет такое дробление . Даже трудно представить. Наверное это пагубно скажется на производительно много joinов.
Угу. Сущность размазана по 5 таблицам, для сущности миллион записей, значит в каждой из 5 таблиц получаем по миллиону записей. Делаем запрос, возвращающий все поля с наложением условия, то есть соединяем INNER JOIN все таблички, пишем WHERE - любуемся на кривой план запроса, наслаждаемся тормозами :)
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35929098
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВ работающей БД DDL-я быть не должно (только как административные
задачи и апгрейды).
Настройка структуры данных - это не административная задача?

MasterZivТаким образом, ТОЛЬКО EAV.
C религиозным подходом трудно спорить, но, к счастью, не обязательно ему следовать.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35929147
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Настройка структуры данных - это не административная задача?

Разумеется, нет.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35929266
guest_20040621,
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35929288
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621Разумеется, нет.
Замечательно. Теперь более сложный вопрос. Вообразите шкалу, на одном конце которой - пользователи кликают кнопки, а на другом - девелоперы пишут программы. Соответственно, на одном конце DDL явно нужен, на другом явно нелеп. Где-то посередине - "административные задачи", которые вроде как объявлены границей применимости DDL.

Теперь внимание, вопрос: к какому из концов ближе настройка структуры данных? Намекну, что ответ представляется мне не столь простым.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35929293
softwarer,
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35929294
да при чем тут администратор, ес,
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35929726
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer пишет:

> Теперь внимание, вопрос: к какому из концов ближе настройка структуры
> данных? Намекну, что ответ представляется мне не столь простым.

А это зависит от конкретной системы. От частоты и характера изменения
структуры. Даже от ценности и объёма данных. В общем-то мы к этому
уже пришли в топике. Вроде бы все согласились.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35929779
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Где-то посередине - "административные задачи"

Это в Вашем воображении они "посередине". Административные задачи - суть задачи, которые и позволяют пользователям "кликать кнопки".

> ответ представляется мне не столь простым.

"Настройка структуры данных" - это сама по себе бредовая формулировка.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35930631
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА это зависит от конкретной системы.
Принципиальный момент - не от "системы", а от "конкретной задачи". В том-то и дело. В рамках одной системы решается много задач, и "итоговый ответ на этот вопрос" запросто может оказаться размазан по всей шкале.
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35931159
Foxluck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerMasterZivА это зависит от конкретной системы.
Принципиальный момент - не от "системы", а от "конкретной задачи". В том-то и дело. В рамках одной системы решается много задач, и "итоговый ответ на этот вопрос" запросто может оказаться размазан по всей шкале.

это ты очень хорошо сказал. респект
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35931262
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer wrote:

> А это зависит от конкретной системы.
>
>
> Принципиальный момент - не от "системы", а от "конкретной задачи".

Под системой я тут подразумевал прикладную систему.
Т.е. это синоним "конкретной задачи".
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
виртуализация EAV против native create table
    #35931311
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Принципиальный момент - не от "системы", а от "конкретной задачи".

Вот-вот, именно прикрываясь "конкретной задачей" криворукие архитекторы и превращают базу данных в перманентный геморрой. Им не нужно корректное работоспособное решение. Они заинтересованы в том, чтобы юзер до конца жизни сидел на игле "конкретной задачи" и по любому чиху платил бабло. Это - не проектирование, это мошенничество.
...
Рейтинг: 0 / 0
71 сообщений из 71, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / виртуализация EAV против native create table
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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