Sedna (база данных) — различия между версиями

Материал из Национальной библиотеки им. Н. Э. Баумана
(не показана одна промежуточная версия этого же участника)
Строка 11: Строка 11:
 
}}
 
}}
 
'''Sedna''' - СУБД, разработанная специально для хранения и обработки XML-данных отделом управления данными и информационных систем Института системного программирования РАН.
 
'''Sedna''' - СУБД, разработанная специально для хранения и обработки XML-данных отделом управления данными и информационных систем Института системного программирования РАН.
 +
 +
==О СУБД==
 +
Sedna - прирождённая (native) XML-СУБД, она была разработана, чтобы облегчить работу с большими объемами XML-данных.Она предоставляет полный набор основных сервисов баз данных: постоянное хранение, ACID-транзакции, безопасность, индексы, "горячее" резервное копирование. Работа с XML осуществляется при помощи специального языка XML Query (XQuery). Этот язык стандартизирован консорциумом W3C. При помощи XQuery на основе извлекаемых из БД данных можно генерировать непосредственно XHTML-страницы (или фрагменты страниц). Для работы с Sedna используется открытый сетевой протокол Sedna Client-Server Protocol. Sedna предоставляет API для работы с БД на множестве языков: C, Java, Scheme, PHP, Python, Scheme и др.
 +
 +
Разработчики Sedna стремились объединить в ней две системы: во-первых, полнофункциональную БД с поддержкой всех традиционных механизмов (запросы, обновление данных, обработка параллельных транзакций, оптимизация запросов), во-вторых - среду для обработки XML-данных с использованием различных языков программирования. С целью наиболее эффективной реализации этого функционала, СУБД разрабатывалась с нуля, а не в качестве надстройки над существующей.
 +
 +
==Архитектура==
 +
 +
"Центром" системы является ''Регулятор''. Он управляет подсистемами, контролирует выполнение транзакций. ''Слушатель'' отлавливает запросы на подключение новых клиентов. После авторизации клиента, ''Слушатель'' инкапсулирует его сессию в новом компоненте ''Подключение'', и устанавливает им прямую связь. Дальнейшая работа клиента происходит через ''Подключение''. При получении запроса на начало транзакции, компонент ''Подключение'' создаёт компонент ''Транзакция'', содержащий все необходимые для выполнения запроса компоненты: ''Парсер'', ''Оптимизатор'' и ''Исполнитель''.
 +
 +
В начале обработки запрос передаётся ''Парсеру'', который преобразует его в логическое представление (дерево операций). С деревом работает ''Оптимизатор'', который на его основе генерирует план выполнения запроса - дерево низкоуровневых операций над физическими структурами данных. ''Исполнитель'' взаимодействует с тем экземпляром ''Менеджера базы данных'', к которому направлен запрос, и выполняет полученный план.
 +
 +
Каждый ''Менеджер базы данных'' взаимодействует с единственной базой данных. Он содержит ''Менеджер индексов'', для работы с индексами над данной БД, ''Менеджер буферов'' для взаимодействия между реальной ОП и диском, ''Менеджер транзакций'' контролирует корректность параллельного выполнения транзакций.
 +
 +
==XQuery==
 +
XQuery - стандартизованный язык запросов для работы с документами, БД, веб-страницами и многим другим в формате XML. Он предоставляет средства для извлечения и управления данными из XML-документов, или любыми другими, которые могут быть представлены в виде XML.
 +
Он также позволяет создавать новые XML-документы. Он предоставляет синтаксис для работы как с элементами, атрибуты которых известны заранее, так и с динамически собираемыми узлами.
 +
Язык основан на XQuery and XPath Data Model (XDM), использующей древовидную модель данных XML-документа.
 +
 +
Основные отличия XQuery от SQL заключаются в различии моделей данных, для которых они предназначены: формат XML подразумевает иерархическое хранение данных, для него характерен внутренний порядок. Реляционные таблицы, на которые рассчитан SQL, являются однородными, линейными и, как правило, неупорядоченными.
 +
 +
XQuery подразумевает перемещение по иерархии документа XML, для чего поддерживается выражение пути. Он, в отличие от SQL, для которого данные всегда имеют конкретный тип, поддерживает как типизированные, так и не типизированные данные. Кроме того, поскольку в XML-документах недостающие или неизвестные данные пропускаются, в XQuery отсутствуют нулевые значения.
 +
 +
==Основные особенности Sedna==
 +
* Написана на C/C++
 +
* Исходный код доступен по лицензии Apache License 2.0
 +
* Поддерживает транзакции (модель ACID)
 +
* Поддерживает полнотекстовые индексы
 +
* Поддерживает язык XQuery, стандартизированный консорциумом W3C.
 +
* Поддерживает Юникод (UTF-8)
 +
* Поддерживает "горячее" инкрементальное резервное копирование
 +
* Поддерживает внешние XQuery функции, написанные на C.
 +
Кроме того, разработчики серьёзно заботятся о поддержке своего продукта: на официальном сайте действует центр поддержки, форум, активно принимаются багрепорты и предложения. Они предоставляют множество различных драйверов: API для Java/C/PHP/Python/Ruby/Perl/Delphi/C# и др., XML драйвера для Java, модуль для интеграции с Apache HTTP сервером.
 +
 +
==Применение Sedna==
 +
===Работа с иерархическими данными===
 +
Вполне очевидное применение XML-СУБД, поскольку сам формат XML подразумевает иерархичность. При этом иерархия данных может иметь произвольную глубину, что может замедлять работу баз данных, использующих объектно-реляционные отображения. Будучи прирождённой XML-СУБД, Sedna позволяет эффективно работать с таким типом данных.
 +
===Работа с объёмными XML-документами===
 +
Поскольку Sedna является прирождённой XML-СУБД, она будет удобна для обработки больших XML-документов. Во многих приложениях документы XML преобразуются с использованием процессоров XSLT или обрабатываются в модели DOM. Поскольку в этих случаях обычно требуется полная выгрузка рабочего элемента в память, а в той же модели DOM для этого требуется значительно больше памяти, обработка больших документов оказывается затруднительной. Использование XML-СУБД для хранения в ней узлов документа может значительно облегчить эту задачу.
 +
===Работа с полуструктурированными данными===
 +
Язык XQuery позволяет формулировать запросы без предварительного знания схемы документа. Это позволяет работать с данными, для которых характерна полуструктурированность: разреженность данных, возможность представления одного и того же вида данных разными способами, наличие произвольных дополнительных полей, что отстутсвует в реляционных системах, где структура данных задаётся жёстко.
 +
===Платформа для веб-приложений и управления контентом===
 +
Язык XQuery обладает тьюринговой полнотой, он поддерживает определение пользовательских функций. Таким образом, на нём можно полностью реализовать веб-приложение, которое будет возвращать данные в формате XHTML и реализовывать логику приложений. Таким образом, можно создать полноценное веб-приложение, используя только функционал Sedna. <br>Этот подход решает, с одной стороны, проблему потери соответствия при использовании различных языков внутри приложения. С другой стороны, это облегчает синтаксический анализ генерируемой XHTML-страницы.
 +
 +
 +
==Ссылки==
 +
*[http://sedna.org/ Официальный сайт проекта Sedna]
 +
*[http://sedna.org/download.html Скачать Sedna]
 +
*[https://www.w3.org/XML/Query/ Официальный сайт XQuery]
 +
*[http://wikixmldb.org/ Демо-версия Sedna на примере части англоязычной Википедии]
 +
 +
[[en:Sedna_(database)]]

Версия 23:06, 27 июня 2020

Sedna
fraimed
Разработчики: Институт системного программирования РАН
Написана на: C,C++
Операционная система: Кроссплатформенная
Тип ПО: База данных
Лицензия: Apache License 2.0
Веб-сайт официальный сайт

Sedna - СУБД, разработанная специально для хранения и обработки XML-данных отделом управления данными и информационных систем Института системного программирования РАН.

О СУБД

Sedna - прирождённая (native) XML-СУБД, она была разработана, чтобы облегчить работу с большими объемами XML-данных.Она предоставляет полный набор основных сервисов баз данных: постоянное хранение, ACID-транзакции, безопасность, индексы, "горячее" резервное копирование. Работа с XML осуществляется при помощи специального языка XML Query (XQuery). Этот язык стандартизирован консорциумом W3C. При помощи XQuery на основе извлекаемых из БД данных можно генерировать непосредственно XHTML-страницы (или фрагменты страниц). Для работы с Sedna используется открытый сетевой протокол Sedna Client-Server Protocol. Sedna предоставляет API для работы с БД на множестве языков: C, Java, Scheme, PHP, Python, Scheme и др.

Разработчики Sedna стремились объединить в ней две системы: во-первых, полнофункциональную БД с поддержкой всех традиционных механизмов (запросы, обновление данных, обработка параллельных транзакций, оптимизация запросов), во-вторых - среду для обработки XML-данных с использованием различных языков программирования. С целью наиболее эффективной реализации этого функционала, СУБД разрабатывалась с нуля, а не в качестве надстройки над существующей.

Архитектура

"Центром" системы является Регулятор. Он управляет подсистемами, контролирует выполнение транзакций. Слушатель отлавливает запросы на подключение новых клиентов. После авторизации клиента, Слушатель инкапсулирует его сессию в новом компоненте Подключение, и устанавливает им прямую связь. Дальнейшая работа клиента происходит через Подключение. При получении запроса на начало транзакции, компонент Подключение создаёт компонент Транзакция, содержащий все необходимые для выполнения запроса компоненты: Парсер, Оптимизатор и Исполнитель.

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

Каждый Менеджер базы данных взаимодействует с единственной базой данных. Он содержит Менеджер индексов, для работы с индексами над данной БД, Менеджер буферов для взаимодействия между реальной ОП и диском, Менеджер транзакций контролирует корректность параллельного выполнения транзакций.

XQuery

XQuery - стандартизованный язык запросов для работы с документами, БД, веб-страницами и многим другим в формате XML. Он предоставляет средства для извлечения и управления данными из XML-документов, или любыми другими, которые могут быть представлены в виде XML. Он также позволяет создавать новые XML-документы. Он предоставляет синтаксис для работы как с элементами, атрибуты которых известны заранее, так и с динамически собираемыми узлами. Язык основан на XQuery and XPath Data Model (XDM), использующей древовидную модель данных XML-документа.

Основные отличия XQuery от SQL заключаются в различии моделей данных, для которых они предназначены: формат XML подразумевает иерархическое хранение данных, для него характерен внутренний порядок. Реляционные таблицы, на которые рассчитан SQL, являются однородными, линейными и, как правило, неупорядоченными.

XQuery подразумевает перемещение по иерархии документа XML, для чего поддерживается выражение пути. Он, в отличие от SQL, для которого данные всегда имеют конкретный тип, поддерживает как типизированные, так и не типизированные данные. Кроме того, поскольку в XML-документах недостающие или неизвестные данные пропускаются, в XQuery отсутствуют нулевые значения.

Основные особенности Sedna

  • Написана на C/C++
  • Исходный код доступен по лицензии Apache License 2.0
  • Поддерживает транзакции (модель ACID)
  • Поддерживает полнотекстовые индексы
  • Поддерживает язык XQuery, стандартизированный консорциумом W3C.
  • Поддерживает Юникод (UTF-8)
  • Поддерживает "горячее" инкрементальное резервное копирование
  • Поддерживает внешние XQuery функции, написанные на C.

Кроме того, разработчики серьёзно заботятся о поддержке своего продукта: на официальном сайте действует центр поддержки, форум, активно принимаются багрепорты и предложения. Они предоставляют множество различных драйверов: API для Java/C/PHP/Python/Ruby/Perl/Delphi/C# и др., XML драйвера для Java, модуль для интеграции с Apache HTTP сервером.

Применение Sedna

Работа с иерархическими данными

Вполне очевидное применение XML-СУБД, поскольку сам формат XML подразумевает иерархичность. При этом иерархия данных может иметь произвольную глубину, что может замедлять работу баз данных, использующих объектно-реляционные отображения. Будучи прирождённой XML-СУБД, Sedna позволяет эффективно работать с таким типом данных.

Работа с объёмными XML-документами

Поскольку Sedna является прирождённой XML-СУБД, она будет удобна для обработки больших XML-документов. Во многих приложениях документы XML преобразуются с использованием процессоров XSLT или обрабатываются в модели DOM. Поскольку в этих случаях обычно требуется полная выгрузка рабочего элемента в память, а в той же модели DOM для этого требуется значительно больше памяти, обработка больших документов оказывается затруднительной. Использование XML-СУБД для хранения в ней узлов документа может значительно облегчить эту задачу.

Работа с полуструктурированными данными

Язык XQuery позволяет формулировать запросы без предварительного знания схемы документа. Это позволяет работать с данными, для которых характерна полуструктурированность: разреженность данных, возможность представления одного и того же вида данных разными способами, наличие произвольных дополнительных полей, что отстутсвует в реляционных системах, где структура данных задаётся жёстко.

Платформа для веб-приложений и управления контентом

Язык XQuery обладает тьюринговой полнотой, он поддерживает определение пользовательских функций. Таким образом, на нём можно полностью реализовать веб-приложение, которое будет возвращать данные в формате XHTML и реализовывать логику приложений. Таким образом, можно создать полноценное веб-приложение, используя только функционал Sedna.
Этот подход решает, с одной стороны, проблему потери соответствия при использовании различных языков внутри приложения. С другой стороны, это облегчает синтаксический анализ генерируемой XHTML-страницы.


Ссылки