Лекция
Game: Perform tasks and rest cool.2 people play!
Play gameПривет, мой друг, тебе интересно узнать все про возможности оосубд, тогда с вдохновением прочти до конца. Для того чтобы лучше понимать что такое возможности оосубд , настоятельно рекомендую прочитать все из категории Представление и использование знаний.
Объектно-ориентированная база данных (ООБД) — база данных, в которой данные моделируются в виде объектов , их атрибутов, методов и классов .
Системы искусственного интеллекта требуют наличия подсистем хранения и обработки данных и знаний. База знаний должна обеспечить хранение и обработку огромного количества информационных взаимосвязей. Этому требованию соответствуют базы данных/знаний построенные на основе сетевой модели данных. Одним из перспективных направлений позволяющих обеспечить хранение и обработку сложно структурированных данных и знаний являются объектно-ориентированные системы. Как было показано в объектно-ориентированные базы данных должны разрабатываться с учетом применения в системах искусственного интеллекта. В связи с этим разработка объектно-ориентированной системы управления сетевой базой данных/знаний специально предназначенной для применения в системах искусственного интеллекта является актуальной научной задачей. Целью данной работы является анализ внутренней архитектуры сетевой объектно-ориентированной базы данных/знаний и возможности ее применения в системах искусственного интеллекта.
Пример объектно-ориентированной модели
Идентификация экземпляров
В СООБЗ Cerebrum применяются "мягкие" указатели. Идентификатор объекта можно рассматривать как указатель на объект в памяти системы. Однако от запуска к запуску указатель в памяти на объект, очевидно, не будет постоянен. Для того чтобы избежать необходимости модификации объектов в БД систему реализуют так, чтобы идентификатор объекта не зависел от времени. Это можно сделать по-разному, через индексы, двойную разадресацию ... В Cerebrum применяются мягкие идентификаторы объектов. В одном контексте адресации одному идентификатору всегда соответствует один и тот же объект. Тип данных для идентификатора объекта -Cerebrum.Runtime.NativeHandle. Размер идентификатора объекта - 32 бита. Поиск объекта в индексе по его идентификатору происходит в три этапа. 32 бита разбиваются на 12, 12 и 8 бит. По этим значением строится 3х уровневое дерево индексов. Коллекции объектов организованы на основании того же механизма. Коллекция представляет собой такой же индекс 12-12-8, который производит отображение одного идентификатора на другой идентификатор.
Game: Perform tasks and rest cool.2 people play!
Play gameСборка мусора
Game: Perform tasks and rest cool.2 people play!
Play gameНаименее часто используемые объекты автоматически вытесняются на систему долговременного хранения, освобождая оперативную память. Поэтому в любой момент возможно принудительное вытеснение и разрушение любого незаблокированного пользовательского объекта. Если пользователь получил указатель на некоторый объект и не провел операцию блокировки, то сборщик мусораCerebrum может посчитать этот объект неиспользуемым и принудительно вытеснить его из оперативной памяти. В результате по этому указателю в памяти будет находиться разрушенный экземпляр объекта. Для предотвращения такого явления вместо указателей на экземпляры пользовательских объектов при разадресации идентификатора возвращается указатель на объект-оболочку IConnector. В конструкторе объекта-оболочки производится увеличение счетчика блокировок объекта, в деструкторе - уменьшение счетчика блокировок. Пока хоть одна оболочка находится в памяти, счетчик блокировок не равен 0 и соответствующий этой оболочке объект защищен от разрушения. Это позволяет предотвратить вытеснение пользовательского экземпляра во время его использования. Использовать указатели на пользовательский экземпляр без сохранения указателя на оболочку IConnectorнельзя. Важной особенностью данной системы является необходимость вызова метода Dispose у всех объектов-оболочек для предотвращения чрезмерного расхода памяти.
У объекта оболочки IConnector есть свойство Component, через которое доступен пользовательский экземпляр. В большинстве случаев паттерн работы с объектом выглядит следующим образом:
using(IComposite composite =
this.m_Connector.Workspace.AttachConnector(h))
{
ISomeInterface node =
(ISomeInterface)composite.Component;
result = node.SomeMethod(connector, …);
…
}
При разадресации по идентификатору h объекта в методеthis.m_Connector.Workspace.AttachConnector возвращается его оболочка IConnector.После завершения работы с объектом эту оболочку необходимо разрушить, вызвав метод Dispose. Директивы языка C# using() нужны, чтобы гарантировать удержание объекта в памяти во время вызова его методов, а затем гарантировать вызов Disposeпосле окончания работы с объектом. По выходу из using автоматически вызываетсяDispose и разрушает объект-оболочку. При разрушении объект-оболочка уменьшит счетчик блокировок. Когда все оболочки будут разрушены и счетчик блокировок достигнет 0 экземпляр пользовательского объекта станет доступным для вытеснения из оперативной памяти. Если же по каким то причинам using не применим, и пользователь забыл или не смог провести вызов Dispose то сам .NET Frameworkвызовет Dispose в процессе сборки мусора. В результате утечки памяти не возникнет даже при наличии ошибок программиста.
Game: Perform tasks and rest cool.2 people play!
Play gameGame: Perform tasks and rest cool.2 people play!
Play gameМодель данных
Модель данных в СООБЗ Cerebrum представляет собой граф с раскрашенными ребрами, узлы графа являются объектами. Объект так же может представлять собой граф с раскрашенными ребрами в узлах которого находятся другие объекты. Каждое ребро имеет только один "цвет". Цвет не является объектом, цвет имеет тот же тип что и идентификатор объекта (Cerebrum.Runtime.NativeHandle). Цвет ребра соответствует типу связи между узлами. Если необходимо сопоставить цвет ребра с каким либо объектом, нужно создать некоторый объект и взять его NativeHandle в качестве “цвета” для раскраски ребра. Таким образом, можно раскрасить ребра в "цвета" экземпляров объектов. Или другими словами: создавать объекты, соответствующие цветам ребер. Если нужно имитировать раскраску ребра множеством цветов, то надо делать несколько ребер, каждое разного "цвета".
В пределах некоторого узла возможно создание дочерних объектов, адресуемых в пределах этого узла некоторыми уникальными NativeHandle. Эти идентификаторы могут быть одинаковыми для разных дочерних объектов в пределах разных родительских объектов. Это позволяет устанавливать реляционную связь (по значению) между дочерними объектами разного уровня разных родительских объектов.
Узел в Cerebrum является агрегатом нескольких объектов. Во-первых, это объект ядраKernel Object. Тип объекта ядра KernelObjectClass определяет роль данного узла в модели данных. Kernel Object представляет собой native VNPI Object реализованный на языке C. У прикладного разработчика непосредственный доступ к этому объекту отсутствует. Работа с Kernel Object осуществляется посредством объекта-оболочки. Тип объекта-оболочки, возвращаемого при разадресации, зависит от типа объекта ядра. Непосредственно в Cerebrum.Runtime.dll для использования доступны 3 различные типа объектов ядра. Это Scalar, Stream и Warden. Scalar объекты служат для создания узлов, хранящих скалярные значения, например System.Int32 илиSystem.String. Такие узлы не могут вступать в связь с другими узлами в качестве родительских объектов. Или, что то же самое, такие узлы не могут являться источниками связей. Узлы типа Scalar могут выступать только в качестве дочерних объектов. Узлы типа Stream похожи на узлы Scalar, но в место скалярных значений они хранят потоки байт по аналогии с полем BLOB в РСУБД.
Узлы типа Warden могут быть связанны с другими узлами с помощью однонаправленных связей. Каждой связи должен быть назначен идентификатор. Из узла источника связи возможно обнаружить связанный с ним экземпляр. Однако из узла, на который указывает связь, невозможно определить ни узлы, их которых исходят связи, ни сам факт наличия связи. Можно сказать, что узел источник связи является родительским объектом, а узел приемник связи – дочерним. При этом нельзя для некоторого конкретного объекта определить родительский объект. Таких родительских узлов у каждого экземпляра может быть несколько. Для совместимости с паттерномflyweight в узлах в Cerebrum не храниться ссылки на родительские узлы, и также невозможно определить идентификатор текущего объекта из внутреннего контекста этого объекта.
Вторым объектом в агрегате является экземпляр, реализующий интерфейс IConnector. Экземпляр этого объекта создается и предоставляется СООБЗ. Этот экземпляр передается в пользовательский объект при его инициализации. Через свойствоIConnector.Workspace пользовательский объект имеет доступ к экземпляру, реализующему интерфейс IWorkspace.
Третьим объектом в агрегате является экземпляр пользовательского persistentобъекта. Особые ограничения на этот объект не накладываются. Он может быть экземпляром любого класса среды .NET Framework унаследованного от System.Object. В случае если пользовательский объект является reference type то будет рационально реализовать в этом объекте интерфейсы IComponent и при необходимостиIPersistent/IDiscovery. Рекомендуется наследовать пользовательские reference typeобъекты от Cerebrum.Integrator.GenericComponent. Если родительский объект получил по идентификатору адрес объекта оболочки дочернего объекта, то экземпляр дочернего пользовательского объекта доступен через свойство IConnector.Component.
Для того чтобы получить указатель на экземпляр пользовательского объекта необходимо вызвать метод AttachConnector в контексте родительского объекта, передав в качестве параметра идентификатор экземпляра, адресующий дочерний объект в пределах родительского контекста. В результате вызова данного метода система вернет новый экземпляр объекта-оболочки, реализующей интерфейсыIConnector и IComposite. Тип объекта оболочки зависит от типа Kernel Objectнаходящегося в данном узле. Объект-оболочка также предоставляет прикладному программисту интерфейсы к функциональности Kernel Object. В случае если в качестве объекта ядра был задан Warden объект оболочка дополнительно реализует и интерфейс IContainer.
Game: Perform tasks and rest cool.2 people play!
Play gameGame: Perform tasks and rest cool.2 people play!
Play gameВыводы
Предложенный способ идентификации экземпляров объектов включает в себя общепринятый в ООБД как частный случай и позволяет избавиться от некоторых проблем, присущих существующим ООБД. Поддержка сетевой модели данных в ядреCerebrum позволяет на ее основе реализовать такие модели как иерархические семантические сети и семантические сети фреймов. Поддержка методов у сохраняемых объектов позволяет реализовать активные семантические сети и искусственные нейронные сети. Благодаря наличию автоматической сборки мусора, управление временем жизни объектов и ресурсами берет на себя СУБЗ. Разработчику остается инициализировать БД и далее сосредоточиться на решении поставленной задачи. Это делает среду сетевой объектно-ориентированной базы знаний/данныхCerebrum очень удобным и перспективным инструментом для разработок систем искусственного интеллекта.
Если я не полностью рассказал про возможности оосубд? Напиши в комментариях Надеюсь, что теперь ты понял что такое возможности оосубд и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Представление и использование знаний
Комментарии
Оставить комментарий
Представление и использование знаний
Термины: Представление и использование знаний