powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / select для производного класса
25 сообщений из 65, страница 1 из 3
select для производного класса
    #39698758
alatalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Класс classB произведен от класса classA как показано ниже. Как "select * from classB" находит объекты класса classB? Никакого индекса по имени класса нет, перебором все объектов в таблице classA?

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Class User.classA Extends %Persistent
{
	Storage Default
	{
	<Data name="classADefaultData">
	<Value name="1">
	<Value>%%CLASSNAME</Value>
	</Value>
	</Data>
	<DataLocation>^User.classAD</DataLocation>
	<DefaultData>classADefaultData</DefaultData>
	<IdLocation>^User.classAD</IdLocation>
	<IndexLocation>^User.classAI</IndexLocation>
	<StreamLocation>^User.classAS</StreamLocation>
	<Type>%Library.CacheStorage</Type>
	}
}


Class User.classB Extends classA
{
	Storage Default
	{
	<Type>%Library.CacheStorage</Type>
	}
}
...
Рейтинг: 0 / 0
select для производного класса
    #39699007
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alatalo,

да, перебирая все объекты. И проверяет класс в хранении.
...
Рейтинг: 0 / 0
select для производного класса
    #39699268
alatalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но ведь тогда, без дополнительных индексов по типу, все это имеет сомнительную пременимость поскольку будет серьезно подтормаживать при большом колве записей
...
Рейтинг: 0 / 0
select для производного класса
    #39699323
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alatalo,

Если не складывать все объекты в одну глобаль то делать select * from ClassA будет невозможно.

Можно класс А сделать абстрактным, тогда объекты подклассов будут попадать в отдельные глобали

Для ускорения поиска по подклассу можно создать extent индекс https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=ROBJ_index_extent
...
Рейтинг: 0 / 0
select для производного класса
    #39699410
alatalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logist,

про extent не знал, спасибо. Что интересно, Каше его использует только в запросе "select %ID from classB", "select *" предпочитает перебирать все.

А про Abstract не понял. По крайней мере, побавление [Abstact] в декларацию classA ничего не меняет. Storage каждому подклассу свой делать нужно?
...
Рейтинг: 0 / 0
select для производного класса
    #39699422
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alataloА про Abstract не понял. По крайней мере, побавление [Abstact] в декларацию classA ничего не меняет. Storage каждому подклассу свой делать нужно?
Тут кагбэ нужно понять какую цель ты преследуешь так изворачиваясь с классами... Тогда можно было бы предложить путнее решение пока ты не вырыл подземный ход на чердак.
...
Рейтинг: 0 / 0
select для производного класса
    #39699648
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alatalo,

Если наследованный класс будет в первую очередь наследоваться от %Persistent, то у него автоматически свое хранилище создастся.
...
Рейтинг: 0 / 0
select для производного класса
    #39700151
alatalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

logist предложил два решения проблемы перебора все таблицы. С extent-ом все понятно, про Abstract - нет
...
Рейтинг: 0 / 0
select для производного класса
    #39700152
alatalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

да, это понятно
...
Рейтинг: 0 / 0
select для производного класса
    #39700241
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alatalo , повторюсь, без знания твоей проблемы нет проку что-либо советовать...
Но ты делаешь явно не то.
...
Рейтинг: 0 / 0
select для производного класса
    #39700302
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alatalokrvsa,

logist предложил два решения проблемы перебора все таблицы. С extent-ом все понятно, про Abstract - нетНу с abstract все примерно так же, как с первичным наследованием от %Persistent. По идее (емнип), у абстрактного класса не создается хранилище, а значит, у каждого наследованного класса он будет свой). Но это поломает возможность селекта по базовому классу, что вас не устраивает.
Вообще, я бы 10 раз подумал перед тем, как делать единое хранилище для всех классов. Нужно будет намного аккуратнее продумывать индексы и запросы, чтобы работа с ними не просадила быстродействие.
...
Рейтинг: 0 / 0
select для производного класса
    #39700829
alatalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

по дефолту "select * from classB" будет перебирать всю таблицу что не оптимально. Варианта решения два, индекс по контенту или под-классы пишут в отдельные глобали. Вопрос как организовать второй вариант.
...
Рейтинг: 0 / 0
select для производного класса
    #39700833
alatalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

>По идее (емнип), у абстрактного класса не создается хранилище
Я попробовал, abstract не меняет вообще ничего в плане хранилища
...
Рейтинг: 0 / 0
select для производного класса
    #39701239
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alatalo , спрошу по другому... Что ты хранить собрался в тех классах?

Нужно не проблему решать, а ее не создавать вовсе.
...
Рейтинг: 0 / 0
select для производного класса
    #39701614
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alatalo, возможно это поможет
...
Рейтинг: 0 / 0
select для производного класса
    #39701932
alatalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa,

смотри на это как на абстракную задачу: есть производный класс, нужно сделать select по нему быстрым
...
Рейтинг: 0 / 0
select для производного класса
    #39701942
alatalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,

чуть в сторону:

>Если не закрывать открытый объект ( kill, не %Close()! ), то да - рано или поздно Cache "встанет".
это почему так? Разве каше не должен закрыть объект после того, как умрет последняя ссылка на него?
...
Рейтинг: 0 / 0
select для производного класса
    #39702454
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alataloсмотри на это как на абстракную задачу: есть производный класс, нужно сделать select по нему быстрым
На задачи по оптимизации не стоит смотреть абстрактно.
Вся оптимизация строится именно на конкретике.

Не хочешь объяснять проблему - твое дело... Тебе с этим мурыжиться.
...
Рейтинг: 0 / 0
select для производного класса
    #39702600
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alatalodoublefint,

чуть в сторону:

>Если не закрывать открытый объект ( kill, не %Close()! ), то да - рано или поздно Cache "встанет".
это почему так? Разве каше не должен закрыть объект после того, как умрет последняя ссылка на него?
Эм.. Это сильно в сторону и не ко мне
...
Рейтинг: 0 / 0
select для производного класса
    #39702620
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alatalo>Если не закрывать открытый объект ( kill, не %Close()! ), то да - рано или поздно Cache "встанет".
это почему так? Разве каше не должен закрыть объект после того, как умрет последняя ссылка на него?
Ты посмотри на даты тех сообщений. Это было почти 8 лет назад. И нет примера как такового, который "опустит" сервер на "миллионах записей".
Меня лично заверяли, что методы %Close() устарели и ничего не делают. Де нужно использовать именно kill. Что я и сделал...
Никаких "зависаний" не происходило. Хотя конвертировались данные областного значения, переводил с dbf-файлов на классы.
...
Рейтинг: 0 / 0
select для производного класса
    #39702785
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alatalo, если пройти по цепочке наследования вверх от %Persistent до %Library.SystemBase, то в документации ( Cache 2017.2 ) к его методу %Close() [Final, Internal] можно прочитать:
"This method is deprecated because we now reference count objects automatically so there is no need to call this method. It is a no-op and just returns success %Status code."
Похоже, приведенная вами цитата, начиная с какой то версии, утратила актуальность.
...
Рейтинг: 0 / 0
select для производного класса
    #39705344
logist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alatalo,


alataloБлок А.Н.,

>По идее (емнип), у абстрактного класса не создается хранилище
Я попробовал, abstract не меняет вообще ничего в плане хранилища

Да, в какой то из версий слегка поменялось, нужно еще ClassType снять.

Теперь нужно как то так делать:

Код: sql
1.
2.
3.
4.
5.
6.
Class User.A Extends %Persistent [Abstract, ClassType=""]
{

Property A As %String;

}




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Class User.B Extends User.A [ClassType = persistent]
{

Property AAA As %String;

Storage Default
{
<Data name="BDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>A</Value>
</Value>
<Value name="3">
<Value>AAA</Value>
</Value>
</Data>
<DataLocation>^User.BD</DataLocation>
<DefaultData>BDefaultData</DefaultData>
<IdLocation>^User.BD</IdLocation>
<IndexLocation>^User.BI</IndexLocation>
<StreamLocation>^User.BS</StreamLocation>
<Type>%Library.CacheStorage</Type>
}

}
...
Рейтинг: 0 / 0
select для производного класса
    #39714279
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logistalatalo,

Да, в какой то из версий слегка поменялось, нужно еще ClassType снять.
Теперь нужно как то так делать:



Не "теперь", а при первой(!) возможности - бережет массу сил и времени.
Визг про " все в одной глобали " - он от профанов идет.
Наследование хранимых - часть хорошей архитектуры... если Каше, конечно ;)
(эх, было бы наследование таблиц в MySQL...)
...
Рейтинг: 0 / 0
select для производного класса
    #39714528
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesovНаследование хранимых - часть хорошей архитектуры... если Каше, конечно ;)
"Favor object composition over class inheritance” the Gang of Four
"Subclasses are dependent on the implementation and entire hierarchy of the parent class: the tightest form of coupling available in OO design "
...
Рейтинг: 0 / 0
select для производного класса
    #39714534
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov было бы наследование таблиц в MySQL... Есть в PostgreSQL
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 1 из 3
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / select для производного класса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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