Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 89
DAiMor,

Number уникален только в пределах одного конечного класса. Объект типа Tiger идентифицируется Number-ом, но если какой-то другой объект, Event Log например, ссылается на базовый класс Animal, то одного Number уже не достаточно.

>А индекс по Classname достигается через Extent индекс, его хватит чтобы sql запросы не перебирали все объекты classA
Да, но Extent индекс нужно будет завести для каждого конечного класса. В чем нет необходимости, если Classname будет содержаться в Primary Key
18 сен 18, 09:03    [21677620]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 934
DAiMor
... Только этот индекс не поможет в SQL запросе ...
Так аlatalo и не просил этого, в его спецификации таких требований нет

alatalo
... что classname (a.k.a x__classname, %%CLASSNAME) ...
Третий раз повторяю, обратите наконец внимание: classname '= x__classname!!!
classname - имя текущего класса, например "alatalo.baseB"
x__classname - ЦЕПОЧКА НАСЛЕДОВАНИЯ, например "~alatalo.baseA~alatalo.baseB~", служебное поле Cache, используется в системном методе %IsA
18 сен 18, 14:20    [21678168]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
alatalo
Да, именно так. Собственно весь вопрос этой темы в том, можно ли сообщить Каше, что classname (a.k.a x__classname, %%CLASSNAME) хранится в Primary Key. Таким образом, Primary Key будет одновременно и Extent индексом.
Такое не получится сделать, да и смысл так делать пока все равно не ясен.
18 сен 18, 15:04    [21678241]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 89
doublefint,

>Третий раз повторяю...
Честно сказать, вы могли бы и в превый раз этого не говорить.

Мы не собираемся писать то, что я здесь называю classname, в Primary Index сами. Речь в этой теме про то, каким образом (и возможно ли это в принципе), сообщить Каше, что та "ЦЕПОЧКА НАСЛЕДОВАНИЯ", которую он подефолту пишет здесь:

Storage Default
{
<Value name="1">
<Value>%%CLASSNAME</Value>
...

находится в первом сабскрипте Primary Index.

Если это возможно, то 'select * from classB' может обойтись без перебора всей таблицы даже без Extent индекса
18 сен 18, 16:11    [21678358]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 89
DAiMor,

> да и смысл так делать пока все равно не ясен
смотри, у тебя 120 производных класса, зачем заводить 120 Extent индексов, если их роль может выполнить Primary Key?
18 сен 18, 16:18    [21678363]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 934
alatalo
... могли бы и в превый раз этого не говорить...
4. Цепочка наследования - служебное поле. Т.е предназначено и используется производителем СУБД в его собственных целях ( ..%IsA ), невидимое для большиства подсистем. Его нельзя указать в качестве свойства при определении индекса. :)
alatalo
%%CLASSNAME ...находится в первом сабскрипте ...
Нет, %%CLASSNAME находится в первой позиции $lb().
Хранение по умолчанию ( Cache Storage ) хранит данные в формате ^package.classD(ID)=$lb(%%CLASNAME, props...).
Соответственно, реализация вашей идеи приведет к полному сканированию глобали.
18 сен 18, 22:21    [21678822]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 89
doublefint,

>...Его нельзя указать в качестве свойства при определении индекса
очень возможно что нельзя, но я не вижу принципиальных препятсвий почему "служебное поле предназначенное и используемое производителем СУБД в его собственных целях ( ..%IsA ), невидимое для большиства подсистем" может использоваться при определении хранения (%%CLASSNAME), но не может использоваться в индексе: его значение не меняется и известно на момент первой записи в базу.

>Нет, %%CLASSNAME находится в первой позиции $lb().
вы меня неправильно поняли: он там находится по умолчанию, но я хочу его в первый сабскрипт индекса

>Соответственно, реализация вашей идеи приведет к полному сканированию глобали
в каком сценарии?
19 сен 18, 10:54    [21679166]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 934
alatalo
но я не вижу принципиальных препятствий
Навскидку - совместимость и универсальность.
alatalo
но я хочу его в первый сабскрипт индекса
Если вам нужно другое поведение, то вы или заказываете его у производителя, или реализуете самостоятельно с помощью предоставленных производителем возможностей - собственные поля, индексы или альтернативные схемы хранения
alatalo
в каком сценарии?
В сценарии со схемой хранения, когда цепочка наследования ( 5. которая не эквивалентна имени класса ) находится в первом ключе или в первой позиции глобали
19 сен 18, 16:25    [21679789]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 89
doublefint,

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

>Если вам нужно другое поведение, то вы или заказываете его у производителя, или реализуете самостоятельно с помощью предоставленных производителем возможностей
да ну?! еще один совершенно бесценный совет :)

>В сценарии со схемой хранения, когда цепочка наследования ( 5. которая не эквивалентна имени класса ) находится в первом ключе или в первой позиции глобали
в каком сценарии (поиск объекта, чтение его полей etc) копия classname в индексе приведет к какому-либо дополнительному "сканированию глобали"?
19 сен 18, 18:32    [21679957]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 934
alatalo
возможность писать classname еще и в индекс помимо его обычного места, ни на что из перечисленного не влияет
6. classname не тоже самое, что и %%CLASSNAME
Предполагаемую глубину наследования вы не оговаривали.
Можете дать свою оценку размера строки ( цепочки наследования ), которую надо поместить как в индекс, так и в данные?
alatalo
да ну?!
Не благодарите. Наносить добро, причинять пользу :) Так какой путь выбираете - самостоятельно или в WRC?
alatalo
в каком сценарии копия classname в индексе приведет к какому-либо дополнительному "сканированию глобали"?
7. %%CLASSNAME сборная строка с именами классов, т.е промежуточная информация, которую еще нужно обработать.
Поэтому в любом, в котором будет необходимость использовать такой индекс ( за исключением, пожалуй, запроса "найди все id, с такой же цепочкой наследования" )
20 сен 18, 02:18    [21680212]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 89
doublefint,

>classname не тоже самое, что и %%CLASSNAME
в этой теме classname=%%CLASSNAME=цепочка наследования

>Можете дать свою оценку размера строки ( цепочки наследования ), которую надо поместить как в индекс, так и в данные?
нет здесь никакой проблемы: если помещается в $lb(%%CLASSNAME, ...) то поместится и в индекс

>Так какой путь выбираете - самостоятельно или в WRC?
вне темы

> запроса "найди все id, с такой же цепочкой наследования"
это единственный вид запроса, который меня интересует. Но даже если нужно искать инстансы промежуточного класса, этот индекс можно использоваться не менее эффективно
20 сен 18, 08:04    [21680259]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 934
alatalo
... в этой теме classname=%%CLASSNAME=цепочка наследования ...
давайте тогда называть его classeslist, что бы все таки отличать.
alatalo
нет здесь никакой проблемы: если помещается в $lb(%%CLASSNAME, ...) то поместится и в индекс
Уверены?
alatalo
Но даже если нужно искать инстансы промежуточного класса, этот индекс можно использоваться не менее эффективно
Приведете пример кода для function( classeslist, classname ){}?
20 сен 18, 09:25    [21680311]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 89
doublefint,

>давайте тогда называть его classeslist, что бы все таки отличать
в этой теме я назыаю его classname

>Уверены?
Если вы можете записать ^a=$lb(classname, ...), то в чем проблема записать ^b=classname?

>Приведете пример кода для function( classeslist, classname ){}?
classnamePrev=classname-1 ; условно, формируем предыдущее значение classname
перебираем индекс ордером начиная с classnamePrev пока строка начинается с classname
20 сен 18, 10:02    [21680354]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 934
alatalo
... в чем проблема записать ^b=classname? ...
alatalo
... но я хочу его в первый сабскрипт индекса ...
???
Приведите, пожалуйста, пример того, как вашему мнению, должна выглядеть индексная глобаль?

alatalo
перебираем индекс ордером начиная с classnamePrev пока строка начинается с classname
alatalo
... Но даже если нужно искать инстансы промежуточного класса ... не менее эффективно
???
20 сен 18, 10:57    [21680444]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
alatalo
Member

Откуда: Хельсинки
Сообщений: 89
doublefint,

>Приведите, пожалуйста, пример того, как вашему мнению, должна выглядеть индексная глобаль?
как уже многократно повторялось: ^data(classname,number)=data ; $lb(classname,...)

>??
да, первым ордером попадаем сразу на первый промежуточный класс. Последущие перебираем до тех пор, пока classname начинается с искомой строки. Минимальные издержки, даже не учитывая, что в реальной системе очень ограниченное число классов
24 сен 18, 15:18    [21684183]     Ответить | Цитировать Сообщить модератору
 Re: Индекс на x__classname  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 934
alatalo,
+ classname еще и в индекс
ClassMethod test(){

	s inheritance = $lb(
		"Class.can.be.subclassed.to.a.depth.of50.but.not.further",
		"The.full.name.of.class.member.including.the.full.class.name.must.be.less.than.or.equal.to220.characters",
		"The.total.length.of.a.global.reference.is.limited.to511.encoded.characters",
		"If.you.must.have.long.subscript.or.global.names",
		"it.is.helpful.to.avoid.a.large.number.of.subscript.levels",
		"If.you.are.using.multiple.subscript.levels",
		"avoid.long.global.names.and.long.subscripts",
		"Because.you.may.not.be.able.to.control.the.character.sets.you.are.using",
		"it.is.useful.to.keep.global.names.and.subscripts.shorter"
	)
	#define isOk( %bool ) $case( %bool, 1:"OK. ",:"FAIL. " )
	s pointer = 0, class = "", ok = 1
	while $listnext( inheritance, pointer, class ){
		s valid = $system.OBJ.IsValidClassname( class )
		w !, $$$isOk( valid ), class
		s ok = ok && valid
	}
	
	w !, "Classes: ", $$$isOk( ok )
	s depth = $ll( inheritance ) w !, "Depth: ", depth
	s classes = "~" _ $lts( inheritance, "~" )_ "~" w !,"Length: ", $l( classes )
	s test = 1
	
	try {
		s data = $lb( classes, "нет здесь никакой проблемы", "точно не с совместимостью и универсальностью" )
		s ^alatolo.has.idea(classes, 1) = data
	} catch e {
		zw e s test = 0	
	}
	Q test
}
2 окт 18, 16:53    [21692994]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить