|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
Андрей, я не совсем понял что значит подразумевает использование FETCH. В приведленном мною псинтаксисе Вам не надо делать FETCH явно. Пример: -- begin for var in ( select * from all_objects) loop dbms_output.put_line(var.object_name); end loop; end; -- "То есть по сути это не один язык программирования с единой системой типов а язык слепленный из трех частей" Нет это один язык программирования. Если уж на то пошло.(постараемся придерживаться формального подхода.) "Вот этого механизма перегонки и хочется избежать." Вопрос зачем. Пока механизм "перегонки" проблем не приносит. "Есть подозрение что оптимизатор для такого языка будет работать эффективнее так как получит возможность оптимизировать запросы в контексте всей программы а не сами по себе." Интерестно увидеть математическое доказательство. "дотягивает ли система типов PL/SQL до языков типа Java/C++? Сильно сомневаюсь" а зачем? "Да уж, придется изучить синтаксис PL/SQL, а потом еще Transact-SQL, а потом еще кучу недоделаных языков от различных поставщиков субд" опять же что значит недоделанных. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 15:19 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
"Вот этого механизма перегонки и хочется избежать." Вопрос зачем. Пока механизм "перегонки" проблем не приносит . Имхо 90% программирования состоит в конвертации данных между различными системами типов. Платформы типа Java или .NET пытаются как-то эту проблему решить, а вот в мире SQL похоже полный застой. "дотягивает ли система типов PL/SQL до языков типа Java/C++? Сильно сомневаюсь" а зачем? Так как PL/SQL не является языком общего назначения, для решения реальных задач приходится применять его вместе еще с чем-то, например с java. Опять возникает проблема конвертации данных из одного языка в другой "Да уж, придется изучить синтаксис PL/SQL, а потом еще Transact-SQL, а потом еще кучу недоделаных языков от различных поставщиков субд" опять же что значит недоделанных . Ок, пусть будет "нестандартизированных" ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 15:52 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
"Имхо 90% программирования состоит в конвертации данных между различными системами типов." Если под программированием понимать полько написания прикладного исходного кода. то тоже не совсем понятно. Сразу встает вопрос что подразумевать под конвертацией. если оператор присваивания, то сомневаюсь что 90% операторов - это операторы присваивания. "Платформы типа Java или .NET пытаются как-то эту проблему решить, а вот в мире SQL похоже полный застой." так потому что не надо. в мире SQL все ok. Язык SQL более чем реляционно полный. а тут еще процедурные расширения имеются. "Так как PL/SQL не является языком общего назначения, для решения реальных задач приходится применять его вместе еще с чем-то, например с java. Опять возникает проблема конвертации данных из одного языка в другой" да PL/SQL - язык для манипуляции реляционными данными и использовать его для чего-то друго порою не целесообразно. Ок, пусть будет "нестандартизированных". Ну с этим есть проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 16:03 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
Что значит - PL/SQL не сявляется языком общего назнчения? А, пардон, С (без ++) является языком общего назначения или не является? Дык PL/SQL ничуть не хуже - те же языковые конструкции, те же переменные.... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 16:04 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
"Что значит - PL/SQL не сявляется языком общего назнчения?" напишите мне пожалуйста текстовый редактор на PL/SQL :-)) или операционную систему или скажем драйвер. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 16:08 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
Ну я бы не стал говорить, что прямо все так и ОК. Являясь реляционно-полным он не яляется реляционно-точным :). Здесь есть повод вернуться к нашим баранам.... в смысле к САБЖУ. Что подразумеают языки типа С++ или Java. То, что любой объект представлен в памяти как совокупность переменных примитивных типов. Что подразумевает реляционные системы? Что данные о любой предметной области будучи нормализованными могут быть представлены как набор значений отношений,(таблиц значица :)) причем в качестве доменов(типов атрибутов) мы используем те же самые примитивные типы. Ну и поскольку инф . сиcтемы традиционно (в силу так скаать эволюционных причин) деляться на программы и системы хранения данных, то возникает этакий пинг-понг: Int -сюда, Сhar - туда.... и все это описывается определенными языковыми конструкцими (я сознательно упрощаю, потому как сейча вокруг этого все столько понакручено, что за деревьями леса не видно). Но люди ленывые даже для того, что бы описать это туда-сюда :) к тому же в сложных проектах очень много разного туда-сюда получается и от этого мелькания голова пухнуть начинает. А поскольку производительность растет, то возникает желание ....как-нить изобразить, что бы данные были представлены одновременно и как объекты и как отношения... ... И вообще, что бы это лежало в одном месте и там же же вычислялось... жило в общем своей жизнью...Эту жизнь конечно надо описать, причем описать так, что бы это на что-то было похоже... желательно на то, о чем речь... ну например на склад....или на карту....иля на производство.... ну в общем на все, что угодно... То есть речь идет о том, что бы было то, что в Манифесте БД третьего поколения называется "богатая система определяемых пользоватем типов? служащих для описания персистных данных" Отвлекусь.... вот тут прозвучало "в мире SQL все ok". Ну да действительно все ОК. Есть таблицы и любые данные мы можем нормализовать до набора таблиц, а для работы с ними использовать стандартные операции, определнные в реляционной модели. Но таблица - это не есть способ описания объектов - это есть способ описания данных. В конце концов, точно так же можно сказать, что в мире аппаратной памяти все ОК - ведь (в конце концов!) все данные размещаются в аппаратной памяти а процессор может складывать числа или копировать байты. Ситуация заключается в том, что сегоднящянии языки реляционных систем по сути своей являются ФУНКЦИОНАЛЬНЫМИ - типа раннего фортрана значит. Критерий очень простой - у фортана был нерасширяемый набор типов, реализуемых в аппаратной памати. У соременных языков реляционных систем единтственным типом является тип "отношения" - они работают с таблицами... и все. То сеть то, что говорит GrimReaper777 мне кажется достаточно оправданным... но не все.... то есть для меня курсор в целом - это допустимый аналог FOREACH, поскольку они служат одним целям, но вот FETCH мне активно не нравиться, поскольку он подразумевает тот пинг-понг, от которого начиает пухнуть голова. А вот вопрос "дотягивает ли система типов PL/SQL до языков типа Java/C++? Сильно сомневаюсь..." вместе с ответом я целиком и полностью поддерживаю - не дотягивает нифига. У меня вопрос... вот вы тут обсуждетет тему, которая неким образом касается сабжа... но вес же вы в сабж ...в статью то бишь... вчитались? Там речь все же немножко о другом...но если напрячь фантазию...может найдете и для себя ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 17:02 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
Для n А Вы попробуйте напишите на С.... только чур - ТОЛЬКО ЯЗЫКОМ, т.е. без функций ввода-вывода и операций с файлами ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 17:05 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
Если под программированием понимать полько написания прикладного исходного кода. то тоже не совсем понятно. Сразу встает вопрос что подразумевать под конвертацией. если оператор присваивания, то сомневаюсь что 90% операторов - это операторы присваивания. Под конвертацией я понимаю взаимодействие программных компонентов написанных с использованием различных систем типов. Самый простой пример: массивы и строки в C/C++. Есть сишные массивы (указатель на первый элемент) причем с различными стратегиями выделения/освобождения памяти. Есть STL. Плюс в каждой крупной базовой библиотеке, типа ATL от Microsoft, есть свои классы реализующие массивы. Плюс каждый программист считает своим долгом создать свой собственный фирменный класс для работы с массивами. Плюс удаленные вызовы где нужно эти массивы как-то маршаллизовать. Плюс модули написанные на других языках программирования. Отсюда - килобайты программного кода который занимается конвертацией одних и тех же данных в разные форматы для того чтобы передать их в другой модуль, или хотя бы в другую функцию в том же модуле. Все эти тонкости по взаимодействию программных компонентов сводят "объектную ориентированность" на нет, и ведут к тому что прикладной код содержит 90% логики по взаимодействию компонент, и лишь 10% непосредственно бизнес-логики, хотя должно быть наоборот. Java, .NET пытаются решить эту проблему за счет введения единой системы типов, прозрачного механизма удаленных вызовов, использования XML ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 17:15 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
"Являясь реляционно-полным он не яляется реляционно-точным :). " 1)Определения реляционно-точного языка не встречал нигде. Если это Ваше, то дайте четкое определение. 2) Приведите определение функционального языка и покажите почему SQL Или PL/SQL является функциональным. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 17:25 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
"А Вы попробуйте напишите на С.... только чур - ТОЛЬКО ЯЗЫКОМ, т.е. без функций ввода-вывода и операций с файлами " так занчит и C без функций ввода-вывода и операций с файлами не является языком общего назначения. НО это другой вопрос. ТО что PL/SQL не является таковым я показал. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 17:26 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
А Вы попробуйте напишите на С.... только чур - ТОЛЬКО ЯЗЫКОМ, т.е. без функций ввода-вывода и операций с файлами Ну естественно что любому языку необходима привязка с системным сервисам. Разница в том, что в C или Java такая привязка делается естественным образом, а в PL/SQL приходится извращаться , например делегировать вызовы расширениям на других языках ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 17:27 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
"Плюс каждый программист считает своим долгом создать свой собственный фирменный класс для работы с массивами" это не проблема языка . Это проблема проета или руководителя этого проекта. А все описанное вами это тоже не проблема конкретного языка. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 17:29 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
"Разница в том, что в C или Java такая привязка делается естественным образом, а в PL/SQL приходится извращаться , например делегировать вызовы расширениям на других языках" так не надо на PL/SQL писать текстовый редактор. Вдумайтесь в его название. procedure sql. т.е процедурное расширения языка манипуляции реляционными данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 17:31 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
"в C или Java такая привязка делается естественным образом" Что? Естественным образом? Ну если ассемблер для С - это естественный образ (а все стандартные библиотеки ввода-вывода для каждой машины свои и в конце концов реализуются на ассемблере конкретной машины ) то почему бы для PL SQL не написать что-нить на С? разве это извращение? :) А в Java так вообще - целая ВИРТУАЛЬНАЯ МАШИНА для каждого железа своя. Ребяты!!! Вы чем говорите то.... какие операции ввода-вывода? Причем здесь язык вообще? Именно что, "процедурное расширения языка манипуляции реляционными данными" поскольку без такого расширения реляционные системы являются фактчески непрограмируемыми . Она может выполнять отдельные операции, и все... этакий табличный калькулятор. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 17:53 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
это не проблема языка . Это проблема проета или руководителя этого проекта. А все описанное вами это тоже не проблема конкретного языка. В любом проекте есть взаимодействие с внешними проектами и системами. Платформы а-ля Java или .NET предлагют определенный стандарт на такое взаимодействе. В C++ такого стандарта нет, каждый творит как хочет, и в этом проблема данного языка. В мире СУБД примерно та же беда - каждый поставщик сам себе изобретает велосипед а пользователи отгребают глюки. так не надо на PL/SQL писать текстовый редактор. Вдумайтесь в его название. procedure sql. т.е процедурное расширения языка манипуляции реляционными данными. Зато хочется на Java писать доступ к реляционным данным. И тут начинается гемморой и пинг-понг. Так что необходимы еще и реляционные расширения процедурного языка :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 18:00 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
Что? Естественным образом? Ну если ассемблер для С - это естественный образ (а все стандартные библиотеки ввода-вывода для каждой машины свои и в конце концов реализуются на ассемблере конкретной машины) то почему бы для PL SQL не написать что-нить на С? разве это извращение? :) А в Java так вообще - целая ВИРТУАЛЬНАЯ МАШИНА для каждого железа своя. небольшая поправка: писать библиотеки нужно не для каждой конкретной машины, а для каждой конкретной операционной системы, которая и обеспечивает абстрагирование от железа. А в Java пошли чуть дальше и сделали что-то вроде виртуальной операционной системы и правильно сделали PL/SQL сам по себе уже извращение. Вот в DB2 например более грамотный подход: все хранимые процедуры пишутся на внешних языках, а не на каких-то костылях. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 18:13 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
О, блин! Хоть кто-то на меня внимание обратил.... :) 1)Определения реляционно-точного языка не встречал нигде. Если это Ваше, то дайте четкое определение. Четкого определния нет, но попробуйте почитаnь здесь . Или зайдите на сайт www.dbdebunk.com и посмотрите, почему Крис Дейт не любит SQL/ 2) Приведите определение функционального языка и покажите почему SQL Или PL/SQL является функциональным. Сорри, давайте делить SQL и PL/SQL. SQL - вообще непроцедурный и описывает отдельные операции. PL/SQL - процедурный и описывает последовательность таких операций. А почему он является функциональным я уже написал - потому что все опреации выполняются над переменными типа "отношения" (т.е. над таблицами), который является предопределённым,а другие типы определять нельзя. Я конечно понимаю, что есть TABLE и RECORD... но ИМХО это у них от непонимания ситуации получилось Ну и примитивные типы INT, CHAR а куда ж без них? Домены все ж... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 18:14 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
2 т >так занчит и C без функций ввода-вывода и операций с файлами не является языком общего назначения. НО это другой вопрос. ТО что PL/SQL не является таковым я показал. Неверно. На PL/SQL можно написать все что угодно, в том числе и операционную систему. Напиши себе виртуальную машину и в ней (для нее) напиши ОС. Как только в языке появился цикл либо рекурсия, он становится равномощным всем языкам типа C и вместе с ним машинам Тьюринга, Поста и пр. В PL/SQL присутствуют и цикл и рекурсия. А вот на SQL многого сделать нельзя, там нет рекурсии. Как всегда вопрос сводится не к можно-нельзя, а к удобно-неудобно. Еще иногда играет роль производительность результирующей системы. Поэтому появились попытки ввести в SQL сервера поддержку джавы, считается, что на ней писать удобнее. >2) Приведите определение функционального языка и покажите почему SQL Или PL/SQL является функциональным. Нужно выбрать другой термин, "функциональный" - название группы языков типа LISP. PL/SQL к ним не относится, он процедурный. Впрочем совсем точных определений по-видимому нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 23:50 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
Для c127 Спасибо...:)...Ну конечно же процедурный..... (Может быть можно скзать алгоритмический ?) В общем язык, который описывает последовательность вычисления значений переменных фиксированного набора простых типов. Про них Г.Буч в книжке "ООП с примерами применения"пишет как про языки первого и второго поколения. PL\SQL очень к этому близок, только там наряду с поддержкой доменных типов (всяких int и char) поддерживается тип отношение и опреации надпераменными этого типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2003, 10:44 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
Еще про "глубинный смысл". Меня фраза c127 некоторым образом....мммм... задела .... не в том смысле, что она плоха.... а... мммм.... выказывает некое непонимание. "На PL/SQL можно написать все что угодно, в том числе и операционную систему. Напиши себе виртуальную машину и в ней (для нее) напиши ОС" Зачем на нем писать какую-то машину? Статье о САБЖе предполагает, что реляционную СУБД саму надо рассматривать как МАШИНУ. СУБД поддерживает табличные переменные (то есть выполняет функции памяти) и выполняет операции над ними (то есть выполняет функции...мммм... процессора). Только там память не линейно-адресуемая, а таблично-ассоциативная и команды "процессора" соответсвенно заточены под это дело. В принципе PL/SQL можно рассматривать как МАШИННЫЙ язык (а так же Т-SQL и т.п. - в общем для каждой машины свой машинный язык). Обсуждаемая статья собственно и показывет, что для этой машины можно сделать ОО-систему програмирования, и объясняет, как ее можно сделать. И заодно рассказывает, что мы с этого можем поиметь. Жаль, конечно, но возникает впечатление, что кусок между вступлением и заключением никем еще не прочитан.:( ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2003, 15:22 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
2 U-gene Да, я теперь понял, оракл, в котором живет PL/SQL, по-видимому можно рассматривать как машину и тогда PL/SQL превращается в подобие машинного языка. Это гораздо лучше того, что я предлагал. Но ведь никто не запрещает написать эмулятор классического процессора с регистрами, памятью и пр. Тоже решение, не такое красивое, но более понятное присутствующим здесь сишникам/плюсплюсникам. В любом случае с PL/SQL все ясно и обсуждать нечего. Я частично прочитал вторую часть статьи и теперь вспомнил, что где-то там этот вопрос обсуждался. Просто забыл. Теперь скачал вордовый файл, почитаю на досуге с нормальными обозначениями. Но меня лично на сегодняшний день больше интересует формализация понятия объект, т.е. первая статья, с ней разбираюсь потихоньку. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2003, 23:14 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
2 U-gene Только сейчас прочитал статью. Мыслишь абсолютно в правильном направлении. Я уже давно экспериментирую в этом направлении, правда больше с позиций разработчика. То, что такую систему можно реализовать - это очевидно, но ... Давай представим, что мы решили разработать эту систему. Далее все идет уже с подробностями реализации. Имеем: - набор целевых объектов, связанных посредством ссылок между собой (граф такой). - Размер ОЗУ на порядки меньше общего размера данных. - Хранить данные в реляционной базе теряет смысл, т.к. в любом случае весь механизм запросов реализован над теми данными, что в ОЗУ, т.е. нужен просто низкоуровневый механизм хранения данных, типа такого которым пользуются реляционные БД. - Данные ссылаются друг на друга индентично в ОЗУ и ВЗУ (!!!) иначе нет смысла во всем этом. Ссылка возвращает адрес объекта в ОЗУ. Далее. Разработка прикладной базы данных в этом случае - это суть разработка структуры и методов всех классов, а также глобальных операций (не относящихся к конкретным экземплярам). Следующий шаг - компиляция двоичного модуля, содержащего имплементацию всех описанных методов и процедур. Система работает непосредственно вместе с скомпилированной прикладной библиотекой в одном процессе. Т.е. мы полностью объединили те серверные уровни, которые сейчас разносят в классической 3-х звенке. Далее. Метод хранения. Под большим вопросом. Ведь нам надо индентично хранить данные в ОЗУ и ВЗУ, иначе придется изобретать глобальный уникальный идентификатор объектов (или ключи, порой суррогатные), и действительно использовать промежуточную реляционную субд только лишь с целью физического хранения наших объектов. (из пушки - по воробьям) Представим, что разрядности адреса платформы хватает для вмещения всего требуемого объема данных (64 хватит до конца века). В этом случае, для хранения данных в ВЗУ можно использовать обычный механизм виртуальной памяти современных ОС. Он как нельзя лучше отображает ОЗУ на ВЗУ, да еще с максимальной для данной платформы скоростью. Чтобы не создавать "кашу" в файле подкачки (это и есть НАША БАЗА в ВЗУ), необходимо при выделении памяти в ОЗУ группировать объекты по классам, и размещать их на страницах равных или кратных по размеру страницам виртуальной памяти целевой платформы. Всем этим будет заниматься обычный менеджер памяти, которые многие программисты на С++ наверняка не раз писали, если участвовали в разработке серверных приложений. Я малость углубился в детализацию/оптимизацию :) Вернемся к сущности. А суть состоит в том, что конкретная прикладная система - это конечное множество алгоритмов над (теоретически) бесконечым количеством данных. Я побоялся сказать сразу, без вступления, но теперь, когда публика немного подготовлена, говорю: следовательно, нашей системе вообще необязательно иметь механизм динамической компиляции и исполнения запросов (то, что является сердцем СУБД). Т.к. описание классов и всех их методов, а так же описание методов из прикладного уровня известно уже на этапе компиляции, то все это уже скомпилировано в систему. Те кто всю жизнь администрил ораклы и сиквели, те кто написал ручками не один километр скриптов на обслуживание, тюниг, индексирование и пр.пр.пр подумают, что я сошел с ума. Если бы не одно но! В предлагаемой U-gene схеме все данные УЖЕ СВЯЗАНЫ между собой всеми возможными связями, которые могут существовать между ними в принципе, исходя из предметной области. Да потому, что у нас нет и не может быть UserID в таблицах, а есть адрес конктретного экземляра объекта User или его потомка, а значит нам не нужны ни индексы, ни ключи, ничего. Небольшая загвоздка в языке, на котором можно описывать целевую программу (со всякими групповыми операциями). Хотя и это решаемо, - можно сделать макро-язык, который сгенерит код на С++ или там на С#, а дальше уже легко - классы есть - вперед!!! Подытожим и вернемся к "но..." которое в самом начале. 1. Необходимо средство для генерации двоичного кода из некоего описания (предположим - есть макро-надстройка, предложенная выше) 2. Это средство генерит на основе описания код, реализующий обычные и групповые операции над объектами (см. статью в самом начале топа) 3. Автоматически генерит специальные объекты-хелперы для каждого прикладного класса, через которые можно перебрать все объекты класса, которые распределяют память под экземпляры класса, которые знают об устройстве "опекаемого" класса и т.д. и т.п. 4. После компиляции все это просто запускается и работает как обычное приложение с предкомпиленным набором операций, используя в качестве средства хранения файл подкачки операционной системы. Натянуто, да, особенно для моментов включения и выключения питания, но ради ТАКОГО случая ведь и менеджер виртуальной памяти можно слегка подшаманить (на всяких Linux), в этом случае я бы его подшаманил в сторону добавления некоторый простейших свойств. Например, добавить возможность задавать конкретный файл подкачки для конкретных процессов. Или же просто возможность "сбрасывать" а потом "поднимать" процесс из файлов подкачки. (опять полез в тонкости реализации, да если пораскинуть мозгами, то это все вообще не проблема) 5. Если ориентироваться на .NET, то динамика (как на обычных СУБД) вполне допустима через скриптовые возможности, возможности компиляции на "лету" и reflection. 6. НО... Это СУБД??? Или просто получили прикольную приложуху? (Хотя быстродействие этого хозяйства, если ориентироваться на С++ должно быть просто запредельным - никаких тебе JOIN). Вот так вроде выходит, что объектно-ориентированная СУБД просто вырождается в обычное объектно-ориентированное приложение, которое, правда, должно иметь некие средства для групповых операций (известных на момент компиляции, ни тебе стаистики, ни экзекушн-плана, абалдеть!!!), а так же учета целевых хранимых объектов (метаданные, да коллекции ссылок, для возможностей перебирать все существующие экземпляры объектов). ЗЫ То, что здесь описано - описано весьма и весьма поверхностно, дабы не захламлять топик. Но, поверьте, на многие очевидные вопросы, которые могут возникнуть у прочитавшего и вдумавшегося, уже есть ответы. (типа - а как мы можем изменить тип некоторого объекта, и при этом сохранить целлостность? - да более чем просто!). Пишите, пообщаемся. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2003, 08:41 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
2 Vdimas\r \r Читал Ваше сообщение, касающееся возможной реализации неделю :) Ну что сказать?\r \r Для начала хочу припомнить топик "Система с изменяющимися алгоритмами рассчета". Наскоолько я понял, ее автор ASCRUS , посчитал возможности, предоставляемые совпременными реляционными СУБД (то есть того, что я в предыдущих выступлениях называю "табличными машинами") вполне достаточными для реализации, причем не только по языковым возможностям, но и по производительности (и вообще если говорить про то, что реализовал ASCRUS (насколько я это понял), то ИМХО - еще немного, и мы получим то, о чем я говорю....2 ASCRUS - наверное, это намёк:) )\r \r Я по поводу разговора по ОЗУ и ВЗУ, и про адресацию в ОЗУ и в ВЗУ. В том то все и дело, что реляционные СУБД ушли от этого деления. В них существуют просто данные. Как и где они храняться в данный момент в железной машине, как ОЗУ отображать в ВЗУ - все эти вопросы рещаются внутри РСУБД внутри нашей табличной машины. Сама же она предоставляет данные в виде того, что я называю "табличной" памятью.\r \r Давайте дальше. Можно выделить два типа - адресный и ассоциативный. Первый означает, что для доступа к данным мы используем адрес переменной, где эти данные храняться. Второй означает, что для доступа к данным мы должны найти их, среди других данных. Первый конечно быстрее, но за счет чего? за счет того, что мы используем возможности, предоставляемые системой хранения, то есть наши данные к этой системе хранения привязаны Второй способ (реализуемый реляционными системами), конечно медленнее, но зато он опирается только на данные, то есть от системы хранения не зависит. Если же разбирать этот вопрос более детально, то выясниться, что быстродействие - это единственный козырь адресного доступа (мы нашли быстро или не очень быстро, но в любом случае нашли). В конце концов, если бы дело упиралось только в быстродествие, то реляционные СУБД никогда не победили бы иерархические и сетевые системы, поскольку последние всегда будут быстрее.\r \r Зачем вообще говорить про адреса в ОЗУ и ВЗУ и про их привязку, если "табличная" машина позволяет вызвать некую процедуру просто по имени, то есть ассоциаивно? И OID у меня явлется "системным" только на уровне представления данных, а на уровне хранения он, наравне с другими данными, храниться в таблице и, следовательно, доступ к объекту реализуется так же ассоциативно (то ест OID вообще никаким боком к адресам на уровне железа не относиться).\r \r О чем я гвоврю? Например, следующий код, ОПИСЫВАЮЩИЙ данные на уровне представления данных\r \r Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
\r на уровне хранения фактически будет преобразован в набор хранимых ПРОЦЕДУР.\r \r CREATE TABLETYPE будет преобразован в процедуру создающую таблицу system_sometable уровня хранения, причем структура этой таблицы будет соответсвовать описанию полей sometable, плюс два системных поля 1)для OID и 2)для имени атрибута объекта (эта таблица будет использоваться для ВСЕХ объектных атрибутов типа sometable - это может быть t, это может быть другой атрибут этого класса или атрибут другого класса). Эта процедура будет вызвана либо сразу, либо тогда когда появиться первый хранимый объектный атрибут типа sometable. \r \r CREATE CLASS base_c будет преобразовано в процедуру, добавляющее в таблицу атрибута t (то есть в таблицу system_sometable) новой записи, системные поля которой будут содержать 1) OID создаваемого объекта и 2) имя атрибута "t". К тому же на этом этапе в каталог будет занесена информация, что значение атрибута t класса base_c хранится в таблице system_sometable.\r \r Теперь можно создавать объект Код: plaintext
Код: plaintext
Код: plaintext 1. 2. 3.
Соответсвенно и вся процедура уровня представления (например метод класса), где мы работаем со ссылочными переменными, объектными атрибутами и т.п. вещами присущими ОО языкам, на уровне хранения может быть преобразована в хранимую процедуру реляционной СУБД.\r \r И еще раз повторю - я не озабочен производительностью. Есть несколько причин\r 1) я не озабочен ей как ..мммм...теоретик :) По мне, так "табличные" машины (реляционные СУБД) работают бесконечно бысто. Для меня более важно, что бы троица "входное воздействие, реализация, результат" были ОДНОЗНАЧНО определены\r 2) Реальность такова, что "табличная" машина уже работают с приемлемой скоростьтю (в качестве примера можно привести все тот же топик "Система с изменяющимися алгоритмами рассчета".\r 3)В конце концов, я думаю, что UPDATE, подобный последнему не такая уж и страшная штука. Такие UPDATE\'ы приходиться делать много раз на дню, но то их пишут вручную, а тут их сгенерила система. Я уже писал, что ИМХО для производительности гораздо важнее то, что стуктура таблиц на уровне хранения определяется в общем то нормализацией данных, и практически не отличается от структуры аналогичной "традиционной" РБД. \r \r И если мы так сделаем, что вопрос\r >>6. НО... Это СУБД??? Или просто получили прикольную приложуху? \r отпадает сам собой. По большому счету он отпадает именно потому, что мы сохраняем главное преимущество РСУБД - ассоциативный доступ к данным, доступ по значениям и по именам, определенным в описании данных. Нам не обязательно хранить ссылку на объект. Мы можем всегда найти его среди других объектов класса base_c по его атрибуту t.i который равен единице. И никакие "объекты-хелперы для каждого прикладного класса, через которые можно перебрать все объекты класса" для этого в принципе не нужны. Система просто преобразует запрос, обращенный к классу base_c и к его атрибуту t в запрос к таблице system_sometable (так записано в каталоге классов). Там она может по i = 1 найти любые данные, и самое главное, она может найти OID(!) объекта, который может быть в дальнейшем использован. Другим словами, мы можем вернуть ссылку на объект по данным объекта . Реализация такого процесса в ОЗУ или ВЗУ (то есть в адресной памяти) дело ИМХО по крайне мере нетривиальное :).\r \r Далее. Если мы опишем конструктор\r \r Код: plaintext 1. 2. 3. 4.
то операцию\r Код: plaintext
мы сможем использовать не только в теле некоего метода, но и как команду НЕПРОЦЕДУРНОГО доступа к нашей системе (вот вам и расширение SQL). В принципе мы можем написать и просто\r Код: plaintext
однако в этом случае объект будет потерян, но не потому, что на него нет ссылки, а потому, что он не инициализирован какими-либо данными (то есть вновь всплывает различие между адресным и ассоциативным доступом). \r \r Так что я вижу реализацию иключительно средствами, предоставляемыми реляционными СУБД или, как я писал выше, "табличными" машиной. И (еще раз повторю) возможность такой реализации ИМХО очень убедительно показана в топике "Система с изменяющимися алгоритмами рассчета"....и все же это намек :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2003, 00:57 |
|
Объектно-ориентированная система управления реляциоными базами данных.
|
|||
---|---|---|---|
#18+
в продолжение темы www.fub.it/res/Tableofcontents.htm ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2003, 02:02 |
|
|
start [/forum/topic.php?fid=32&msg=32230258&tid=1546673]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
167ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 236ms |
total: | 509ms |
0 / 0 |