Готовый перевод Database Support in Inferno / Поддержка баз данных в Inferno: Chapter 1

Database Support in Inferno

оригинал расположен по адресу: http://agni.csa.iisc.ernet.in/OperatingSystems/Inferno/dbinterface/dbinterface.html

D. Knudsen

DMTS Inferno OS Development Team

(dknudsen@lucent.com)

Lucent Technologies

Bell Labs Innovations

600 Mountain Ave.

Murray Hill, NJ 07974

ОБЗОР
Inferno это операционная система которая предоставляет инфраструктуру для рапределенных, сетевых приложений. Inferno дает возможность любому приложению, написанному на языке программирования Limbo, запускаться под вирутальной машиной Dis на всем множестве платформ и сетей. Inferno предоставляет файло-образный интерфейс к ресурсам и сервисам что дает возможность динамически конструировать пльзовательское пространство имен. Приложение Inferno может получить доступ к ресурсам и сервисам в этом пространстве имен даже в том случае если они располжены в сети. Компонент Inferno, Styx, предоставляет прозрачную коммуникационную среду со встроенными средствами безопасности над различными сетями.

Мир баз данных разнороден, даже тот что поддерживает доступ через Structured Query Language (SQL). Inferno может обеспечить общий стандартный интерфейс к этому подмножеству баз данных услиливая мощь сетевой поддержкой, динамическим пространством имен, и надежной безопасностью.

Вс первом выпуске Inferno включен интерфейс (API) к базам данных и удаленным сервисным программам, что позволяет разработчикам проектировать и реализовывать приложения баз данныхкоторые будут совместимы с последующими выпусками Inferno.

API встроено в Dis как загружаемый модуль, который переговаривается с удаленным сервером с запущенной платформой базы данных. Сервер в свою очередь общается с базой данных.

Введение

Разработчики приложений получат выгоду от следующих уникальных особенностей Inferno:

При проектировании язык Limbo отражал лежащие в его основе возможности системы Inferno. В следствии этого, Limbo относительно "выразительный" язык, дает возможность быстрее разработать и написать приложение, с меньшими усилиями как на стадии кодирования, так на этапе отладки.

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

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

С Inferno, приложения баз данных получают новое и расширенное применение на широком спектре сетевых устройств. Такое использование включает персонифицированные сервисы, электронную коммерцию, информационные подсказки, и т.п.

Модуль DB

Кошда разработчику приложений баз данных нужен простой, единообразный интерфейс API, который позволяет стандартизированный доступ к (вероятно удаленным) базам даных на не-Inferno платформах. Inferno дает такую поддержку, в виде двух различных подходов. Первый, часть загружаемого модуля Dis, DB, написанного на Limbo, и предоставляет API делающий возможным доступ к любой базе данных поддерживающей SQL. Второй, часть программного обеспечения Inferno для поддержки баз данных на сервере.

Разработчик получает доступ к модулю DB стандартным образом в Limbo (смотри Главу 6, Определения языка Limbo, в Руководстве пользователя Inferno, для получения информации об особенностях синтаксиса и семантики Limbo)

include "db.m"; : db := load DB DB->PATH;

Модуль DB содержит одну функцию, open, и один абстрактный тип данных (adt), DB_Handle. Вфзов функции осуществляется следующим образом:

dh : ref DB->DB_Handle;
(dh, errs) = open(addr, user, password, dbname);

где первая строка объявляет переменную хранящуюю запись adt, а вторая строка вызывает функцию и заполняет запись. (Если вызов функции терпит неудачу, errs содержит описание сбоя.)
Функция open иллюстрирует способность Limbo-функций возвращать множество значений в форме тьюплов. Это типичное использование, где первый элемент тьюпла не nil, а второй nil в случае успешного вызова, и наооборот true если вызов был неудачен. addr is это строка в виде netaddr!service, где netaddr это сетевой адрес сервера баз данных, например, db.server.lucent.com, и service общепринятое название infdb, сервиса баз данных Inferno. Строки user и password требуются многими СУБД для контроля доступа к данным в базе называнной dbname (это также строка). Возвращаемое значение dh ссылается на запись абстрактного типа данных, DB_Handle, которая включает функции нужные для манипулирования открытой базой данных:

(status, errmsg) = dh.SQL(sql_command);

numcols = dh.columns();

row = dh.nextRow();

(status, field) = dh.read(col_number);

count = dh.write(param_position, field);

col_name = dh.columnTitle(col_number);

Первая из них запрос в форме Structured Query Language (SQL), к серверу. Если запрос выдал набор результатов (обычно вывод запроса select), тогда columns содержит число колонок в результирующем наборе, nextRow переходит к следующей строке результата, за один раз, и columnTitle и read возвращает заголовки колонок и значение текущей строки соответственно. Имена колонок возвращаются как строки, в то время как значения полей возвращаются в виде массива байт, в следствии возможности появления двоичных данных (все другие типы данных, включая числовые и дату, возвращаются как стоки).

Функция write используется только тогда, когда приложение должно вставить или обновить двоичные данные в поле; потребность в этом существует из-за того, что соответствующий запрос SQL не может содержать двоичных данных, только местодержатели (placeholders) представляют действительные данные. Аргумент param_position это целое число (1, 2, и т.д.) ссылается на первый, второй и т.д. местодержатели в SQL подзапросе. Параметр field это массив байт, для возможности передачи двоичных данных.

Разработчики приложений баз данных могут разрабатывать более сложные и специализированные функции вместо этих общих и низко-уровневых функций.

Подробнее о модуле

Модуль DB позволяетнапрямую использовать концепцию пространства имен Inferno для реализации простого дизайна. В общем, функция open открывает сетевое соединение к указанному сервису, путем указания сетевого адреса. При помощи монтирования директории в локальное пространство имен, в этой директории удаленный конец является набором файлов для "обслуживания". Затем за open, обслуживаемые файлв получают поддержку API, или если программист предпочтет, то может читать или писать напрямую через файловые дескрипторы в adt DB_Handle.

Плотно связанный с API, обслуживаемые файлы это: ctl, SQL, cols, row, entry, and title. Файл ctl используется только для отправки имени пользователя, пароля и имени базы данных удаленном у концу. Файл SQL используется для записи запросов SQL для удаленной стороны, а оставшиеся файлы используются для реализации соответствующих API. Например, для реалтзации функции чтения, указанный номер колонки записывается в файл cols, и после этого считывается файл entry, до конца файла (eof), для получения значенийполей в колонке текущей строки.

Преимущества такой реализации в том, что данные отсылаются взад и вперед от клиента к серверу, инкапсулированными в пакеты Styx, таким образом могут использоваться все достоинства безопасности протокола Styx.

Модуль Server

Вторая часть программного обеспечения предоставляемого Inferno для поддержки баз данных это сервер. Разработчик не должен напрямую взаимодействовать с сервером, который скрывает все сложности получения данных из настоящих баз.
Это сложно потому что:

существующие СУБД работают на платформах отличных от Inferno, и

разновидности существующих СУБД затрудняют написание общей программы для доступа к базам данных.

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

К несчастью, SQL это эволюционизирующий стандарт. Начальный чтандарт был принят в 1986, затем был SQL 89, текущий SQL 92, и новый находится в работе. Пока изменения, обратно-совместимы, различные выпуски разных производителей СУБД поддерживают разные стандарты.

В лобавок, существует несколько рограммных интерфейсов к SQL, включая статические и динамические встроенные SQL и интерфейсы уровня вызова (CLI). Основатель (образующее основание/основа) техник встроенных выражений SQL в других языках, вызывает для использования препроцессор. Различия между статической и динамической версиями в том, что основатель, SQL выражения неизменны во время компиляции, в то же время они могут создаваться во время выполнения. CLI это набор API поддерживаемый библиотекой функций.

И наконец, производители не стеснялись предоставлять закрытые проприетарные расширения к SQL и их CLI.

Общим примером CLI является интерфейс Open Database Connectivity (ODBC), работающий на различных платформах Microsoft Windows. ODBC не ограничен конкретными СУБД, но зависит от производителей СУБД которые должны написать драйвер, в форме динамически загружаемой библиотеки поддерживающей предопределенный набор API. На текущий момент такие драйвера есть для большинства СУБД, ODBC предоставляет "практически универсальный" доступ к базам данных, пока есть соглашение на самом низком уровне между ODBC и SQL.

Производители также поздно начали поддерживать серверы позволяющие обращаться клиентским приложениям к их СУБД по сети. И снова, к несчастью, протоколы используемые этими серверами закрытые.

Суть вышесказанного, в том, что приложения баз данных соединены с базами данных через некий прозрачный клей, который предоставлен производителем СУБД, и обычно написан на языке C, и верояно потребуется запуск препроцессора перед компиляцией.

Общая архитектура для поддержки баз данных в Inferno, такова:

В случае установки Inferno поверх основной ОС на платформе базы данных для обслуживания специальных файлов представляющих базу данных в модуле DB. Кавычки вокруг квадрата "Стандарт" в приложении базы данных, оно должно отличаться для различных СУБД, и должны быть портированы на каждую платформу поддерживающую каждую СУБД/базу данных. (СУБД/база данных в действительности единой на разных платформах, детали соединения скрыты о приложения, производителем кода встроенного в приложение.)

Стандартный метод для доступа к базам данных из Inferno задействует разные программные процессы и методы межпроцессных коммуникаций. Существуют способы увеличивающие эффективность доступа к базам данных содержащих большой объем данных передающихся в каждой транзакции, и команда разработчиков Inferno преследует эту цель. Но все изменения должны быть на удаленном конце и не затрагивать API, приложения написанные сегодня в сравнении DB API не нужно будет перекомпилировать, когда будут внесены улучшения.

Inferno 1.0

Выпуск Inferno 1.0 включает модуль DB с API полностью описанным выше, за исключением того, что там нет возможности обновления полей двоичного типа.

Приложение баз данных "стандарт" включено в выпуск 1.0 это приложение ODBC которое запускается на Windows 95 и Windows NT и общается с модулем DB (нет необходимости в Inferno поверх основной ОС). Эта программа, называемая infdb, поддерживает синхронные соединения от нескольких Inferno-процессов к одной или разным базам данных.

Эта комбинация должна быть достаточной для того, чтобы позволить разработчику написать пробные приложения. Будущие выпуски Inferno могут содержать новые версии модуля DB дополнительные программы-серверы баз данных (например, для увеличения производительности и безпасности), но приложения написанные с использованием текущего API не потребуют изменений.

Переведено на Нотабеноиде
http://notabenoid.org/book/2371/7983

Переводчики: rapidfx

Настройки

Готово:

100.00% КП = 1.0