Database Support in Inferno / Поддержка баз данных в Inferno: Chapter 1
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Database Support in Inferno rapidfx 24.04.09 в 09:06 |
|
|
D. Knudsen rapidfx 24.04.09 в 09:06 |
||
|
DMTS Inferno OS Development Team rapidfx 24.04.09 в 09:06 |
||
|
(dknudsen@lucent.com) rapidfx 24.04.09 в 09:06 |
||
|
Lucent Technologies rapidfx 24.04.09 в 09:06 |
||
|
Bell Labs Innovations rapidfx 24.04.09 в 09:06 |
||
|
600 Mountain Ave. rapidfx 24.04.09 в 09:06 |
||
|
Murray Hill, NJ 07974 rapidfx 24.04.09 в 09:07 |
||
|
ОБЗОР
rapidfx 24.04.09 в 09:07 |
||
|
Мир баз данных разнороден, даже тот что поддерживает доступ через Structured Query Language (SQL). Inferno может обеспечить общий стандартный интерфейс к этому подмножеству баз данных услиливая мощь сетевой поддержкой, динамическим пространством имен, и надежной безопасностью. rapidfx 03.05.09 в 13:31 |
||
|
Вс первом выпуске Inferno включен интерфейс (API) к базам данных и удаленным сервисным программам, что позволяет разработчикам проектировать и реализовывать приложения баз данныхкоторые будут совместимы с последующими выпусками Inferno. rapidfx 03.05.09 в 13:35 |
||
|
API встроено в Dis как загружаемый модуль, который переговаривается с удаленным сервером с запущенной платформой базы данных. Сервер в свою очередь общается с базой данных. rapidfx 03.05.09 в 13:38 |
||
|
Разработчики приложений получат выгоду от следующих уникальных особенностей Inferno: rapidfx 03.05.09 в 13:40 |
||
|
При проектировании язык Limbo отражал лежащие в его основе возможности системы Inferno. В следствии этого, Limbo относительно "выразительный" язык, дает возможность быстрее разработать и написать приложение, с меньшими усилиями как на стадии кодирования, так на этапе отладки. rapidfx 03.05.09 в 17:19 |
||
|
Как и в случае с любым языком, который скомпилирован в код виртуальной машины и исполняется в подсистеме виртуальной машины, нет нужды портировать приложение на другую платформу (до тех пор, пока эта платформа поддерживается нативно или в хостед режиме -- и количество этих платформ ростет.) rapidfx 03.05.09 в 17:22 |
||
|
И поскольку Inferno-система намного меньше других операционных систем со сходными возможностями, Inferno-приложения на "тонких" клиентах, таких как приемники кабельного телевидения, сетевые компьютеры и продвинутые телефоны могут предоставить доступ к базам данных промышленного уровня. Для большинства устройств стесненных аппаратными ресурсами, приложение может быть запущено на сервере, используя "клиента" в качестве устройства предоставляющего ввод-вывод. rapidfx 03.05.09 в 17:28 |
||
|
С Inferno, приложения баз данных получают новое и расширенное применение на широком спектре сетевых устройств. Такое использование включает персонифицированные сервисы, электронную коммерцию, информационные подсказки, и т.п. rapidfx 03.05.09 в 18:35 |
||
|
Кошда разработчику приложений баз данных нужен простой, единообразный интерфейс API, который позволяет стандартизированный доступ к (вероятно удаленным) базам даных на не-Inferno платформах. Inferno дает такую поддержку, в виде двух различных подходов. Первый, часть загружаемого модуля Dis, DB, написанного на Limbo, и предоставляет API делающий возможным доступ к любой базе данных поддерживающей SQL. Второй, часть программного обеспечения Inferno для поддержки баз данных на сервере. rapidfx 03.05.09 в 18:41 |
||
|
Разработчик получает доступ к модулю DB стандартным образом в Limbo (смотри Главу 6, Определения языка Limbo, в Руководстве пользователя Inferno, для получения информации об особенностях синтаксиса и семантики Limbo) rapidfx 03.05.09 в 18:43 |
||
|
include "db.m"; : db := load DB DB->PATH; rapidfx 03.05.09 в 18:45 |
||
|
Модуль DB содержит одну функцию, open, и один абстрактный тип данных (adt), DB_Handle. Вфзов функции осуществляется следующим образом: rapidfx 03.05.09 в 18:46 |
||
|
dh : ref DB->DB_Handle;
rapidfx 03.05.09 в 18:46 |
||
|
где первая строка объявляет переменную хранящуюю запись adt, а вторая строка вызывает функцию и заполняет запись. (Если вызов функции терпит неудачу, errs содержит описание сбоя.) rapidfx 03.05.09 в 18:59 |
||
|
(status, errmsg) = dh.SQL(sql_command); rapidfx 03.05.09 в 18:47 |
||
|
numcols = dh.columns(); rapidfx 03.05.09 в 18:47 |
||
|
row = dh.nextRow(); rapidfx 03.05.09 в 18:47 |
||
|
(status, field) = dh.read(col_number); rapidfx 03.05.09 в 18:47 |
||
|
count = dh.write(param_position, field); rapidfx 03.05.09 в 18:47 |
||
|
col_name = dh.columnTitle(col_number); rapidfx 03.05.09 в 18:47 |
||
|
Первая из них запрос в форме Structured Query Language (SQL), к серверу. Если запрос выдал набор результатов (обычно вывод запроса select), тогда columns содержит число колонок в результирующем наборе, nextRow переходит к следующей строке результата, за один раз, и columnTitle и read возвращает заголовки колонок и значение текущей строки соответственно. Имена колонок возвращаются как строки, в то время как значения полей возвращаются в виде массива байт, в следствии возможности появления двоичных данных (все другие типы данных, включая числовые и дату, возвращаются как стоки). rapidfx 03.05.09 в 19:04 |
||
|
Функция write используется только тогда, когда приложение должно вставить или обновить двоичные данные в поле; потребность в этом существует из-за того, что соответствующий запрос SQL не может содержать двоичных данных, только местодержатели (placeholders) представляют действительные данные. Аргумент param_position это целое число (1, 2, и т.д.) ссылается на первый, второй и т.д. местодержатели в SQL подзапросе. Параметр field это массив байт, для возможности передачи двоичных данных. rapidfx 03.05.09 в 19:22 |
||
|
Разработчики приложений баз данных могут разрабатывать более сложные и специализированные функции вместо этих общих и низко-уровневых функций.
rapidfx 03.05.09 в 19:29 |
||
|
Модуль DB позволяетнапрямую использовать концепцию пространства имен Inferno для реализации простого дизайна. В общем, функция open открывает сетевое соединение к указанному сервису, путем указания сетевого адреса. При помощи монтирования директории в локальное пространство имен, в этой директории удаленный конец является набором файлов для "обслуживания". Затем за open, обслуживаемые файлв получают поддержку API, или если программист предпочтет, то может читать или писать напрямую через файловые дескрипторы в adt DB_Handle. rapidfx 03.05.09 в 19:29 |
||
|
Плотно связанный с API, обслуживаемые файлы это: ctl, SQL, cols, row, entry, and title. Файл ctl используется только для отправки имени пользователя, пароля и имени базы данных удаленном у концу. Файл SQL используется для записи запросов SQL для удаленной стороны, а оставшиеся файлы используются для реализации соответствующих API. Например, для реалтзации функции чтения, указанный номер колонки записывается в файл cols, и после этого считывается файл entry, до конца файла (eof), для получения значенийполей в колонке текущей строки. rapidfx 03.05.09 в 19:39 |
||
|
Преимущества такой реализации в том, что данные отсылаются взад и вперед от клиента к серверу, инкапсулированными в пакеты Styx, таким образом могут использоваться все достоинства безопасности протокола Styx. rapidfx 03.05.09 в 19:42 |
||
|
Вторая часть программного обеспечения предоставляемого Inferno для поддержки баз данных это сервер. Разработчик не должен напрямую взаимодействовать с сервером, который скрывает все сложности получения данных из настоящих баз. rapidfx 03.05.09 в 19:47 |
||
|
существующие СУБД работают на платформах отличных от Inferno, и rapidfx 03.05.09 в 19:49 |
||
|
разновидности существующих СУБД затрудняют написание общей программы для доступа к базам данных. rapidfx 03.05.09 в 19:51 |
||
|
Второй аспект проистекает из исторической драмы разыгрывающейся между производителями с их желаниями к специализации и желанием пользователей к стандартизации. SQL это давний, продолжающий развиваться язык, борющийся за стандартизацию синтаксиса и семантики сообщений передаваемых между приложениями баз данных и СУБД. Большинство коммерческих СУБД сегодня поддерживают SQL. rapidfx 03.05.09 в 20:00 |
||
|
К несчастью, SQL это эволюционизирующий стандарт. Начальный чтандарт был принят в 1986, затем был SQL 89, текущий SQL 92, и новый находится в работе. Пока изменения, обратно-совместимы, различные выпуски разных производителей СУБД поддерживают разные стандарты. rapidfx 03.05.09 в 20:03 |
||
|
В лобавок, существует несколько рограммных интерфейсов к SQL, включая статические и динамические встроенные SQL и интерфейсы уровня вызова (CLI). Основатель (образующее основание/основа) техник встроенных выражений SQL в других языках, вызывает для использования препроцессор. Различия между статической и динамической версиями в том, что основатель, SQL выражения неизменны во время компиляции, в то же время они могут создаваться во время выполнения. CLI это набор API поддерживаемый библиотекой функций. rapidfx 03.05.09 в 20:12 |
||
|
И наконец, производители не стеснялись предоставлять закрытые проприетарные расширения к SQL и их CLI. rapidfx 04.05.09 в 08:55 |
||
|
Общим примером CLI является интерфейс Open Database Connectivity (ODBC), работающий на различных платформах Microsoft Windows. ODBC не ограничен конкретными СУБД, но зависит от производителей СУБД которые должны написать драйвер, в форме динамически загружаемой библиотеки поддерживающей предопределенный набор API. На текущий момент такие драйвера есть для большинства СУБД, ODBC предоставляет "практически универсальный" доступ к базам данных, пока есть соглашение на самом низком уровне между ODBC и SQL. rapidfx 04.05.09 в 09:01 |
||
|
Производители также поздно начали поддерживать серверы позволяющие обращаться клиентским приложениям к их СУБД по сети. И снова, к несчастью, протоколы используемые этими серверами закрытые. rapidfx 04.05.09 в 09:03 |
||
|
Суть вышесказанного, в том, что приложения баз данных соединены с базами данных через некий прозрачный клей, который предоставлен производителем СУБД, и обычно написан на языке C, и верояно потребуется запуск препроцессора перед компиляцией. rapidfx 04.05.09 в 09:09 |
||
|
Общая архитектура для поддержки баз данных в Inferno, такова: rapidfx 04.05.09 в 09:10 |
||
|
В случае установки Inferno поверх основной ОС на платформе базы данных для обслуживания специальных файлов представляющих базу данных в модуле DB. Кавычки вокруг квадрата "Стандарт" в приложении базы данных, оно должно отличаться для различных СУБД, и должны быть портированы на каждую платформу поддерживающую каждую СУБД/базу данных. (СУБД/база данных в действительности единой на разных платформах, детали соединения скрыты о приложения, производителем кода встроенного в приложение.) rapidfx 04.05.09 в 09:51 |
||
|
Стандартный метод для доступа к базам данных из Inferno задействует разные программные процессы и методы межпроцессных коммуникаций. Существуют способы увеличивающие эффективность доступа к базам данных содержащих большой объем данных передающихся в каждой транзакции, и команда разработчиков Inferno преследует эту цель. Но все изменения должны быть на удаленном конце и не затрагивать API, приложения написанные сегодня в сравнении DB API не нужно будет перекомпилировать, когда будут внесены улучшения. rapidfx 04.05.09 в 13:40 |
||
|
Выпуск Inferno 1.0 включает модуль DB с API полностью описанным выше, за исключением того, что там нет возможности обновления полей двоичного типа. rapidfx 04.05.09 в 13:42 |
||
|
Приложение баз данных "стандарт" включено в выпуск 1.0 это приложение ODBC которое запускается на Windows 95 и Windows NT и общается с модулем DB (нет необходимости в Inferno поверх основной ОС). Эта программа, называемая infdb, поддерживает синхронные соединения от нескольких Inferno-процессов к одной или разным базам данных. rapidfx 04.05.09 в 13:47 |
