Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 15 16 17 18 19 20 [21] 22 23 24   вперед  Ctrl
 Re: СУБД CACHE'  [new]
Андрей Леонидович
Guest
Странная картина получается. Интуитивно я это чувствовал, но не ожидал, что так легко получится (сам, значит, тоже мало раз классиков перечитывал)...

Все время твердили миру, что есть, собственно, только одна модель данных - реляционная. Потому что она, якобы, хорошо формализована. И вдруг, почти само собой, выяснилось, что никакой реляционной модели данных не существует (наконец-то, это уже НЕ Я СКАЗАЛ).

А существует КЛАСС РЕЛЯЦИОННЫХ МОДЕЛЕЙ с какими-то общими принципами, каждая из которых в какой-то степени формализована ее, часто неизвестным (?), автором (авторами). Нельзя исключать, что есть очень хорошо формализованная модель этого класса.

Точно так же, как существует КЛАСС ОБЪЕКТНЫХ МОДЕЛЕЙ с какими-то общими принципами, каждая из которых в какой-то степени формализована ее, часто неизвестным (?), автором (авторами). Нельзя исключать, что есть очень хорошо формализованная модель этого класса.

Ну что же, классы моделей тоже можно сравнивать. Например, в плане идентификации сущностей (что мы и делали в предыдущей дискуссии), и по каким-то другим критериям...
22 ноя 04, 18:24    [1126692]     Ответить | Цитировать Сообщить модератору
 Re: СУБД CACHE'  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
2 ну я & Алимов Игорь

Правильно ли я понял, что Cache - это по сути хранение массивов произвольного измерения?

Тогда у меня есть вопросы:
- как организовано распределение доступа?
- есть ли операции массовой обработки, т.е. допустим запись ^docs(id,"stroki",12), а мне надо удалить всё где строка больше 15?
- много пишут об ОО. Можно ли записывать объекты? Если да - есть какой контроль типов, что это за объекты, как они описываются? Объекты - имеется ввиду всякая там инкапсуляция, полимарфизм, наследование
- есть ли нечто вроде триггеров и констрейнов - т.е. процедур, которые вызываются при модификации данных и ограничений на значение данных?


2 Gluk (Kazan)

Не помню чьё изречение, я стараюсь не забывать:
Если споришь с дураком - спорят два дурака
22 ноя 04, 18:30    [1126710]     Ответить | Цитировать Сообщить модератору
 Re: СУБД CACHE'  [new]
ну я
Member

Откуда: Москва
Сообщений: 1276
SergSuper
2 ну я & Алимов Игорь
Правильно ли я понял, что Cache - это по сути хранение массивов произвольного измерения?

Ну, не произвольного, конечно, есть предел - полное имя переменной не должно превышать 255 байт, если есть непечатный символ то каше на него отводит два байта.
SergSuper
Тогда у меня есть вопросы:
- как организовано распределение доступа?
- есть ли операции массовой обработки, т.е. допустим запись ^docs(id,"stroki",12), а мне надо удалить всё где строка больше 15?
- много пишут об ОО. Можно ли записывать объекты? Если да - есть какой контроль типов, что это за объекты, как они описываются? Объекты - имеется ввиду всякая там инкапсуляция, полимарфизм, наследование
- есть ли нечто вроде триггеров и констрейнов - т.е. процедур, которые вызываются при модификации данных и ограничений на значение данных?

Грязное чтение, вообще говоря. Для корректной перезаписи используются явно проставляемые программистом блокировки, что-то вроде того:
lock +^docs(id) else strap "nesmogli"
оперируем узлом ^docs(id), например меняем его
lock -^docs(id)
Все места оперирующие этим узлом должны придерживаться одинаковых соглашений. Блокировка - это синхронизатор, он не делает невозможной чтение и запись. Если код на М генерится автоматами - то такие синхронизаторы они и генерируют. Изоляции транзакций нет. Но есть rollback по журналу.

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

В штатной реализации объектов каше есть классы которые сами по себе могут быть сохранены и которые могут быть сохранены только в качестве свойства хранимого, например дата в экзотическом формате.

В штатных объектах есть инкапсуляция, полиморфизм, наследование. Наследование - множественное. Контроль типов выполняется на двух уровнях - на объектном в качестве переопределения виртуальной функции (что-то типа IsValid...) и на табличном в виде задания sql - типа. Второе - существенно ограничено в силу природы sql. Объекты по схеме каше весьма богаты - от просто объекта типа "значение" до мощного хранимого.

Триггеры и констрейнты есть, и тоже богатые. Скажем, можно назначить ограничение ссылочной целостности 4 видов - cascade, set null, set default, no action. Триггеры также полноценные, но работают на sql уровне - чтобы работал совместно и табличный и объектный доступ, нужно прописать триггеры на таблицу и сеттеры на свойства. Есть вычисляемые поля, их тоже нужно прописывать дважды - как геттер для объектного атрибута и как правило вычисления для sql движка. Причина - генерация sql выражений в код, автономный от объектного движка. Есть еще одна малопонятная для меня вещь - relationships, но я в них не разбираюсь. Что-то вроде симбиоза, превращающего отношения между двумя таблицами в списочный атрибут и наоборот - у объектов первой таблицы образуются атрибуты, которые список или массив других объектов. Циклические ссылки в отношениях (relationship) не компилируются ;-). Есть многомерные атрибуты, которые выглядят каждый сам по себе в виде дерева, но в sql они не видны и никаких проверок на значения и структуру ни sql ни объектный доступ не имеют.

При оперировании хранимыми объектами есть несколько уровней concurrency control, тут тоже богато. Объект можно открывать в разных режимах совместной с другими процессами доступности.

Еще есть такая фишка, про которую почему-то молчат: autoswissling - типа если первый хранимый объект имеет атрибутом второй хранимый объект, то при открытии первого я получаю в атрибуте ссылку, но сам второй объект не грузится в память с диска. Когда обращусь к его атрибутам / методам - то он автоматически будет подгружен.
22 ноя 04, 19:17    [1126783]     Ответить | Цитировать Сообщить модератору
 Re: СУБД CACHE'  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4802
Maksim UM

Что Вы понимаете под "иерахическую модель"? тогда я скажу, поддерживает или нет? Только просьбы, тоже не отсылать меня к документации.


ну я

Теперь расскажите мне, в свою очередь, что такое иерархическая модель данных.


Вот выписал из литры про иерархические. (А то что Вы написали пока еще перечитаю повнимательней, но уже спасибо):

Место в истории БД:


Наряду с сетевой - сответствую первому поколению БД. До появления реляционных (РМД) господствовали 1960 - 1970. И на первом этапе появления РМД превосходили их в производительности. Последним однако сразу удалось захватить часть рынка благодаря возможностям непроцедурных языков запроов для этой модели данных, примером которых является SQL.
В настоящее время еще используются в основном из-за уровня инвестиций вложенных в уже существующие системы, стоимости по их замене, а также по той причине, что они вполне удовлитворительно выполняют свою работу с требованиями организации, обеспечивая ключевые системные функции.

Иерархическая модель данных::


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

Типы записей обычно упорядочены внутри структуры.
Экземпляры записей обычно упорядочены.
(наверное на подобии массивов - моя мысль)

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

В отличии от сетевой - никогда не существовало никакого формального соглашения об архитектуре и синтаксисе языка этой модели данных.

Часто в качестве примера иерархической СУБД приводится IMS фирмы IBM.


Основные недостатки


  • Для ответа даже на простые запросы, при выполнении которых нужен доступ к записям, основанный на перемещении с одной записи на другую, приходилось создавать очень сложные программы
  • Независимость от данных поддерживается в минимальной степени
  • Для них не существует общепринятого теоретического фундамента.
  • 22 ноя 04, 21:03    [1126877]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    Alex.Czech
    Guest
    2 ну я:
    Спасибо большое, вот это действительно интересно услышать. Интересен еще такой вопрос: как организовано кэширование данных (деревьев, глобалей и может еще чего другого) - что считал, то попало в кэш, кончилось место, начался своп ? Или это тоже, упаси Господь, на откуп программистам отдано ?

    Еще вопрос: тот M-код, который генерит движое Каше при обработке объектного кода, сильно неоптимален или можно терпеть ? И можно ли его подправить как-то на предмет оптимизации, или вариантов только два - или пиши на M, или на объектном уровне, а вставки на M в объектный код делать никак нельзя ?
    22 ноя 04, 22:55    [1126932]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    ну я
    В штатных объектах есть инкапсуляция, полиморфизм, наследование...

    А что значит штатные объекты и какие еще бывают?
    Могу я объявить некий класс, создать объект этого класса и записать?
    Т.е. как-нибудь так(синтаксис условный):
    class xxx=
       constructor Create(s:string);
       procedure MakeAll;
    end;
    
    ...
    ^docs(id,"stroki",12)=xxx.Create('xxx') 
    ...
    ^docs(id,"stroki",12).MakeAll


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

    Ну и если не сложно ответьте про распределение доступа. Когда есть отдельно таблицы, процедуры и т.д. это вроде всё очевидно, а тут с глобалями - я не представляю как можно организовать.
    23 ноя 04, 01:14    [1127007]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    ops
    Guest
    Андрей Леонидович
    ops !
    Опять странное непонимание исторического контекста. Это дореляционных ОСУБД "хватает за глаза". И все уже протестили давно...

    правда? ;)
    если бы хватало - не было бы db2, ms sql, oracle,terradata и прочей околореляционной ерунды. не строились бы на них проекты, до корорых прочим до-, пост- и оо- субдам вырасти может никогда и не светит.
    и что самое странное - те проекты работают... а ведь должны не работать.... ;)
    теория то провалилась...

    Андрей Леонидович

    А Ваше "первое сообщение" это:
    "если это допускается - почему бы и нет..."
    ?
    Подтвердите, и, конечно, комментарий будет.

    раньше.
    стр 14...
    23 ноя 04, 06:14    [1127051]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    ops
    Guest
    Андрей Леонидович
    ops !
    То есть, когда Вы выбирали СУБД для разработки приложений, Вы анализировали как в разных СУБД данные физически хранятся в памяти
    ,

    честно, было дело...
    Андрей Леонидович
    и именно поэтому выбрали, например, MS SQL вместо Oracle (или наоборот) ?

    нет. основные критерии были другие.

    я завел разговор о физическом хранении потому, что было интересно, каким образом cache достигает такого громадного убыстрения перед тем же sybase (как на сайте описано). и очень интересно получается...
    либо это проезд по ушам, либо intersystem обладает алгоритмическим ноу-хау по поводу перелопачивания данных на уровне Нобелевской премии.
    описанная в приведенной выше ссылке струкрура данных ну ни как не увязывается с высоким быстродействием...
    23 ноя 04, 06:31    [1127064]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    Павел Воронцов
    Member

    Откуда: Новосибирск
    Сообщений: 2402
    Блог
    Алимов Игорь & ну я & Maxim UM
    Спасибо, вот это действительно полезно было узнать.

    Андрей Леонидович
    Вы только сказали, что вот мол объект (глобаль) День типа "дата" и он сам по себе, без атрибутов. Но Ваши всё коллеги пояснили гораздо лучше.

    Насчёт моделей - математика (к сожалению) до сих пор не удосужилась подвести хоть какой-нибудь базис под "объектные модели". В этом смысле "объектная модель" не сравнима с реляционной - сравнивать нечего. Вот когда появится такая модель - будем говорить.
    23 ноя 04, 06:54    [1127090]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    Andrey K
    Member

    Откуда: Москва
    Сообщений: 676
    Andreww

    Кратко : выбрали один из атрибутов в качестве ключа, в листьях (если Btree) храним связный список из объектов - никаких проблем до настоящего момента это ни у кого не вызывало.

    :)
    Что такое "связанный список из объектов"?
    Дайте определение.
    Что такое "объект"? (в текущем контексте.)
    Дайте определение.
    23 ноя 04, 08:46    [1127221]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    Gluk (Kazan)
    Member

    Откуда:
    Сообщений: 9365
    SergSuper
    2 Gluk (Kazan)

    Не помню чьё изречение, я стараюсь не забывать:
    Если споришь с дураком - спорят два дурака


    Зачем столько снобизма ? Любой дурак - в первую очередь человек. И любой Человек в немалой степени дурак.
    23 ноя 04, 08:49    [1127228]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    Andrey K
    Member

    Откуда: Москва
    Сообщений: 676
    SergSuper

    Если споришь с дураком - спорят два дурака

    Вы частично правы. Спорить с дураком я не хочу.
    И не буду.

    Он вот так вот описал как несколько атрибутов хранятся в одном дереве Кратко : выбрали один из атрибутов в качестве ключа, в листьях (если Btree) храним связный список из объектов - никаких проблем до настоящего момента это ни у кого не вызывало.
    Но это получается ТАБЛИЦА с упорядочеными записями. => то есть то же что есть и в MSSQL и в Oracle...
    БЛИН А МУЖИКИ ТО И НЕ ЗНАЮТ!
    Хочу что бы все это поняли а не только ОН.

    P.S. Вы ведь сами спорите с Андреем Леонидовичем. ;) Пытаетесь от него добиться каких то определений. Зачем?
    23 ноя 04, 09:07    [1127267]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    Andrey K
    Member

    Откуда: Москва
    Сообщений: 676
    2 Andeww>
    Наводящий вопрос. :)
    А что по вашему такое в Cache "перекрёстная ссылка"?
    23 ноя 04, 09:13    [1127280]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    Andrey K
    Member

    Откуда: Москва
    Сообщений: 676
    Andrey K
    Вы частично правы. Спорить с дураком я не хочу.
    И не буду.

    Заметьте господа я с ним не спорю. Просто задаю вопросы. Ничего не утверждаю и не доказываю. (хочу что бы он сам понял)
    23 ноя 04, 09:17    [1127301]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    Maksim UM
    Member

    Откуда: SPb
    Сообщений: 432
    SergSuper
    ну я
    В штатных объектах есть инкапсуляция, полиморфизм, наследование...

    А что значит штатные объекты и какие еще бывают?

    Штатные - которые входят в поставку поумолчанию. Их довольно большое количество. Есть классы для работы с XML, сетевые компоненты (HTTP, ftp, SMTP...), для работы с файлами. Можно создавать свои классы (нештатные ;).
    Есть классы, которые могут храниться в БД, точнее, сохранять атрибуты и создавать индексы (удалять/модифицировать).
    SergSuper

    Могу я объявить некий класс, создать объект этого класса и записать?
    Т.е. как-нибудь так(синтаксис условный):
    class xxx=
       constructor Create(s:string);
       procedure MakeAll;
    end;
    
    ...
    ^docs(id,"stroki",12)=xxx.Create('xxx') 
    ...
    ^docs(id,"stroki",12).MakeAll

    К сожалению сейчас так не получится. С объектами можно оперировать только через переменные в памяти.

    SergSuper
    ну я
    ...но сам второй объект не грузится в память с диска. Когда обращусь к его атрибутам / методам - то он автоматически будет подгружен
    .
    Не понял - я должен сам каждый объект грузить с диска или это просто как опция для ускоорения работы?

    Предположим есть класс xxx со ссылкой на yyy (Relationship)
     class xxx=
        constructor Create();
        name:string;
        ref yyy;   
     end;
     class yyy=
       comment:string; 
     end;
    
    тогда можно так:
    a = xxx.OpenId(1) - загрузили объект с ID =1
    write a.yyy.comment - в этот момент подгрузился (автоматом) объект yyy.
    SergSuper
    Ну и если не сложно ответьте про распределение доступа. Когда есть отдельно таблицы, процедуры и т.д. это вроде всё очевидно, а тут с глобалями - я не представляю как можно организовать.
    Что подразумевается под "распределение доступа"?
    23 ноя 04, 11:15    [1127818]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    Andrey K
    Member

    Откуда: Москва
    Сообщений: 676
    Maksim UM

    Есть классы, которые могут храниться в БД, точнее, сохранять атрибуты и создавать индексы (удалять/модифицировать).

    На них и стоит обратить внимание в первую очередь. Вы имеете ввиду "базовые классы", кторые работают с объектами данных (объектами БД)?

    ну я
    В штатных объектах есть инкапсуляция, полиморфизм, наследование...

    События? Может ли такой класс вызвать событие, которое обрабатывалось бы в пределах транзакции?
    Технология Cache поддерживает такой механизм?
    Если не поддерживается... объектную модель можно применять.... но очень не удобно. IMHO
    23 ноя 04, 11:35    [1127929]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    ну я
    Member

    Откуда: Москва
    Сообщений: 1276
    SergSuper
    ну я
    В штатных объектах есть инкапсуляция, полиморфизм, наследование...

    А что значит штатные объекты и какие еще бывают?
    Могу я объявить некий класс, создать объект этого класса и записать?
    Т.е. как-нибудь так(синтаксис условный):
    class xxx=
       constructor Create(s:string);
       procedure MakeAll;
    end;
    
    ...
    ^docs(id,"stroki",12)=xxx.Create('xxx') 
    ...
    ^docs(id,"stroki",12).MakeAll


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

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

    Вы наблюдательны. Я специально акцентировал внимание на том, что пишу именно про тот объектный движок который поддерживается ядром каше. Есть и другие объектные движки, например производства ESI Objects или того, кто подписывается как dimon_2000.
    Для сохранения объекта нужно определить функцию сохранения и вызвать ее. При наследовании от класса Persistent компилятор автоматически ее генерирует. Получается код, сохраняющий значения атрибутов в глобалах по схеме, описанной в storage. Это такое специальное описание как и где какие значения следует писать / читать. Ссылка на объект может быть только в локальной переменной. При сохранении ее в глобаль она перестает быть ссылкой, счетчик ссылок уменьшается и объект может быть автоматом закрыт без сохранения (если он хранимый).
    Что грузить - Вы сами решаете. Попробую прочесть Ваши мысли. Речь о том, чтобы оперировать с объектом, если он сохранен? Тогда да, нужно его открыть - что-то у него там вызвать - сохранить. Опять акцентирую - в ESI Objects и у dimon_2000 это может быть по-другому.
    В нашем проекте, например, используется также объектная парадигма, но на прямом доступе - за одно чтение читается вся строка со значениями атрибутов в локальную переменную, в ней все переконструируется, потом записывается тоже одной операцией. При записи вызывается механизм индексации, который руководствуется нашими метаданными и проводит переиндексацию где что нужно. В принципе, можно оперировать и непосредственно данными в глобали, но с точки зрения эффективности лучше уменьшить число обращений к диску.
    Что понимается под распределением доступа? Распределенный доступ в виде связанных серверов или одновременный доступ к одним и тем же данным из разных процессов? Если второе - то через блокировки. Если первое - то конфигурируем какие глобали в какую базу какого сервера мапятся (логически они как-бы у нас, но физически там). Данные будут храниться удаленно, но при открытии объекта в штатном объектном движке какая-то часть данных будет загружена в локальные переменные. Блокировки в этом случае тоже бегают. Работает распределенное кеширование.
    Примерная схема работы в случае со строками документа условно выглядит так:
    class Stroka public что-тотамещё =
       constructor Create(s:string);
       procedure MakeAll;
    end;
    
    ...
    ; ^docs(id,"stroki",12)=xxx.Create('xxx') 
    set doc=##class(Doc).%OpenId(id)
    set stroka=##class(Stroka).%New()
    do doc.Stroki.InsertAt(12,stroka) 
    do stroka.MakeAll() или наверно лучше do doc.MakeAllStroki()
    do doc.%Save() ; данные сохранили
    kill stroka,doc ; сами объекты в памяти больше не нужны
    ...
    ; ^docs(id,"stroki",12).MakeAll
    23 ноя 04, 11:43    [1127981]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    ну я
    Member

    Откуда: Москва
    Сообщений: 1276
    Andrey K
    ну я
    В штатных объектах есть инкапсуляция, полиморфизм, наследование...

    События? Может ли такой класс вызвать событие, которое обрабатывалось бы в пределах транзакции?
    Технология Cache поддерживает такой механизм?

    Термин "событие" используется столь часто, что не совсем понятно какая именно трактовка имеется в виду.
    1) Метод объекта пишется на М. Можно вызвать функции написанные на М, методы своего класса или другого, обратиться к другим объектам. Кстати, в старших версиях можно писать на васике - компилятор сгенерит тот же байт-код.
    2) Можно переопределить специальные методы типа %OnBeforeSave, %OnAfterOpen, %OnNew и другие. При компиляции класса компилятор проверяет - есть ли такие и если есть, то сгенерирует вызов их. В этих методах пишем что нам там понадобилось.
    3) Можно использовать interprocess communications и выставить информацию другому процессу.
    4) Можно прописать информацию в глобаль в условленное место, и другие процессы могут прочитать ее и понять что им нужно.
    5) Может еще много что, но непонятно, что названо событием.
    Если код не вызывает команды транзакций tstart / tcommit / trollback, то он продолжает работать в той же транзакции, в которой его вызвали, на том же уровне. Если вызывает - то соответственно изменяет контекст.

    Кстати - тело метода могут быть нескольких видов: call, code, expression, generator, objectgenerator. Если call - то значит объектный движок должен вызвать код, прописанный как обычная функция М, то что называется legacy. Если code - то код из тела метода будет использован дла генерации байт-кода как есть. Если expression - то в вызов этого метода будет подставляться код из тела метода, что-то вроде сишного inline. Если generator - то тело метода будет вызвано при компиляции класса и в нем следует записать тело метода в специальную переменную. Что получится - будет откомпилировано и использовано. Отличная штука для генерации версионно-зависимого кода например. Если objectgenerator - то то же самое, но для генерации тела компилятор даст не специальную переменную, а объект специального класс, нужно в него прописать. В генераторе можно нагенерить тело метода, сгенерировать другие классы / рутины и скомпилировать их, создать / удалить объекты, отослать почту, и тд и тп.
    23 ноя 04, 12:12    [1128203]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    ну я
    Member

    Откуда: Москва
    Сообщений: 1276
    Alex.Czech
    2 ну я:
    Спасибо большое, вот это действительно интересно услышать. Интересен еще такой вопрос: как организовано кэширование данных (деревьев, глобалей и может еще чего другого) - что считал, то попало в кэш, кончилось место, начался своп ? Или это тоже, упаси Господь, на откуп программистам отдано ?

    Еще вопрос: тот M-код, который генерит движое Каше при обработке объектного кода, сильно неоптимален или можно терпеть ? И можно ли его подправить как-то на предмет оптимизации, или вариантов только два - или пиши на M, или на объектном уровне, а вставки на M в объектный код делать никак нельзя ?

    Пожалуйста.
    Кеширование организовано хорошо, над этим головы работают и движок непрерывно проходит обкатку в весьма тяжелых условиях на реальных приложениях. Движок кеширует данные самостоятельно, внутренняя алгоритмика весьма сильная. Программист в это вмешаться не может. Администратор может выставить сколько кеша может использовать процесс.
    С каждой новой вресией генерация кода компилятором классов все лучше и лучше. Разработчиков решулярно пинают, они работают, процесс идет. Сгенерированный код править не следует даже если технически это возможно.
    Непонятно что такое вставки на М - если вызываем функции, то их пишем на М.
    23 ноя 04, 12:32    [1128345]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    SergSuper
    Member

    Откуда: SPb
    Сообщений: 5488
    2 ну я & Алимов Игорь & Maksim UM

    Спасибо за информацию, есть еще вопросы

    do doc.%Save() ; данные сохранили
    А куда мы их сохранили? Мы же не указали нигде на какой ветки они будут лежать?

    Если у нас глобаль хранится в Б-дереве - означает ли это что есть только один индекс, которым и является это дерево?

    Что я имею в виду под распределением доступа. Допустим у меня есть два вида пользователей: операторы и начальство. Первым надо иметь возможность вводить и редактировать документы, вторым смотреть общие показатели. И тем и другим должны быть закрыты какие-то внутренние объекты. Есть ли для этого какие-то стандартные средства?
    23 ноя 04, 12:37    [1128384]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    Andrey K
    Member

    Откуда: Москва
    Сообщений: 676
    ну я

    Термин "событие" используется столь часто, что не совсем понятно какая именно трактовка имеется в виду.
    1) Метод объекта пишется на М. Можно вызвать функции написанные на М, методы своего класса или другого, обратиться к другим объектам. Кстати, в старших версиях можно писать на васике - компилятор сгенерит тот же байт-код.
    2) Можно переопределить специальные методы типа %OnBeforeSave, %OnAfterOpen, %OnNew и другие. При компиляции класса компилятор проверяет - есть ли такие и если есть, то сгенерирует вызов их. В этих методах пишем что нам там понадобилось.
    3) Можно использовать interprocess communications и выставить информацию другому процессу.
    4) Можно прописать информацию в глобаль в условленное место, и другие процессы могут прочитать ее и понять что им нужно.
    5) Может еще много что, но непонятно, что названо событием.
    Если код не вызывает команды транзакций tstart / tcommit / trollback, то он продолжает работать в той же транзакции, в которой его вызвали, на том же уровне. Если вызывает - то соответственно изменяет контекст.

    Я имел ввиду событие для классического подхода к ООП.

    :) Вот нашёл в интернете. Полностью с этим согласен. И лучше выразить свои мысли врядли смогу.

    В ООП основное - это смена состояний (об`екта) в ответ на события
    (сообщения). Основа императивного стиля - это смена состояний
    (всей программы или как минимум модуля, поскольку инкапсуляции
    нету) в результате отработки инструкций.
    ....
    Событие - это событие. В ООП оно так и есть (событие есть получение об`ектом сообщения, или, иначе говоря, вызов метода об`екта; при этом
    событие совершенно не обязано нести на себе какие-то данные, хотя
    это и возможно -- сообщение может иметь параметры, иначе
    говоря, метод может иметь аргументы)
    ....
    От того, что в языке есть какие-то "средства", ничего не
    меняется. Определяющим является не общее количество возможностей
    конкретного языка, а тот стиль мышления, который означенный язык
    стимулирует. О событиях мыслить проще в ОО-стиле. И сложнее всего
    - в функциональном, за отсутствием адекватных терминов и по
    причине необходимости прибегать либо к императивным подпоркам,
    либо к совсем уже нетривиальной эмуляции через ленивость.


    То есть если возможности, о которых я у вас спросил относительно ОО подхода при разработке приложений в Cache не имеются, то собственно среду разработки сложно назвать полноценно объектно ориентированной.
    (IMHO ... не хочу ни с кем опять ругаться это моё субъективное мнение)
    23 ноя 04, 12:49    [1128451]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    Maksim UM
    Member

    Откуда: SPb
    Сообщений: 432
    SergSuper
    2 ну я & Алимов Игорь & Maksim UM

    Спасибо за информацию, есть еще вопросы

    do doc.%Save() ; данные сохранили
    А куда мы их сохранили? Мы же не указали нигде на какой ветки они будут лежать?

    Если класс стандартно сохраняется, то данные сохраняются с автоматически
    сгенерированым ID (1,2,3... присваивается при первом сохранении) в виде
    ^docD(1)=<data>
    ^docD(2)=<data>
    А индексы строятся в глобале ^docI в виде
    ^docI("","name","SergSuper")=1 // 1 - ID
    Соответственно, зная это, можно из программы на COS быстро получить ID без использования объектов - просто
    Set id=^docI("","name",<имя для поиска>)
    В целом стандартное хранение классов похоже на хранение в реляционных БД.

    SergSuper
    Если у нас глобаль хранится в Б-дереве - означает ли это что есть только один индекс, которым и является это дерево?

    Что я имею в виду под распределением доступа. Допустим у меня есть два вида пользователей: операторы и начальство. Первым надо иметь возможность вводить и редактировать документы, вторым смотреть общие показатели. И тем и другим должны быть закрыты какие-то внутренние объекты. Есть ли для этого какие-то стандартные средства?

    В SQLе есть стандартные разграничения доступа. Эти ограничения не действуют при прямом доступе (думаю это понятно). Для глобалов можно ограничивать доступ по ID пользователя и группы - как в unix файловых системах (чтение, запись...).
    23 ноя 04, 12:53    [1128472]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    Andrey K
    Member

    Откуда: Москва
    Сообщений: 676
    SergSuper

    do doc.%Save() ; данные сохранили
    А куда мы их сохранили? Мы же не указали нигде на какой ветки они будут лежать?

    Если у нас глобаль хранится в Б-дереве - означает ли это что есть только один индекс, которым и является это дерево?

    Ура. :) Разум пробуждается.

    P.S. Только осторожнее с высказываниями ;) А то придёт Andreww и скажет, что вы не знаете, что данные можно хранить не только в В-деревьях. А ещё и того хуже обвинит вас в том, что вы утверждаете, что это единственный и лучший способ хранения. Он ведь у нас по деревьям силён.
    23 ноя 04, 13:01    [1128532]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    ну я
    Member

    Откуда: Москва
    Сообщений: 1276
    SergSuper
    do doc.%Save() ; данные сохранили
    А куда мы их сохранили? Мы же не указали нигде на какой ветки они будут лежать?

    1) Это прописывается в storage класса если он хранимый. Если storage (ну не хочу переводить) явно программистом не менялся - то он генерируется автоматом по схеме по умолчанию.
    2) Можно переопределить функцию сохранения и писать своим кодом. В методе доступны значения атрибутов так, как они представлены в памяти.
    Каким вариантом пользоваться - решает программист.

    SergSuper
    Если у нас глобаль хранится в Б-дереве - означает ли это что есть только один индекс, которым и является это дерево?

    На каждую глобаль - свое дерево, имена всех глобалов хранятся в каталоге глобалов, это специальная внутренняя структура, у каждого производителя она устроена по-своему. Или я не понял вопроса.

    SergSuper
    Что я имею в виду под распределением доступа. Допустим у меня есть два вида пользователей: операторы и начальство. Первым надо иметь возможность вводить и редактировать документы, вторым смотреть общие показатели. И тем и другим должны быть закрыты какие-то внутренние объекты. Есть ли для этого какие-то стандартные средства?

    Это решается на уровне приложения. При объектном доступе можно переопределить %OnNew, %OnOpen и если текущему пользователю нельзя что-то смотреть - то грязно ругаться, кидаться эксепшенами и форматировать винт. При sql доступе придется действовать туповато - грантить аксесс. Для общих показателей можно сделать отдельный класс с вычисляемыми атрибутами - sql движок их повычисляет.
    23 ноя 04, 13:04    [1128545]     Ответить | Цитировать Сообщить модератору
     Re: СУБД CACHE'  [new]
    ну я
    Member

    Откуда: Москва
    Сообщений: 1276
    Andrey K
    То есть если возможности, о которых я у вас спросил относительно ОО подхода при разработке приложений в Cache не имеются, то собственно среду разработки сложно назвать полноценно объектно ориентированной.
    (IMHO ... не хочу ни с кем опять ругаться это моё субъективное мнение)

    Да насрать мне на то, с чем Вы согласны и с чем нет. Меня это ни грамма не волнует. Методы у объектов будут, если Вы их напишете. И они будут работать если Вы их вызовете. Не вижу причин толочь воду в ступе.
    Кроме просто методов, кстати, есть специальные - геттеры и сеттеры для атомарных атрибутов. Вызывается при чтении и записи значения атрибутов. Там хоть соловьем свисти. И во внутреннее хранение в памяти можно ничего не писать.
    Скажем, вот Игорь Алимов, насколько мне известно, использует SMWrap. В нем есть, например, класс %TMEdit. В коде пишем что-то вроде
     set %this.Form.Edit1.Text="тут типа новый текст"
    
    В этом коде в рантайме срабатывает сеттер, который отправляет клиенту по сокету сообщение типа пропиши-ка в свойство Text объекту с этим указателем такое-то значение. На клиентской стороне срабатывает дельфийский сеттер и прочее. Геттер работает в обратную - с сервера запрашивается значение свойства и геттер возвращает его вызвавшему коду.
    Видимо, аналогичный механизм использует и dimon_2000 в своих разработках.
    23 ноя 04, 13:23    [1128664]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 .. 15 16 17 18 19 20 [21] 22 23 24   вперед  Ctrl
    Все форумы / Сравнение СУБД Ответить