Под термином xBase-технологии следует понимать те СУБД, которые
имели массовое распространение несколько лет назад и являлись
преимущественно однопользовательскими, файл-ориентированными
системами. Это не только DBF-совместимые системы типа dBase IV,
Clipper, FoxPro, но и системы типа Paradox, Clarion и прочие.
Последние хотя и отличались технически от первых, но были очень
схожи идеологически. Поэтому если где-то в тексте встречается
упоминание про xBase, то под ним имеются в виду все вышеупомянутые
СУБД.
Принципы работы xBase-систем здесь освещаться не будут, так как
они достаточно хорошо известны.
Золотой век xBase-систем.
10 лет назад, когда слово 'хакер' еще не было ругательством, а
каждый нормальный программист легко отвечал на вопрос о том, что
такое INT21 и для чего надо помещать '20 в двадцатый порт', в среде
'нормальных' программистов считалось что заниматься
программированием на Clipper и ему подобных можно только, если
сильно нужны деньги или больше нечем заняться.
Что было программирование на xBase-системах? Унылое и скучное
'Учет материальных средств', 'Расчет заработной платы' или еще
что-нибудь в этом духе. Это, конечно, приносило деньги, но не
приносило морального удовлетворения. 'Настоящий' программист мог
восстановить до исходного текста любой бинарный код, будь то
библиотека от Си-компилятора или драйверы устройств. Причем
бесплатно и ночи напролет. Это приносило большое моральное
удовлетворение, но не приносило денег. Может быть, за это и платили
деньги, но не в этой стране.
В принципе, xBase-системы справлялись со своими задачами на
классической конфигурации тех лет: i286/40 MB HDD /1 MB RAM, но
работало это все не торопясь, даже на небольших базах.
С появлением процессоров 386 и 486 xBase-технологии воспряли
духом - СУБД зашевелились быстрее. Немного подпортило радостную
картину массовое появление локальных сетей, так как заказчики
требовали совместной работы АРМов в сети (не всегда давая себе отчет
в том, чего же они действительно хотят), а писать сетевые программы
толком еще никто не умел. Здесь же появилась первая серьезная
проблема совместного использования данных. Недостаток
xBase-технологий заключается в том, что все установки и снятие
блокировок записей и файлов делаются руками программиста, пишущего
программу, и если допущена ошибка, то не избежать больших
неприятностей.
Проблемы из-за роста объемов обрабатываемых данных замаячили тоже
нескоро. Для этого было необходимо время. А пока все выглядело
прекрасно, тем более что большинство проблем вызывалось неисправными
индексами, которые благополучно чинились.
Поврежденные файлы с базами данных, т.к. их структура была
известна, тоже можно было исправить без особых хлопот.
Одним словом на дворе стоял золотой век xBase.
'А в проклятом буржуинстве:'
Корпоративные СУБД Oracle, IBM DB/2 и прочие существовали уже
тогда. Эти системы занимали свой узкий сектор на мэйнфреймах (в
крайнем случае минифреймах) и стоили очень дорого. Перенос этих СУБД
на PC-платформу, из-за ее слабосильности, не предусматривался.
Кроме того, эти системы не были рассчитаны на
программиста-любителя и идеи, заложенные в них, иногда требовали
принципиально другого подхода и способа мышления, вдумчивого чтения
документации, отказа от некоторых традиционных подходов.
Шапкозакидательскими методами, как это предлагают большинство
изданий типа 'Изучение ::.. за 21 день' такие системы не берутся.
Сам факт централизованной обработки и хранения информации,
которую предлагал SQL-сервер, требовал либо наличия отдельных
администратора СУБД и прикладного программиста, либо совмещения их в
едином лице, что ввиду сложности ПО было сделать проблематично.
Были трудности и другого плана, например, разработка приложений
на Oracle радикально отличалась от Clipper, Fox, Paradox и др. ЭТО
именно РАЗРАБОТКА, потому что назвать ЭТО ПРОГРАММИРОВАНИЕМ язык не
поворачивается. xBase-системы все-таки более или менее похожи на
процедурные языки, в отличие от того же Oracle CDE. Распространенное
мнение конца 80-х годов было приведено в PC Magazine, Russian
Edition. 'Oracle - это система, в которой чувствуется мощность
танка, только не знаешь за какой рычаг надо дернуть'.
SQL-технологии еще 'были страшно далеки от народа'. Но будить
этих 'спящих декабристов' пока было некому. Потому что слишком
дорого :-(.
'Народное техно - грохот серверов:'
Общая ситуация начала меняться когда все более быстрыми темпами
начала уменьшаться стоимость мегабайта на жестких дисках и лентах,
подешевела память, а Intel выбросил на рынок Pentium. Построение
системы управления крупным предприятием на отдельно взятом сервере
стоимостью менее $4000 (только железо) при помощи более эффективных
технологий стало, наконец, по карману для более широкого круга
заказчиков.
Но железо - это еще полдела, даже меньше - одна треть. Для него
нужны еще операционные системы, СУБД и прикладное обеспечение на
основе этих СУБД. А это и время и деньги.
Вряд ли стоило ожидать в таких условиях массового исхода из-под
xBase-совместимых СУБД.
'Моя твоя не понимай ' или 'оПХБЕР-гДПЮБЯРБСИ'
Есть, по крайней мере, одна проблема, которой нет у американского
программиста: он не знает, что такое двуязычная раскладка клавиатуры
и почему getty должен непременно пропускать 8 бит.
Поддержка русского языка была традиционной больной мозолью для
всех импортных СУБД. Если для xBase-совместимых СУБД были методики
правильной организации сортировки и обработки данных на русском
языке, которые хотя и были сделаны 'на коленке', но давали неплохой
результат, то для больших СУБД адаптация к русским кодовым таблицам,
порядку сортировки и переделка функциональных библиотек требовала
весьма существенных сил. Одиночкам, даже талантливым, это было
сделать сложно, а фирмы-производители этих СУБД еще только начали
воспринимать Россию как рынок сбыта своей продукции. И,
соответственно, понимать, каким же образом делается правильная
локализация продуктов для России.
Русские кодовые страницы - это отдельная история. По части
кодировок России 'повезло'.
Немногочисленный русскоязычный мир Unix стойко держался за KOИ8,
имевшую несколько вариаций, так как это была единственная кодировка,
которая сохраняла у писем читабельность при прохождении через
корявые американские почтовые гейты, которые полагали, что почта
может быть только 7-битной.
PC-платформа во всю использовала кодировку 866, кроме того,
коммерческий гений БГ изобрел Windows, вместе с которой появилась
кодировка 1251.
Фирма IBM также посчитала необходимым выказать добрый жест и
разработала для славян в лице России кодировку 855, которая, кстати,
называлась не Russian, а Cyrillic. Честно говоря, кроме Oracle, она
нигде и не попадалась. Чем руководствовалась корпорация Oracle при
выборе этой кодировки в качестве базовой для русского языка- не
известно, скорее всего тем, что русские пишут кириллицей J . Хотя на
экране скорее мефодьица какая-то.
Альтернативные платформы типа Apple использовали свой вариант
русской кодировки. Местами еще поскрипывало жесткими дисками
наследство от братьев по СЭВ в виде 'Правцов' и 'Роботронов',
которые также использовали свое видение русского языка, но к счастью
их парк был относительно невелик.
Международная организация по стандартизации ISO, естественно,
остаться в стороне тоже не могла. С ее помощью на свет появилась ISO
8859-5, которая была предназначена в качестве окончательного решения
проблемы русского языка на компьютерной платформе. В отношении
последней стоит сказать, что она наиболее хорошо приспособлена для
сортировок, буквы русского языка в ней идут подряд и без разрывов,
но так как стандарту де-юре сложно изжить стандарты де-факто, то она
была встречена компьютерным сообществом достаточно прохладно. Хотя
теперь она встречается достаточно часто на Unix-платформах, иногда
ее обозначают как Russian Unix.
Справедливости ради стоит упомянуть еще и Unicode - универсальную
систему кодирования символов.
Обычный пользователь от этой проблемы далек и натыкается на нее,
если в теле приходящего к нему по Интернет письма содержится
абракадабра (см. заголовок). А вот для программистов СУБД - это
проблема, особенно если в сети используются клиенты на разных
платформах.
'Даешь внедреж!'.
Но настоящий прорыв в СУБД уровня предприятия произошел все-таки
после того, как на сцену вышла Windows NT. Эта ОС замышлялась как
вытесняющая Unix платформа, ориентированная на рынок корпоративных
приложений. И хотя NT не сумела серьезно пододвинуть Unix ( удар
скорее пришелся по Novell) и лишь оттенила его достоинства, тем не
менее, своим появлением она вызвала определенное брожение в среде
производителей Unix-систем.
Когда на горизонте замаячила алчущая денег тень БГ, изготовители
Unix наконец-то начали задумываться о том, что годами складывавшийся
стереотип 'Unix - система для избранных' себя изжил и его дальнейшее
существование угрожает обернуться существенным снижением прибыли. Из
этого следовало, что системы должны делаться не только для
высококвалифицированных программистов, но и в том числе для обычных
пользователей. К Unix-системам начали приделываться интерфейсы
администраторов, управляемые при помощи меню. В некоторых системах
появилась эмуляция DOS и поддержка Win32, а в последствии и
Windows95-98. Unix стал ближе и понятнее народу. В конечном счете,
это все шло на благо конечному пользователю, которому надо было
решать повседневные задачи, а не вникать в очередные стратегические
направления развития информационных технологий.
Опуская достоинства и недостатки Windows NT, следует заметить,
что пара Windows NT + MS SQL Server имела внешний вид 'настоящего
SQL-сервера', интеграцию через ODBC с другими средствами Microsoft,
и что важно - низкую цену.
Microsoft, исповедуя политику 'что не съем - так покусаю', так
торопился забить место в секторе корпоративных СУБД, что не стал
разрабатывать сервер самостоятельно, а купил у Sybase уже готовый и
адаптировал его к NT. Волей-неволей, но остальным производителям
SQL-серверов, для сохранения стоимостной привлекательности также
приходилось снижать цену на свои системы. И это было хорошо!
Но еще больше масла в огонь подлил Linux . Вряд ли Линус
Торвальдс предполагал, что из его экспериментальной системы
получится нечто существенно большее, и тем не менее, это произошло.
Linux - бесплатен, имеет человеческое лицо, хорошо документирован и
достаточно прост в установке, кроме того, пользователь в одном
флаконе получает как рабочую станцию, так и серверные приложения.
Более того, инсталлировать Linux на домашний компьютер стало модно.
И это при всем том, что разработчики и контрибуторы Linux не тратят
миллионы долларов на помпезный релиз очередной версии , как это
делает Microsoft.
Не так давно Microsoft проводил сравнительное тестирование NT и
Linux. Windows NT, конечно же, победила. Но, как кто-то пошутил в
RU.LINUX: 'Если тараканы забегали, то это значит, что дихлофос
подействовал'.
Кроме того, легче перечислить тех производителей оборудования,
системного и прикладного ПО которые не имеют отношения к Linux.
Просматривая недавно ComputerWorld, отметил для себя, что Linux так
или иначе упоминается почти на каждой странице, что совсем неплохо
для бесплатного продукта.
Возвращаясь к теме СУБД, следует сказать, что многие
производители СУБД выпустили серверы для Linux, и хотя они несколько
ограничены в функциональности, как платформа для оценки возможностей
SQL-серверов или разработки компактных систем они весьма пригодны.
Ограничение в функциональности иногда связано с возможностями Linux,
например, Linux не поддерживает raw devices , соответственно СУБД не
могут работать самостоятельно с 'сырыми' разделами. Или такое
ограничение является волей фирмы-производителя СУБД - зачем в
условно-бесплатный релиз закладывать то же самое, что и в
коммерческий релиз, в особенности если последний стоит большие $$$?
Из SQL СУБД на Linux существуют версии Oracle, Informix (как SE
так и DS), IBM DB/2, InterBase, Sybase. Эти системы распространяются
на разных условиях, но как правило они бесплатны либо для
разработки, либо для некоммерческого использования. Informix Dynamic
Server, например, продается по чисто символической цене $99. IBM DB2
Developer Edition является бесплатной для разработчиков. Oracle,
традиционно распространяющий свои версии в виде триальных систем,
выпустил под Linux свой Oracle8 Enterprise Edition.
Есть еще некоммерческие системы типа Postgres SQL (поставляется
вместе с Linux) и mySQL. С Postgres мне не доводилось работать,
поэтому мне сложно о ней что-либо сказать.
В отношении MySQL следует упомянуть, что у нее нет триггеров и
хранимых процедур, т.е. это простое хранилище данных, в котором
контроль целостности данных полностью лежит на клиентской программе.
MySQL часто используют для работы в составе Web-сервера, так как эта
СУБД проста и не требует больших ресурсов.
Под Linux есть даже Clipper! Только называется он теперь
Flagship, и разрабатывался он не CA, а немецкой фирмой Multisoft
Datentechnik Gmbh. Как и на любую Unix-систему на него можно ходить
терминалами. Лицензия для оценки возможностей на две сессии -
бесплатна. Переделки кода с Clipper для DOS - минимальны, немцы
утверждают, что он полностью совместим по коду с версией 5.0. Есть
даже DBU, с идентичным интерфейсом, рапортующая 'Exit to Unix?' при
выходе, вместо привычного 'Exit to DOS?' J . Кстати немцы
утверждают, что он существует под 50(sic!) различных платформ. Но
если рассматривать Flagship в качестве корпоративной СУБД, то это
все-таки полумера: и отнюдь не бесплатная для использования в
организации. Хотя, если есть желающие, то Flagship им в руки. 'А мы
пойдем другим путем'.
SQL-технологии. Что они могут и как они это
делают.
Взаимодействие клиента с сервером.
Язык
Общение с сервером СУБД происходит на языке структурированных
запросов SQL (Structured Query Language). Базовый набор языка
стандартизован ANSI. Действующая редакция ANSI SQL92. Это
непроцедурный язык. Он предназначен именно для построения запросов и
манипуляции данными и структурами данных. У него нет ни переменных,
ни меток, ни циклов, ни всего прочего, с чем привык работать
нормальный программист. Надо четко представлять себе, что SQL
оговаривает способ передачи данных в клиентскую программу, но никак
не оговаривает то, как эти данные должны в клиентской программе
обрабатываться и представляться пользователю.
Естественно, что базовый стандарт не может предусмотреть все
потребности пользователей, поэтому многие фирмы производители СУБД
предлагают свои собственные и часто непереносимые расширения SQL.
Например, Oracle и IBM имеют собственные расширения оператора
SELECT, которое позволяет эффективно разворачивать в горизонтальное
дерево иерархически упорядоченные данные (В Oracle это START WITH /
CONNECT BY). В SQL-диалекте Informix такого оператора нет, поэтому
для этих целей приходиться писать сохраненные процедуры. Количество
расширений может исчисляться десятками для сервера СУБД от одной
фирмы. Впрочем, никто и не говорил, что это будет просто:
Существуют также специальные процедурные расширения
SQL-диалектов. Они похожи на обычные процедурные языки, т.е. у них
есть и нормальные переменные и метки и циклы и все прочее, а также
полностью поддерживается синтаксис SQL. Жесткого стандарта на
процедурные расширения нет, поэтому фирмы-изготовители СУБД
определяют синтаксис, так как считают нужным. Опять же существует
большое количество фирменных расширений, в частности Informix
поддерживает курсоры с произвольным позиционированием.
Литература по SQL
|