powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Слияние классов в одну глобаль
58 сообщений из 58, показаны все 3 страниц
Слияние классов в одну глобаль
    #38332129
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В свое время реализовали архитектуру следующим образом
Код: python
1.
2.
3.
4.
5.
6.
Class A Extends (%Persistent)
Class AA Extends (%Persistent, A)
Class AAA Extends (%Persistent, AA)
....
Class AB Extends (%Persistent, A)
....


Т.е. все они храняться в разных глобалах, ID везде по-умолчанию икрементальные.
Довольно беспонтово получилось.....

Нужно сливать все в базовое хранение, т.е. привести к архитектуре
Код: python
1.
2.
3.
4.
5.
6.
Class A Extends (%Persistent)
Class AA Extends (A)
Class AAA Extends (AA)
....
Class AB Extends (A)
....


Проблема в том что в этом случае часть данных начнет храниться под другими ID (во изббежание дублей), а ссылки из других классов останутся на "старый ID".
Как можно провернуть такую миграцию? Есть ли какие-то встроенные средства? Идеи?
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38332130
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще один влопрос в тему:
При смене idKey класса, как правильно престраиваются ссылки на этот класс, находящиеся в других классах?
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38332132
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А разве можно изменить IdKey?
Вам нужно будет искать все ссылки на объект и переделывать их.
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38332144
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н. ,
А разве можно изменить IdKey? Да, если хранение кильнуть - то получится. )))
Вам нужно будет искать все ссылки на объект и переделывать их. Почему то так и думал, но надежда теплилась
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38332198
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmovНужно сливать все в базовое хранение, т.е. привести к архитектуре

Не очень хороший подход на самом деле.
Всё отлично только на бумаге и в абстракции ООП.
Рекомендую посмотреть как каше реализует хранение таких классов.

1 - Среди этих классов должны будут быть только уникальные индексы, если в классе AA и AB - будет индекс I1 - то компилятор даже не ругнется, а вот когда начнете заполнять данные будет весело. Так же особенно весело когда в потомках нужно завести индексы с разной уникальностью. Уникальность сразу распространяется на потомков.

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

3 - Все данные и индексы потомков первого хранимого класса, будут содержать полное имя класса потомка, то есть каждая запись будет содержать дополнительную текстовую строку на 10-20 символов.

4 - Предположим у вас есть 10E5 записей A, 10E4 записей AА, 10 записей AАА, что бы получить запись ААА, вам, грубо придется промотать 110000 предстояших записей А и АА, если конечно у вас не хватило индекса


sigmovКак можно провернуть такую миграцию? Есть ли какие-то встроенные средства? Идеи?

Код: sql
1.
INSERT INTO NewTable SELECT FROM OLdTable
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38332424
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmov, полностью поддержу Ptn. Рекомендация Олега Оленина со Школы 2012 - "для нагруженных систем используйте анемичную модель данных".
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38332513
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PtnНе очень хороший подход на самом деле.
Всё отлично только на бумаге и в абстракции ООП.
Рекомендую посмотреть как каше реализует хранение таких классов.
Хранение идет в глобали базового класса(первого %Persistent), данные относящиеся к потомкам хранятся в subscript'ах той же глобали

PtnСреди этих классов должны будут быть только уникальные индексы, если в классе AA и AB - будет индекс I1 - то компилятор даже не ругнется, а вот когда начнете заполнять данные будет весело.У меня ругается.... 2013.1
PtnТак же особенно весело когда в потомках нужно завести индексы с разной уникальностью. Уникальность сразу распространяется на потомков.Должо быть Вы имели ввиду "индексы с уникальностью отличной от предков". И это правильно что уникальность распространяется на потомков в неизменном виде.

PtnМожет возникнуть путаница в какой последовательности нужно ребилдиить индексы, по идее должен сохраняться порядок от предков к потомкам, а дальше уже насколько сильно вы наследование намутите.Не вижу тут никакой путаницы, по крайней мере сверх той что и так присуща Каше.

PtnВсе данные и индексы потомков первого хранимого класса, будут содержать полное имя класса потомка, то есть каждая запись будет содержать дополнительную текстовую строку на 10-20 символов.Верно. Но не вижу тут ничего страшного.

PtnПредположим у вас есть 10E5 записей A, 10E4 записей AА, 10 записей AАА, что бы получить запись ААА, вам, грубо придется промотать 110000 предстояших записей А и АА, если конечно у вас не хватило индексаЭто решается с помощью объявления индекса с такими же полями в классе-потомке.

Ptn
Код: sql
1.
INSERT INTO NewTable SELECT FROM OLdTable

Проблема ссылочной целостности.....
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38332525
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
doublefintsigmov, полностью поддержу Ptn. Рекомендация Олега Оленина со Школы 2012 - "для нагруженных систем используйте анемичную модель данных".
Для высоконагруженных систем использовать нужно Oracle, Postgres. Ну а уж если Cache' вынуждены юзать - то никаких объектов и даже без SQL, только ^G.
Каждый выбирает для себя оптимальный вектор характеристик.....
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38332568
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmovdoublefintsigmov, полностью поддержу Ptn. Рекомендация Олега Оленина со Школы 2012 - "для нагруженных систем используйте анемичную модель данных".
Для высоконагруженных систем использовать нужно Oracle, Postgres. Ну а уж если Cache' вынуждены юзать - то никаких объектов и даже без SQL, только ^G.
Каждый выбирает для себя оптимальный вектор характеристик.....Что для вас высоконагруженная система, можно в цифрах
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38332621
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmovДля высоконагруженных систем использовать нужно Oracle, Postgres. Ну а уж если Cache' вынуждены юзать... толсто
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38333069
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmovКаждый выбирает для себя оптимальный вектор характеристик.....Объекты в нагруженных местах я бы с осторожностью использовал, по крайней мере точно запретить объекты со ссылками, вложенными объектами, массивами.
А какие проблемы с SQL? Если у вас проблемы с производительностью SQL, то что-то вы не то делаете.

Чистое хранение на глобалах слишком негибко, плохо документируется, плохо модифицируется, программа выглядит страшно.
В общем, использовать его стоит в каких-то очень локальных вещах. Если аналог системы изх 200 таблиц вы сделаете чисто на глобалах, то ад при поддержке и развитии почти обеспечен. Разница по скорости между SQL и глобалами обычно не настолько велика, чтобы жертвовать преимуществами SQL. А уж если есть необходимость работать с глобалами (не все SQL делает хорошо), то лучше делать отображение на класс, запихивать методы работы с глобалом в класс. Таким образом можно получить преимущества глобалов не сильно страдая от их недостатков.
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38333191
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Объекты в нагруженных местах я бы с осторожностью использовал, по крайней мере точно запретить объекты со ссылками, вложенными объектами, массивами.
Это, вероятно, про объекты в понимании ООП, а не объектно-ориентированных БД.
Блок А.Н.А какие проблемы с SQL? Если у вас проблемы с производительностью SQL, то что-то вы не то делаете.
При использовании СУБД SQL, практически, бесполезен. Поэтому никаких проблем с ним не может быть, конечно. Но при использовании СХОД проблемы с "реляционной технологией" известны. Это и необходимость в архитектуре "модель верхнего уровня+маппинг+РМД", и неизбежное перманентное программирование...
Блок А.Н.Чистое хранение на глобалах слишком негибко, плохо документируется, плохо модифицируется, программа выглядит страшно.
В любой системе на основе MUMPS осуществляется именно " чистое хранение на глобалах". Нужно по-другому сформулировать.
Блок А.Н....Таким образом можно получить преимущества глобалов не сильно страдая от их недостатков.
Да, обращаться непосредственно к глобалам крайне не желательно (поддержка ОЦ и др. проблемы).
---
Что касается исходного вопроса, раньше считалось, что лучше иметь много "маленьких" глобалов, чем один "большой".
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38334800
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmovЭто решается с помощью объявления индекса с такими же полями в классе-потомке.

Это не решается, это выкручивается. Потому что для оптимизатора SQL получиться два относительно равноправных индекса.
Для академического интереса еще куда ни шло.
На реальных данных более менее приличного объема >2-4Гб - выкручиваться ради "красивого ООП" быстро надоедает.

sigmovПроблема ссылочной целостности.....

Я отвечал только на вопрос о переносе данных.
Ссылочная целостность в вашем случае не решается никак.
И если я не ошибаюсь, средств обхода этой проблемы в вашем сценарии, нет ни в одной СУБД
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38334807
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmov,Хранение идет в глобали базового класса(первого %Persistent), данные относящиеся к потомкам хранятся в subscript'ах той же глобали

Как то вы странно ответили. Как на экзамене ...
Вы понимаете что данное хранение приведет к тому что блокировка какой либо таблицы потомка - может заблокировать таблицы всего семейства ?

В каше, напоминаю, при работе со встроенным SQL, по умолчанию индивидуально блокируются только первые 1000 записей, потом лочиться вся таблица. А блокировка не снимается пока не закрывается до конца последней транзакции.
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38334982
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PtnКак то вы странно ответили. Как на экзамене ...
Вы понимаете что данное хранение приведет к тому что блокировка какой либо таблицы потомка - может заблокировать таблицы всего семейства ?

В каше, напоминаю, при работе со встроенным SQL, по умолчанию индивидуально блокируются только первые 1000 записей, потом лочиться вся таблица. А блокировка не снимается пока не закрывается до конца последней транзакции.

Понимаем. Правда насчет 1000 не уверен, по умолчанию 10к вроде.
Но вообщем %NOLOCK - это наш вечный спутник SELECT и UPDATE )))
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335037
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn1 - Среди этих классов должны будут быть только уникальные индексы, если в классе AA и AB - будет индекс I1 - то компилятор даже не ругнется, а вот когда начнете заполнять данные будет весело. Так же особенно весело когда в потомках нужно завести индексы с разной уникальностью. Уникальность сразу распространяется на потомков.

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

3 - Все данные и индексы потомков первого хранимого класса, будут содержать полное имя класса потомка, то есть каждая запись будет содержать дополнительную текстовую строку на 10-20 символов.

4 - Предположим у вас есть 10E5 записей A, 10E4 записей AА, 10 записей AАА, что бы получить запись ААА, вам, грубо придется промотать 110000 предстояших записей А и АА, если конечно у вас не хватило индекса



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

2 - Эта проблема существовала кажись до 2012 версии - сейчас не парьтесь - да прибудет Интерсистемз с Вами.

3 - ??? о ужас, кошмар!

4 - наследоваться и не делать на наследниках Extent индекса - воплощенное зло.

В общем же скажу аккуратно - пока Вам неудобно (запрещено, неприятно и проч.) делать хранимое наследование, мои приложения будут уделывать ваши и далее. Видел тут широко открытые глаза конкурента: "У Вас что, все документы в одном глобале, это-ж не должно работать???" Мля, это говорил чел, у которого в нескольких классах НИ ОДНОГО ИНДЕКСА НЕТ ваще.
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335520
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptn3 - Все данные и индексы потомков первого хранимого класса, будут содержать полное имя класса потомка, то есть каждая запись будет содержать дополнительную текстовую строку на 10-20 символов. kolesov 3 - ??? о ужас, кошмар!
Типа тест. Создаем две области ( с новыми БД ) и три класса в каждой.
Область №1 - в одной используем общее хранение
Код: vbnet
1.
2.
3.
4.
5.
Class Кто.Любит.Длинные.Имена.Классов Extends (%Persistent, %Populate) {
Property Name As %String;
}
Class Я.Не.Люблю.Длинные.Имена.Классов Extends ( Кто.Любит.Длинные.Имена.Классов ) {}
Class И.Вот.Одна.Из.Причин Extends ( Я.Не.Люблю.Длинные.Имена.Классов) {}


Область №2 - раздельное хранение
Код: vbnet
1.
2.
Class Я.Не.Люблю.Длинные.Имена.Классов Extends (%Persistent, Кто.Любит.Длинные.Имена.Классов ) {}
Class И.Вот.Одна.Из.Причин Extends (%Persistent, Я.Не.Люблю.Длинные.Имена.Классов) {}



В каждой области выполняем Populate(100000) для каждого класса.
Сравниваем размеры баз write $p($zu(49, $zu(12,"") ),",",4)
Для zv 2013.1 Unicode: общее хранение 31мб, раздельное хранение 11мб
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335568
Oleg Olenin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я прошу прощение. Вопрос вроде был такой: Как можно провернуть такую миграцию?

Соответственно вроде как дальше должны были пойти примеры, что-то типа скрипта для посроения INSERT ... SELECT ..., решения вопроса по генерации новых сквозных surrogate pk key и апдейта FK полей.

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

PS Немного огня ))) Наследование - зло. Наследование в хранимых классах в Cache - зло в кубе.
Со злом надо осторожно - так же, как и с добром. В меру.

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

Может он делает злую систему? )))
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335631
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg OleninКазалось бы, при чем тут наследование? Можно конечно спросить, в чем причина смены архитектуры хранения - но либо я не заметил, либо никто не спросил.sigmovТ.е. все они храняться в разных глобалах, ID везде по-умолчанию икрементальные.
Довольно беспонтово получилось.....
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335724
Oleg Olenin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servitOleg OleninКазалось бы, при чем тут наследование? Можно конечно спросить, в чем причина смены архитектуры хранения - но либо я не заметил, либо никто не спросил.sigmovТ.е. все они храняться в разных глобалах, ID везде по-умолчанию икрементальные.
Довольно беспонтово получилось.....

Причина - понты?
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335756
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg OleninPS Немного огня ))) Наследование - зло
Ага ;)
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335769
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg OleninПричина - понты?Я чего-то другого пока не вижу.
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335784
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov,Видел тут широко открытые глаза конкурента: "У Вас что, все документы в одном глобале, это-ж не должно работать???"

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

И да, несмотря на то что это действительно работает, выполнено поверх стандартных классов каше данный подход не несет перед собой каких либо особых преимуществ.
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335818
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,В каждой области выполняем Populate(100000) для каждого класса.

Это у вас еще по сути нет ни одного индекса, кроме экстента :)
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335844
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtnМы уже не храним все документы в одном глобале.
Мы тоже, вначале хранили, потом не хранили, теперь снова храним. Догоняйте! Во всех смыслах ;)

Трудно спорить с аргументами типа "А я с мамой в баню хожу!" или "А зато мой брат бросит твоего брата через во-он тот забор!".

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

Собственно сюда написал только в качестве поддержки ТС, которого, как мне показалось, попытались отговорить от вполне разумного и эффективного шага.
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335846
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmovПонимаем. Правда насчет 1000 не уверен, по умолчанию 10к вроде.

http://docs.intersystems.com/cache20131/csp/docbook/DocBook.UI.Page.cls?KEY=RCPF_LockThreshold
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335854
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov,Собственно сюда написал только в качестве поддержки ТС, которого, как мне показалось, попытались отговорить от вполне разумного и эффективного шага.

Что этот шаг стал разумным и эффективным, ТС нужно постараться разобраться как это работает. Что дает, и что отнимает.

А не бездумно наследовать, и радоваться сквозным SQL запросам
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38335919
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn Что дает, и что отнимает.
Нет. Ну я понимаю, почему я не готов пояснить, что и как дает. А вот почему вы не готовы пояснить, что отнимает?

За исключением тех 4-х смешных пунктов (которые я безответно оспорил), пока ничего выжать не смогли.

Даже с демагогично-максималистской поддержкой Оленина.

PtnА не бездумно наследовать, и радоваться сквозным SQL запросам
Гыгыгы ;)

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

В этом смысле Ваше " уже не храним" выглядит как "да вы его не бойтесь - оскопили его прошлою весною".

Только сейчас обратил внимание - ТС из Владивостока. ТС! Наймите, сделаю-расскажу-настрою. Летать будет аки "Протон" ;)
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38336119
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovЯ лично работаю от модели предметной области. И в ней все документы, к примеру, раз уж зашло, имеют одного(!) родителя
По документам считаете что-нибудь? Есть ли у документов строки (товарные, например)?
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38336197
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg OleninНаследование - зло.Забавно слышать такое от консультанта по объектно-ориентированной СУБД... Олег, если захотите аргументировать эту "лемму", думаю, многим будет интересно.
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38336207
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я хоть и не Олег.
Наследование - это усложнение, появление новых взаимозависимостей.
При одинаковой трудоемкости и функциональности решение без наследования будет чище и проще.
Соотвественно, наследование это зло. И для его применения нужны обоснования.
В первую очередь это относится к людям, которых хлебом не корми - дай чего-нибудь понаследовать. Объектно-ориентированная среда же, как без наследования то?

Это как сказать, что автомобиль - зло. Требует времени, денег, опасен. И для его приобретения нужно веские основания.
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38336251
Oleg Olenin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда так:

Disclaimer. Все записи сделанные мной в этом форуме являются моим частным мнением и никак не связаны с моими работодателями (бывшими, текущими и будущими).

Ok ))). Начнем с того, что Cache - не объектно-ориентированная СУБД в моем представлении. Это и не важно в общем, как ее назвать.
Просто в этой ветке идет сплошная подмена - сначала люди начинают зарубаться не по тому вопросу, по которому спрашивали. Сейчас отчего то считают, что объектная ориентированность = наследование. И дальше идет подмена смысла - если в названии есть объектно-ориентированная, значит наследование это гуд. Ответьте человеку на его вопрос, диалектики материализма! ))))
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38336252
Oleg Olenin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolesov,

По-моему и не демагогическая и не максималистическая - ответьте лучше автору threadа на вопрос ))))
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38336254
D_De1mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В тему наследования:

Раз применил (больше пока потребности не возникало) следующую схему
Постановка задачи: Хранение в системе бизнес-документов одного типа, но с разными доп полями в зависимости от вида, которых изначально было порядка 7-8.
Варианты:
1. Делать отдельные таблицы для каждого - не вариант, т.к. пользователю их надо было показывать разом в виде списка.
2. Отнаследовать их друг от друга - вариант, но тогда таблица будет разрастаться дополнительными полями, что соответственно скажется на скорости + вариант не очень подходил, т.к. вид документа мог поменяться после создания самого документа
Решил сделать третий вариант:
1. Выделил поля, которые будут показаны пользователю при выводе списка документов (т.е. поля общие для всех видов), из них сделал хранимый общий класс
2. Сделал хранимый базовый класс для расширений, и ссылку из него на общий класс
3. Сделал иерархию наследования для всех видов документов с их доп полями.

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

Через пару недель коллеге потребовалось реализовать очень похожую задачу, в которой бизнес-документы были практически идентичными, но все же отдельными:
1. Добавили один признак в общий класс, разделяющий старые и новые документы
2. Добавили в иерархию наследования соответствующие расширения

ЗЫ обычным наследованием хранимых классов тоже пользуемся, но с осторожностью и только там, где оно действительно нужно

По теме слияния
Ради понтов это делать не стоит, т.к. в дальнейшем могут появиться новые проблемы, например, в наследовании хранимых классов при существующей базе не так тривиально перенести поле в базовый/дочерний класс или поддержка уникальности индексов.
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38336380
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_De1mosРешил сделать третий вариант:
1. Выделил поля, которые будут показаны пользователю при выводе списка документов (т.е. поля общие для всех видов), из них сделал хранимый общий класс
2. Сделал хранимый базовый класс для расширений, и ссылку из него на общий класс
3. Сделал иерархию наследования для всех видов документов с их доп полями.
Пока смысла в пп. 1 и 3 не наблюдается. Почему не один тип сущности?
D_De1mosВ итоге получилось:
При запросе списка документов - используется легкая версия глобала данных
При запросе отдельного документа - подцепляются все нужные доп поля
То есть, смысл - получить "легкую версию глобала"? Вы эксперименты какие-то проводили?
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38336804
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintПо документам считаете что-нибудь? Есть ли у документов строки (товарные, например)?
Атож!!!
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38336818
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОленинНаследование - зло.
БлокЯ хоть и не Олег. Наследование - это усложнение.
Ага, однополые браки и усыновление детей пи..рами. Это-ж нормально. И просто. Зачем тратить калории на наследников) Наследование устарело - чего уж там...
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38336823
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg OleninOk ))). Начнем с того, что Cache - не объектно-ориентированная СУБД в моем представлении. Это и не важно в общем, как ее назвать.
Просто в этой ветке идет сплошная подмена - сначала люди начинают зарубаться не по тому вопросу, по которому спрашивали. Сейчас отчего то считают, что объектная ориентированность = наследование. И дальше идет подмена смысла - если в названии есть объектно-ориентированная, значит наследование это гуд. Ответьте человеку на его вопрос, диалектики материализма! ))))
Папа, это ты с кем сейчас разговаривал???
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38336833
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Я хоть и не Олег. ... Это как сказать, что автомобиль - зло. Требует времени, денег, опасен. И для его приобретения нужно веские основания.
Приятно ощущать себя истинным драйвером в компании кучеров. Шутка ;)
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38337441
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtnВ каше, напоминаю, при работе со встроенным SQL, по умолчанию индивидуально блокируются только первые 1000 записей, потом лочиться вся таблица. А блокировка не снимается пока не закрывается до конца последней транзакции.kolesovЛетать будет аки "Протон" ;) Продолжим, опять три класса и две базы. Наследование чуть упростил: a <-aa и a <-aa2. Заполняю 100 тысячами только наследники: aa и aa2. Метод %PopulateUtils.Name() сделал хранимой процедурой.
Базовый одинаковый для двух баз:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Class test.a Extends (%Persistent, %Populate) {

Property Name As %String;

ClassMethod TestUpdate() {
    JOB ..Update("test.aa") JOB ..Update("test.aa2")
}

ClassMethod Update(table As %String = "test.aa") {
 s sql="Update "_table_" Set Name=%Library.PopulateUtils_Name()"
 s start=$zh
 s rs=##class(%SQL.Statement).%ExecDirect(.stm,sql)
 s ^mtemp(table)=$zh-start_";"_rs.%SQLCODE
 w rs.%SQLCODE
}

} 


На базе с раздельным хранением
Код: vbnet
1.
2.
3.
4.
d ##class(test.a).TestUpdate()
zw ^mtemp
^mtemp("test.aa")="4.767655;0"
^mtemp("test.aa2")="4.773939;0"


На базе с общим хранением
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
d ##class(test.a).TestUpdate()
zw ^mtemp
^mtemp("test.aa")="10.237431;-110"
^mtemp("test.aa2")="10.189507;-110"

w $system.SQL.SQLCODE(-110)
Конфликт блокировок при обращении к файлам
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38337517
Oleg Olenin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolesovOleg OleninOk ))). Начнем с того, что Cache - не объектно-ориентированная СУБД в моем представлении. Это и не важно в общем, как ее назвать.
Просто в этой ветке идет сплошная подмена - сначала люди начинают зарубаться не по тому вопросу, по которому спрашивали. Сейчас отчего то считают, что объектная ориентированность = наследование. И дальше идет подмена смысла - если в названии есть объектно-ориентированная, значит наследование это гуд. Ответьте человеку на его вопрос, диалектики материализма! ))))
Папа, это ты с кем сейчас разговаривал???

С вами в том числе, сын мой ))). Давайте подробней о том, как вы эффективно используете наследование. Это будет более интересно, чем треп на общие темы генетики в пятницу. Эх, когда же меня на одну из исторических родин в командировку направят. Или вас к нам )))
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38338090
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefints sql="Update "_table_" Set Name=%Library.PopulateUtils_Name()"
А дихлофосом не пробовали???
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38338131
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov, а это как-то повлияет на результат?
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38338562
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg OleninДавайте подробней о том, как вы эффективно используете наследование.
Видно про это мы так и не услышим... И примеров того не увидим...
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38338581
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintkolesov, а это как-то повлияет на результат?
У вас каждый пользователь раз в надцать минут апдейтит миллионы записей?
Видимо дело в специфике - я производством занимаюсь.
И за команду UPDATE вообще изредка готов придушить - по-дефолту она у нас запрещена. Для сохранения, изменения данных - извольте использовать объекты и %Save() - остальное только после консилиума (или на другом месте работы). Бывает, нужен UPDATE, но не в рамках обслуживания домена - это команда для "прислуги" (истории изменений, события и проч.)
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38338586
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaOleg OleninДавайте подробней о том, как вы эффективно используете наследование.
Видно про это мы так и не услышим... И примеров того не увидим...
Биологические идеи, положенные в основу ООП, а, следовательно, и само ООП не имеют никакого отношения к базам данных. Это я объяснял с примерами на конференции по MUMPS в Подмосковье лет 10 назад, если не больше. Программирование завода-автомата (когда роботы обмениваются сообщениями) - вот там, вероятно, эти принципы можно использовать. Так что ООП так же, как и SQL, нет смысла использовать при программировании приложений БД, за исключением задач организации интерфейса (например, окно можно рассматривать, как объект, со всеми этими принципами, включая наследование).
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38338593
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaOleg OleninДавайте подробней о том, как вы эффективно используете наследование.
Видно про это мы так и не услышим... И примеров того не увидим...
Искренне не готов ответить. Дело не в примерах.

Мои познания в философии и методологии довольно ограниченны и сводятся к системомыследеятельностному подходу Г.П.Щедровицкого. Эксперт в рамках этого подхода - позиция, не требующая обоснования. Её нужно просто занять . Взгляните на высказывания Олега Оленина - он, как и я, занимает позицию эксперта ("зло, и всё тут!" - безапелляционно, значит эксперт!). Однако, в отличие от него, хранимое наследование для меня не аспект, не тема для обсуждения и не инструмент. Для меня это уже несколько лет измерение проектирования.

У тех же методологов (или не у них, могу ошибаться) есть известная байка про плоских рыб в плоском мире, которые никак не могли понять феномена выпуклости.

Любая попытка презентовать им еще одно измерение мира обречена. Ситуация должна изменяться изнутри. Например, должны появится студенты, никогда не использовавшие SQL (это очень грубо, но у меня и времени немного - тут пинг в 3 секунды и связь раз в сутки).

Надеюсь, ближе к концу лета появится время и я таки выложу свое представление о хранимом наследовании на хабре. Выложу, повторюсь, понимая, что это бесполезно и только карму испортит ;)
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38338645
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovВзгляните на высказывания Олега Оленина - он, как и я, занимает позицию эксперта ("зло, и всё тут!" - безапелляционно, значит эксперт!).
Мне ненравятся ваши "занимаемые позиции"...

Мне импонирует подход от doublefint . Он приводит примеры где явный проигрыш наследования. Причем он просит привести аналогичные примеры где будет выигрыш от наследования.
Мне все это так же интересно, но ничего "пощупать" так и не дают...

Вместо этого предлагают:
- просто занять позицию
- просто отказаться от ОПП и SQL в разработке БД
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38338649
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa... Вместо этого предлагают:
- просто отказаться от ОПП и SQL в разработке БД
А Вы просто говорите неправду. Что, конечно, тоже позиция. Непоколебимая))
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38338805
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaОн приводит примеры где явный проигрыш наследования. Причем он просит привести аналогичные примеры где будет выигрыш от наследования.
Он занимается демагогией, даже если сам этого не понимает - "Подходит ли вертолет для прыжков с трамплина? Нет, что Вы, здесь гораздо более удобны ЛЫЖИ!!! И за примером ходить далеко не нужно - я вот только что спустил вертолет с трамплина - не впечатлило, мягко говоря. Лыжи и только лыжи - всё остальное зло!"

Абалденная логика. И что тут привести в качестве противоположного примера? Вертолет на для трамплина, да. Апдейтить сотни тысяч записей за-раз Вы считаете нормальной ситуацией прикладной задачи? Вот я и молчу. В меру сил ;)
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38338906
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovИ что тут привести в качестве противоположного примера?
То, что явно лучше разделеной БД. Это вроде очевидное решение... Что именно решать тебе. Ведь это ты пишешь про какое-то превосходство наследования...

Мне например это было бы очень полезно в познавательном смысле...
Например я мог бы аргументировано, на примерах показать тут де плюс... А вот тут минус...
Про минусы я уже знаю, а вт с плюсами пока проблемы... Нет информации по ним...
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38338909
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и в тему "слияния в один глобал"...

В бытность еще версии Каше 3.* все (!) представители ИС, которые у нас были лично, утверждали, что 1 класс - 1 глобал это гораздо эффективнее нежели "несколько классов в одном глобале"...
Я взял это для себя как аксиому...
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38338912
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovАпдейтить сотни тысяч записей за-раз Вы считаете нормальной ситуацией прикладной задачи?
Почем мне знать у кого какие задачи...

От тебя просто жду других примеров, в которых будет выигрыш за счет наследования...
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38339596
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov У вас каждый пользователь раз в надцать минут апдейтит миллионы записей?
Наследуемое хранение имеет свои особенности. Странно их совсем не учитывать.
Из удобств - легкий код, например:
set doc=##class(document).%OpenId(id) ;открываем документ любого типа
и сквозные запросы (опять особенности)
За эти удобства придется гореть в аду заплатить.
Итого OLTP приложение c объектным доступом на запись, и SQL на чтение

Граф Монтекристо (весь в белом) kolesov, что несчастный кучер я упустил?
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38339687
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaНу и в тему "слияния в один глобал"...

В бытность еще версии Каше 3.* все (!) представители ИС, которые у нас были лично, утверждали, что 1 класс - 1 глобал это гораздо эффективнее нежели "несколько классов в одном глобале"...
Я взял это для себя как аксиому...
Под "раньше" здесь
14574357
понимается 30 лет назад. Значит все стабильно))
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38341069
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintИтого OLTP приложение c объектным доступом на запись, и SQL на чтение

Граф Монтекристо (весь в белом) kolesov, что несчастный кучер я упустил?
Погуглите про OLTP пожалуйста. Может хотя бы это поможет Вам остыть.
Я не срал на критиковал Ваше ДАО. Я возмутился лишь безапелляционной критике одной из основ моего ;)
Повторюсь - я лишь пытался пояснить ТС (и окружающим), что Ваша критика безответственна и необоснованна.
И пора бы это признать - внятных аргументов в пользу абасрацца экспертной аценки аксиомы "Рекомендация Олега Оленина со Школы 2012 - "для нагруженных систем используйте анемичную модель данных" не то что не видно - ими даже не пахнет.
А я сегодня в оранжевом, кстати.
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38341409
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov, с вас же тестовый случай не вытянуть, надо ж определиться, что тестировать будем. Ситуация проясняется - у вас OLTP приложение с небольшим количеством пользователей, без крупных транзакций, доступ в основном через объекты.
kolesovПовторюсь - я лишь пытался пояснить ТС (и окружающим), что Ваша критика безответственна и необоснованна Накладные расходы на наследуемое хранение объективно присутствуют. Учитывать их или нет - зависит от критериев оценки.
Какие достоинства наследуемого хранения важны для вашего ДАО?
...
Рейтинг: 0 / 0
Слияние классов в одну глобаль
    #38341420
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про OLTP не прав, прикладное приложение
...
Рейтинг: 0 / 0
58 сообщений из 58, показаны все 3 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Слияние классов в одну глобаль
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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