Сегодня SQL является стандартным языком управления базами данных. Что это означает? Как SQL стал стандартом? Какую роль играет официальный стандарт SQL? Насколько он поддерживается и почему, несмотря на стандарт, имеются диалекты SQL? Насколько сильно SQL влияет на различные сегменты компьютерного рынка? Чтобы ответить на эти вопросы, в настоящей статье прослеживается история развития SQL и рассказывается о его нынешней роли на рынке компьютерных технологий.
SQL и эволюция управления базами данных
Одной из основных задач вычислительной системы является хранение и обработка данных. В конце 1960-х-начале 70-х годов стали появляться специализированные компьютерные программы для решения этой задачи, известные под названием системы управления базами данных (СУБД). СУБД помогала пользователям компьютеров организовывать и структурировать данные и позволяла вычислительной системе играть более активную роль в обработке данных. Хотя изначально СУБД использовались на больших ЭВМ (мэйнфреймах), их популярность быстро распространилась на мини-компьютеры, а затем и на рабочие станции, персональные компьютеры и специализированные серверы.
Системы управления базами данных играли ключевую роль в стремительном развитии компьютерных сетей и Интернета. Ранние СУБД работали в крупных монолитных вычислительных комплексах, где данные, программное обеспечение СУБД и прикладные программы, осуществлявшие доступ к базе данных, работали в единой системе. В 1980-x-l 990-х годах получила распространение архитектура "клиент/сервер", в которой пользователь персонального компьютера или прикладная программа посредством локальной сети выполняли обращение к базе данных, расположенной в другой системе. В конце 90-х годов растущая популярность Интернета и Веб оказала влияние на архитектуру управления данными. Сегодня пользователю зачастую достаточно иметь лишь веб-браузер, чтобы получить доступ к базам данных, расположенным не только в его организации, но и в любой точке земного шара. Такие интернет-архитектуры обычно включают три и более компьютерных систем: одна, где работает веб-браузер, обеспечивает взаимодействие с пользователем и подключена через Интернет ко второй — серверу приложений,— где работает прикладное программное обеспечение, а та, в свою очередь, подключена к третьей системе, где работает СУБД.
Сегодня рынок СУБД — это очень большой бизнес. Независимые компании по производству программного обеспечения и крупные поставщики продают программы для управления базами данных па миллиарды долларов ежегодно. Практически все компьютерные приложения уровня предприятия, поддерживающие деятельность крупных компаний и иных организаций, используют базы данных. Эти приложения включают некоторые быстрорастущие категории приложений, такие как ERP (Enterprise Resource Planning, управление ресурсами предприятия), CRM (Customer Relationship Management, система управления взаимосвязями с клиентами и партнерами), SCM (Supply Chain Management, управление цепочками поставок), SFA (Sales Force Automation, автоматизация процесса продаж), а также финансовые приложения. Специализированные высокопроизводительные серверы, оптимизированные для работы большинства популярных баз данных, образуют многомиллиардный рынок, и еще большие миллиарды добавляет рынок дешевых серверов. Базы данных работают "за сценой" большинства транзакционно-ориентированных веб-сайтов и используются для хранения и анализа пользовательских транзакций. Таким образом, управление данными пронизывает все сегменты компьютерного рынка.
С конца 1980-х годов произошел стремительный взлет популярности СУБД конкретного типа — системы управления реляционными базами данных (СУРБД). С тех пор реляционная база данных стала, по сути, стандартом баз данных. Информация в реляционной базе данных хранится в простом табличном виде, что дает реляционным базам данных много преимуществ по сравнению с базами данных более ранних разработок. SQL предназначен, в первую очередь, для работы именно с реляционными базами данных.
Краткая история SQL
История SQL тесно связана с развитием реляционных баз данных. В табл. 1 перечислены основные вехи его сорокалетней истории. Понятие реляционной базы данных было введено доктором Э. Ф. Коддом (Edgar Frank "Ted" Codd), научным сотрудником компании IBM. В июне 1970 года доктор Кода опубликовал в журнале Communications of the Association for Computing Machinery статью "Реляционная модель для больших банков совместно используемых данных" ("A Relational Model of Data for Large Shared Data Banks"), в которой в общих чертах была изложена математическая теория хранения данных в табличной форме и их обработки. От этой статьи и берут свое начало реляционные базы данных и SQL.
Год | Событие |
1970 | Доктор Кода создает модель реляционной базы данных |
1974 | Начинается разработка проекта System/R компании IBM |
1974 | Первая статья с описанием языка SEQUEL |
1978 | Опытная эксплуатация проекта System/R |
1979 | Появляется первая коммерческая СУРБД компании Oracle |
1981 | Компания Relational Technology выпускает СУБД Ingres |
1981 | Компания IBM создает СУБД SQL/DS |
1982 | ANSI формирует комитет по стандартизации языка SQL |
1983 | Компания IBM объявляет о создании СУБД DB2 |
1986 | ANSI принимает стандарт SQL1 |
1986 | Компания Sybase создает СУРБД для обработки транзакций |
1987 | ISO одобряет стандарт SQL1 |
1988 | Компании Ashton-Tate и Microsoft объявляют о выпуске СУБД SQL Server для операционной системы OS/2 |
1989 | Опубликован первый тест производительности ТРС (ТРС-А) |
1990 | Опубликован тест производительности ТРС-В |
1991 | Консорциум SQL Access Group публикует спецификацию доступа к базам данных |
1992 | Компания Microsoft публикует спецификацию протокола ODBC |
1992 | ANSI принимает стандарт SQL2 (SQL-92) |
1992 | Опубликован тест производительности ТРС-С (OLTP) |
1993 | Первые поставки систем обслуживания хранилищ данных |
1993 | Первые поставки программных продуктов, поддерживающих протокол ODBC |
1994 | Коммерческие поставки серверов баз данных, поддерживающих параллельную обработку |
1995 | Первый выпуск СУРБД с открытым кодом MySQL |
1996 | Опубликован стандарт API-функций для доступа к базам данных OLAP и тест производительности OLAP-систем |
1997 | Компания IBM выпускает СУБД DB2 Universal Database, унифицировав ее архитектуру для работы на платформах других поставщиков |
1997 | Ведущие поставщики СУБД объявили о поддержке Java-технологий |
1998 | Компания Microsoft выпустила СУБД SQL Server 7, обеспечив поддержку корпоративных баз данных для платформы Windows NT |
1998 | Выпущена СУБД Oracle 8i, ознаменовавшая отход от архитектуры "клиент/сервер” и обеспечившая интеграцию баз данных с Интернетом |
1998 | Первый выпуск базы данных, полностью размещающейся в оперативной памяти |
1999 | J2EE стандартизовал JDBC-доступ к базам данных со стороны серверов приложений |
1999 | Принимается стандарт ANSI/ISO SQL1999 с добавлением в язык объектно-ориентированных конструкций |
2000 | Oracle выпускает серверы приложений с интегрированным кешированием баз данных |
2000 | Microsoft выпускает SQL Server 2000, предназначенный для приложений уровня предприятия |
2001 | В основных СУРБД появляется возможность поддержки XML |
2001 | IBM покупает Informix |
2002 | IBM обходит Oracle и становится производителем баз данных №1 |
2003 | Принят стандарт ANSI/ISO SQL:2003, в который добавлен SQL/XML |
2006 | Принят стандарт ANSI/ISO SQL:2006 с существенным расширением SQL/XML и объектноориентированных конструкций |
2006 | Исследования показывают, что Oracle лидирует на рынке |
2008 | Sun Microsystems покупает MySQL АВ |
2008 | Принят стандарт ANSI/ISO SQL:2008 |
Первые годы
Статья доктора Кодда вызвала волну исследований в области реляционных баз данных, включая большой исследовательский проект компании IBM. Цель этого проекта, названного System/R, заключалась в том, чтобы доказать работоспособность реляционной модели и приобрести опыт реализации реляционной СУБД. Работа над проектом System/R началась в середине 70-х годов в лаборатории Санта-Тереза компании IBM в городе Сан-Хосе, штат Калифорния.
В 1974-1975 годах, на первом этапе выполнения проекта System/R, был создан минимальный прототип реляционной СУБД. Кроме разработки самой СУБД, в рамках проекта System/R проводилась работа над созданием языков запросов к базе данных. Один из этих языков был назван SEQUEL (Structured English Query Language— структурированный английский язык запросов). В 1976-1977 годах разработанный прототип проекта System/R был полностью переделан, и в 19781979 годах новая реализация проекта System/R была установлена на компьютерах нескольких заказчиков компании IBM для опытной эксплуатации. Эта эксплуатация принесла пользователям первый реальный опыт работы с СУБД System/R и ее языком базы данных, который по юридическим соображениям был переименован в SQL. В 1979 году исследовательский проект System/R завершился, и IBM сделала заключение, что реляционные базы данных не только вполне работоспособны, но и могут служить основой для создания коммерческих программных продуктов.
Первые реляционные СУБД
Проект System/R и созданный в его рамках язык работы с базами данных под названием SQL были подробно описаны в технических журналах 1970-х годов. Семинары по технологии баз данных характеризовались дебатами о достоинствах новой "еретической" реляционной модели. Уже в 1976 году было ясно, что IBM стала энтузиастом реляционной технологии баз данных и прилагает значительные усилия для развития языка SQL.
Сообщения о проекте System/R привлекли внимание группы инженеров из города Менлоу Парк, штат Калифорния, которые решили, что исследования компании IBM предвещают значительный рынок сбыта для реляционных баз данных. В 1977 году они организовали компанию Relational Software, Inc., чтобы создать реляционную СУБД, основанную на SQL. Поставки этой СУБД, названной Oracle, начались в 1979 году. Oracle стала первой реляционной СУБД на компьютерном рынке. Она на целых два года опередила появление первой реляционной СУБД компании IBM и предназначалась для мини-компьютеров VAX компании Digital, которые были дешевле больших ЭВМ компании IBM. Эта компания агрессивно продвигала новый реляционный стиль управления базами данных и в конечном счете в качестве нового имени приняла название своей разработки. Сегодня Oracle Corporation является ведущим поставщиком реляционных СУБД с годовым оборотом свыше десяти миллиардов долларов.
Профессора из компьютерных лабораторий Калифорнийского университета (город Беркли) также исследовали реляционные базы данных в середине 1970-х годов. Подобно исследовательской группе компании IBM, они создали прототип реляционной СУБД и назвали свою систему Ingres. Проект Ingres включал в себя язык запросов QUEL, который был более "структурированным", но менее похожим на английский, чем язык SQL. Многие специалисты по базам данных, разработчики и основатели компаний, работающих в этой области, начинали свою деятельность с проекта Ingres.
В 1980 году несколько профессоров покинули Беркли и основали компанию Relational Technology, Inc., чтобы создать коммерческую версию системы Ingres, поставки которой на рынок начались в 1981 году. Ingres и Oracle сразу же вступили в острую конкурентную борьбу, но это соперничество лишь привлекло внимание к технологии реляционных баз данных. Несмотря на техническое превосходство во многих областях, Ingres вскоре стала сдавать свои позиции, не выдержав конкуренции с возможностями, предлагаемыми языком SQL, а также по причине агрессивной маркетинговой политики компании Oracle. В 1986 году первоначальный язык запросов QUEL был заменен на SQL. Это являлось свидетельством того, что стандарт SQL стал важным рыночным фактором. В середине 90-х годов технология Ingres была продана компании Computer Associates, ведущему производителю программного обеспечения для мэйнфреймов (которая продала свою долю в Ingres в 2005 году).
Продукты IBM
В то время как Oracle и Ingres становились коммерческими продуктами, компания IBM также предпринимала усилия по превращению проекта System/R в коммерческую разработку, получившую название SQL/Data System (SQL/DS). В 1981 году IBM объявила о создании СУБД SQL/DS, а в 1982 году начала ее поставки на рынок. В 1983 году IBM анонсировала версию SQL/DS для операционной системы VM/CMS, часто используемой на больших ЭВМ компании IBM в корпоративных информационных центрах.
В 1983 году IBM разработала еще одну реляционную СУБД для своих больших ЭВМ — Database 2 (DB2). Эта СУБД функционировала под управлением операционной системы MVS, которая являлась "рабочей лошадкой" в крупных центрах по обработке данных на мэйнфреймах. Поставки на рынок первой версии DB2 начались в 1985 году, и представители компании IBM назвали ее своим стратегическим программным продуктом. С этого времени DB2 стала флагманом реляционных СУБД компании IBM. Благодаря значительному влиянию IBM на рынок вычислительных систем, язык SQL этой СУБД фактически стал стандартом языка управления базами данных. Технология, реализованная в DB2, затем была использована в программных продуктах всех направлений компании IBM, от персональных компьютеров до сетевых серверов и мэйнфреймов. В 1997 году IBM пошла еще дальше, объявив о создании версий DB2 для компьютерных систем своих конкурентов— компаний Sun Microsystems и Hewlett-Packard. DB2 для мэйнфреймов остается центральным элементом стратегии IBM в области баз данных.
Коммерческое признание
В течение первой половины 1980-х годов поставщики реляционных баз данных боролись за коммерческое признание своих продуктов. По сравнению с традиционными архитектурами баз данных, реляционные программные продукты имели несколько недостатков. Производительность реляционных баз данных была ниже, чем традиционных. За исключением продуктов компании IBM, реляционные базы данных поставлялись на рынок мелкими, начинающими, поставщиками. И, опять же, за исключением продуктов IBM, реляционные базы данных предназначались для мини-компьютеров, а не для мэйнфреймов.
Однако у реляционных продуктов было большое преимущество. Реализованные в них языки реляционных запросов (SQL, QUEL и другие) позволяли выполнять запросы к базе данных без написания программ и немедленно получать результаты. В результате реляционные базы данных постепенно стали использоваться в качестве инструментов для поддержки принятия решений. В мае 1985 года компания Oracle с гордостью объявила о том, что количество инсталляций реляционных продуктов ее производства превысило одну тысячу. Ingres к тому времени также была инсталлирована на сравнимом количестве компьютеров. Постепенно начали получать признание и продукты DB2 и SQL/DS, общее число инсталляций которых тоже превысило тысячу.
Во второй половине 1980-х годов реляционные базы данных уже стали считаться технологией баз данных будущего. Резко увеличилась производительность реляционных баз данных. В частности, каждая новая версия Ingress и Oracle превосходила предшественницу в два-три раза. На увеличении этого показателя сказался и общий рост быстродействия компьютеров.
В конце 1980-х годов росту популярности SQL начали способствовать и рыночные тенденции. Компания IBM продвигала на рынок систему DB2 как лучшее решение 1990-х годов. Опубликование в 1986 году стандарта SQL, принятого ANSI/ISO, официально придало SQL статус стандартного языка баз данных. Кроме того, SQL стал стандартом для компьютерных систем на базе UNIX, популярность которых также росла ускоренными темпами в конце 1980-х годов. По мере увеличения мощности персональных компьютеров и объединения их в локальные сети возникла необходимость в более сложных СУБД. Поставщики таких СУБД при создании систем нового поколения для персональных компьютеров взяли за основу SQL, а поставщики СУБД для мини-компьютеров, чтобы выдержать конкуренцию со стороны персональных компьютеров, вышли на зарождающийся рынок локальных вычислительных сетей.
В начале 1990-х годов усовершенствование реализаций SQL и резкое возрастание мощи процессоров сделали SQL практичным решением для приложений обработки транзакций. И наконец, SQL стал ключевой частью архитектуры "клиент/сервер", использующей персональные компьютеры, локальные сети и сетевые серверы для построения дешевых систем обработки информации. С развитием Интернета для SQL нашлась новая роль — в качестве языка баз данных для интернет-приложений и электронной коммерции.
Однако SQL не испытывал и недостатка в конкуренции. К началу 1990-х годов объектно-ориентированное программирование зарекомендовало себя как наиболее перспективный метод разработки приложений, особенно для персональных компьютеров и в области пользовательских графических интерфейсов. Объектная модель данных, со своими объектами, классами, методами и наследованием, плохо соотносилась с реляционной моделью таблиц, строк и столбцов данных. Ранние "объектные базы данных" включали Gemstone от Servio Logic, Gbase от Graphael и Vbase от Ontologic. В средине 1990-х годов выросло новое поколение компаний, рассчитывавших на то, что объектные базы данных вытеснят с рынка реляционные базы данных и их производителей, так же как в свое время SQL поступил с нереляционными базами данных. Здесь можно упомянуть такие продукты, как ITASCA от Itasca Systems, Jasmine от Fujitsu, Matisse от Matisse Software, Objectivity/DB от Objectivity, ONTOS от Ontos, Inc. (переименованного из Ontologic), 02 от 02 Technology, а также с полдесятка других. Ho SQL и реляционная модель более чем устояли перед этим натиском. Некоторые из упомянутых продуктов остались на рынке и сегодня, но большинство было просто куплено или сгинуло во мгле времени. Например, 02 Technology постигла судьба некоторых других компаний, купленных Informix, a Informix, в свою очередь, позже был приобретен IBM. Общие годовые доходы объектно-ориентированных баз данных измеряются миллионами долларов, в то время как рынок SQL, СУРБД, соответствующих инструментов и служб оценивается в десятки миллиардов долларов в год.
По мере развития SQL этот язык стал применяться для решения множества задач, связанных с управлением данными, и постепенно, к концу 90-х годов, рынок баз данных перестал быть монолитным, разделившись на ряд специализированных сегментов. Одним из наиболее быстрорастущих среди них стал сегмент хранилищ данных, где базы данных применяются для анализа огромных объемов информации на предмет выявления скрытых тенденций и моделей развития. Другим направлением является внедрение в SQL новых типов данных (в частности, мультимедийных) и объектно-ориентированных принципов. Третий важный сегмент — это "мобильные" базы данных для переносных персональных компьютеров, взаимодействующие с централизованными базами данных как в оперативном, так и в автономном режиме. Еще одним сегментом оказываются базы данных, работающие с оперативной памятью, разрабатывающиеся как очень высокопроизводительные, ориентированные на работу с потоком базы данных, предназначенные для управления сетевыми потоками данных.
Несмотря на появление различных сегментов рынка, SQL по-прежнему остается их общим знаменателем. И через сорок лет после его возникновения позиции SQL так же сильны, как и ранее. SQL остается стандартом в области баз данных. Всегда будут появляться новые проблемы — например, сейчас это необходимость включения поддержки XML и его иерархической модели данных, а также необходимость поддержки огромных массивов данных в масштабе Интернета. Но история последних сорока лет дает все основания рассчитывать на то, что SQL и реляционная модель обладают изрядным запасом сил и способны справиться с новыми требованиями к управлению данными.
Стандарты SQL
Одним из наиболее важных шагов на пути к признанию SQL на рынке стало появление стандартов этого языка. Обычно при упоминании "стандарта SQL" имеют в виду официальный стандарт, утвержденный Американским национальным институтом стандартов (American National Standards Institute, ANSI) и Международной организацией по стандартизации (International Standards Organization, ISO). Однако существуют и другие важные стандарты, включая стандарт де- факто, каковым является SQL, реализованный в семействе продуктов DB2 компании IBM, и Oracle-диалект SQL, доминирующий на рынке.
Стандарты ANSI/ISO
Работа над официальным стандартом SQL началась в 1982 году, когда ANSI поставил перед своим комитетом ХЗН2 задачу по созданию стандарта языка управления реляционными базами данных. Вначале в комитете обсуждались преимущества различных предложенных языков. Однако, поскольку к тому времени на рынке стандартом де-факто стал SQL, комитет ХЗН2 остановил свой выбор на нем и занялся его стандартизацией.
Разработанный в результате стандарт в большей степени был основан на диалекте SQL системы DB2, хотя и содержал в себе ряд существенных отличий от этого диалекта. После нескольких доработок в 1986 году стандарт был официально утвержден как стандарт ANSI номер Х3.135, а в 1987 году — в качестве стандарта ISO. Затем стандарт ANSI/ISO был принят правительством США как федеральный стандарт США в области обработки информации (Federal Information Processing Standard, FIPS). Этот стандарт, незначительно пересмотренный в 1989 году, обычно называют стандартом SQL1 или SQL-89.
Многие из членов комитетов ANSI и ISO представляли фирмы-поставщики различных СУБД, в каждой из которых был реализован собственный диалект SQL. Как и диалекты человеческого языка, диалекты SQL были, в основном, похожи друг на друга, однако несовместимы в деталях. Во многих случаях комитет просто обошел существующие различия и не стандартизировал некоторые части языка, определив, что они реализуются по усмотрению разработчика. Этот подход позволил объявить большое число реализаций SQL совместимыми со стандартом, однако сделал сам стандарт относительно слабым.
Чтобы заполнить эти пробелы, комитет ANSI продолжил свою работу и создал проект нового, более жесткого, стандарта SQL2. В отличие от стандарта 1989 года, проект SQL2 предусматривал возможности, выходящие за рамки возможностей, уже реализованных в реальных коммерческих продуктах. А для следующего за ним стандарта SQL3 были предложены еще более глубокие изменения. Кроме того, была предпринята попытка официально стандартизировать те части языка, на которые давно существовали "собственные" стандарты в различных СУБД. В результате предложенные стандарты SQL2 и SQL3 оказались более противоречивыми, чем исходный стандарт. Стандарт SQL2 прошел процесс утверждения в ANSI и был окончательно принят в октябре 1992 года. В то время как первый стандарт 1986 года занимает не более ста страниц, стандарт SQL2 (официально называемый SQL-92) содержит около шестисот.
Существенным нововведением стало официальное утверждение трех уровней совместимости со стандартом SQL2. На самом нижнем, начальном, уровне (Entry Level) от СУБД требуются лишь минимальные дополнительные возможности в сравнении со стандартом SQL-89. Промежуточный уровень (Intermediate Level) представляет собой значительный шаг вперед по отношению к стандарту SQL-89, хотя и не затрагивает наиболее сложных и системно-зависимых аспектов языка SQL. Третий, самый высокий, уровень (Full Level) требует от СУБД реализации всех возможностей стандарта SQL2. В самом стандарте определение каждой возможности сопровождается описанием того, как она должна быть реализована на каждом из трех уровней. Сегодня специализированные базы данных, такие как используемые во встраиваемых приложениях или в приложениях с открытым кодом, в ряде областей обладают начальным уровнем соответствия стандарту SQL, но все основные базы данных уровня предприятия полностью поддерживают стандарт SQL-92.
После принятия SQL-92 работа над стандартами SQL шла в разных направлениях. Единый комитет разделился на ряд подкомитетов, каждый из которых работал над различными расширениями языка. Некоторые из них, например сохраняемые процедуры, уже имелись во многих коммерческих SQL-базах данных. Другие, такие как предложенные объектные расширения SQL, пока что не были широко доступны или полностью реализованы. Новые версии стандарта были выпущены в 1999, 2003, 2006 и 2008 годах. Стандарт 2006 года включал существенные дополнения к XML-части стандарта.
В процессе работы стандарт ANSI/ISO был разделен на 14 частей. Одни из них после некоторой активности в данном направлении оказались заброшены, некоторые вошли в другие части, а над остальными продолжается активная работа.
- Часть 1 — SQL/Framework содержит общие определения и служит "оглавлением" для других частей.
- Часть 2 — SQL/Foundation представляет собой наибольшую часть и содержит определения основных инструкций SQL для определения структуры базы данных и управления данными. Это потомок версий SQL-89 и SQL-92 стандарта. Данная часть существенно расширена путем включения структур для бизнес-анализа.
- Часть 3 — SQL/CLI (Call Level Interface, интерфейс уровня вызовов) описывает интерфейс уровня вызова процедур, хорошо известный как стандарт Microsoft ODBC. Он появился в 1995 году.
- Часть 4— SQL/PSM (Persistent Stored Modules, постоянные хранимые модули) описывает процедурные расширения SQL, аналогичные возможностям, имеющимся в популярных процедурных SQL-языках наподобие PL/SQL в Oracle.
- Часть 5— SQL/Bindings описывает встраивание SQL в другие процедурные языки. Эта часть была объединена с частью 2 в версии SQL:2003 стандарта.
- Часть 6 — SQL/Transaction была посвящена вопросам распределенных транзакций, но затем работа в данном направлении была остановлена.
- Часть 7 — SQL/Temporal была посвящена расширениям SQL для работы с календарными и временными данными, но затем работа в данном направлении была прекращена.
- Часть 8— SQL/Objects в процессе работы над SQL3 содержала объектно-ориентированные расширения SQL. Эти расширения были внесены в часть 2 в стандарте SQLil
- Часть 9 — SQL/MED (Management of External Data, управление внешними данными) добавляет в язык возможности по работе с нереляционными источниками данных; появилась в стандарте SQL:2003.
- Часть 10— SQL/OLB (Object Language Bindings, связи с объектными языками) описывает обращение к SQL из языка программирования Java. Она связана с JDBC и SQL, встроенным в Java, и появилась в стандарте SQL:2003.
- Часть 11 — SQL/Schemata содержит стандарты для ''каталога базы данных", или таблиц с самоописывающей базу данных системной информацией. Эта спецификация находилась в стандарте SQL:1999 в части 2, но была вынесена в отдельную часть в стандарте SQL:2003.
- Часть 12 — SQL/Replication изначально определяла стандарты копирования из одной SQL-базы данных в другую, но затем работа в данном направлении была прекращена.
- Часть 13— SQL/JRT (Java Routines and Types, подпрограммы и типы Java) описывает подпрограммы и типы, используемые языком программирования Java для доступа к SQL-базам данных; впервые появилась в стандарте SQL:2003.
- Часть 14— SQL/XML описывает интеграцию XML (Extensible Markup Language, расширяемый язык разметки) в язык Впервые появилась в стандарте SQL:2003 и с тех пор была значительно расширена.
С нескольких сотен страниц, описывающих базовые возможности языка SQL в 1986 году, стандарт ANSI/ISO SQL значительно вырос— как по объему, так и в смысле сложности и охвата различных тем. "Реальный" стандарт SQL, конечно, представляет собой SQL, реализованный в продуктах, занимающих важное место на рынке. Программисты и пользователи, как правило, предпочитают придерживаться тех частей языка, которые одинаковы у большинства продуктов. Большинство новых расширений SQL начинаются как новшества крупных производителей баз данных. Некоторые из них так и не получают поддержку и со временем исчезают из языка. Другие годами остаются в языке с единственной целью обеспечить обратную совместимость. Третьи же, наиболее удачные в коммерческом смысле, попадают "в струю", широко распространяются среди баз данных и в конечном счете оказываются в официальном стандарте.
Другие ранние стандарты SQL
Хотя стандарт ANSI/ISO наиболее широко распространен, он не был единственным стандартом SQL во времена его становления. Европейская группа поставщиков X/OPEN также приняла SQL в качестве одного из своих стандартов для среды переносимых приложений на основе UNIX. Стандарты группы X/OPEN играли важную роль на европейском компьютерном рынке, где ключевой задачей являлась переносимость приложений между компьютерными системами различных производителей.
Компания IBM также включила SQL в свою спецификацию Systems Application Architecture (архитектуры прикладных систем) в 1990-х годах и пообещала, что все ее продукты в конечном счете будут переведены на этот диалект SQL. Хотя данная спецификация и не оправдала надежд на унификацию линии продуктов компании IBM, движение в сторону унификации IBM SQL продолжается. Система DB2 остается основной СУБД компании IBM для мэйнфреймов, однако компания выпустила реализацию DB2 и для OS/2, собственной операционной системы для персональных компьютеров, и для линии серверов и рабочих станций RS/6000, работающих под управлением UNIX. Распространение DB2 (не только на разные аппаратные системы, но и для разных типов данных) воплотилось в названии одной из последних реализаций DB2 — Universal Database (универсальная база данных, UDB).
ODBC и консорциум SQL Access Group
В технологии баз данных существует важная область, которую не затрагивали ранние официальные стандарты. Это взаимодействие баз данных — методы, с помощью которых различные базы данных могут обмениваться информацией, обычно по сети. В 1989 году несколько производителей программного обеспечения сформировали консорциум SQL Access Group специально для решения этой проблемы. В 1991 году консорциум опубликовал спецификацию RDA (Remote Database Access, удаленный доступ к базам данных). К сожалению, эта спецификация была тесно связана с сетевыми протоколами OSI, которые проиграли сетевую битву протоколам TCP/IP, поэтому она никогда не была широко реализована.
Второй стандарт от SQL Access Group повлиял на рынок существенно сильнее. В результате настойчивых требований компании Microsoft консорциум SQL Access Group обратил свое внимание на интерфейс уровня вызовов. Спецификация CLI (Call Level Interface, интерфейс уровня вызовов), основанная на разработках компании Microsoft, увидела свет в 1992 году. В этом же году был опубликован и протокол ODBC (Open Database Connectivity, открытый доступ к базам данных) компании Microsoft, основанный на спецификации CLI. Благодаря рыночному влиянию Microsoft и благословению, полученному "открытым стандартом" от SQL Access Group, ODBC оказался стандартом де-факто для интерфейсов доступа к SQL-базам данных на персональных компьютерах. Весной 1993 года компании Apple и Microsoft объявили о соглашении относительно поддержки ODBC в Macintosh и Windows, что закрепило за этим протоколом статус промышленного стандарта в обеих популярных средах с графическим пользовательским интерфейсом. Вскоре появилась реализация ODBC для платформы UNIX. В 1995 году, с публикацией стандарта SQL/Call-Level Interface, интерфейс ODBC стал стандартом ANSI/ISO.
В течение последних десяти лет ODBC продолжает развиваться, но существенно медленнее. Microsoft продолжает поддерживать ODBC, но основные усилия перенесены в область создания более высокоуровневых, объектно-ориентированных интерфейсов для универсального доступа к базам данных. Тем не менее ODBC продолжает играть главную роль в обеспечении переносимости баз данных для приложений уровня предприятия и инструментария баз данных. Достаточно распространена ситуация, когда инструментарий базы данных или приложение уровня предприятия поддерживает "драйвер", оптимизирующий непосредственный доступ к базам данных Oracle, DB2 или SQL Server с помощью их специфических интерфейсов уровня вызова. Такое приложение обычно включает дополнительный драйвер, использующий в качестве способа поддержки широкого диапазона других баз данных ODBC. Поскольку этот подход принят очень многими приложениями и инструментами, практически все производители баз данных предоставляют доступ с применением ODBC, иногда в качестве основного интерфейса уровня вызовов, а иногда как дополнение к высокопроизводительному интерфейсу, специфичному для данной базы данных.
JDBC и серверы приложений
Стремительный рост популярности Интернета привел к дальнейшему развитию стандартов обращения к базам данных, с тем чтобы они поддерживали работу с объектно-ориентированным языком программирования Java. Java стал, по сути, стандартным языком для создания интернет-приложений, работающих на серверах приложений на базе Java. Компания Sun Microsystems, разработчик Java, приложила немалые усилия по стандартизации применения Java для серверов приложений в спецификации Java2 Enterprise Edition (J2EE). J2EE включает Java Database Connectivity (JDBC) в качестве стандарта доступа к реляционным базам данных из Java. В отличие от доступа к базам данных из языка программирования С, где ODBC многие годы предшествовали интерфейсы уровня вызовов конкретных баз данных, стандарт JDBC был разработан относительно рано, на пике роста популярности Java. В результате частные интерфейсы для подключения к Java так и не появились, и единственным стандартом SQL-доступа со стороны Java стал JDBC.
SQL и переносимость
Появление стандарта SQL вызвало довольно много восторженных заявлений о переносимости SQL и использующих его приложений. Для иллюстрации того, как любое приложение, используя SQL, может работать с любой СУБД на основе SQL, часто приводят диаграммы, подобные изображенной на рис. 1. На самом деле различия между существующими диалектами SQL достаточно значительны, так что при переводе приложения под другую СУБД его, как правило, приходится модифицировать. Со временем ядро языка становится все более стандартным, но в то же время производители баз данных добавляют в язык новые возможности, часто с расширениями, специфичными для конкретной базы данных. Рассмотрим примеры областей, в которых возникают такие отличия.
Рис. 1. Миф о переносимости SQL
- Типы данных. В стандарте SQL определен достаточно широкий набор типов данных, однако производители постоянно добавляют новые типы. Даже старые типы данных могут помешать переносимости — например, специфичный для Oracle тип данных NUMBER широко используется для представления числовых данных в базах данных Oracle, — и при этом только в них.
- Обратная совместимость. Не такая уж редкость встретить приложение уровня предприятия, работающее один-два десятка лет после того, как оно было написано, когда все программисты, создававшие его, давно уволены (или уволились). Такие программы становятся "неприкасаемыми", поскольку детальное знание о том, как они функционируют, оказывается утраченным. Большие разделы этих программ могут зависеть от старых, специфичных для данной базы данных, свойств SQL, так что производители баз данных вынуждены поддерживать обратную совместимость, иначе имеется риск, что старые приложения перестанут работать. Такие увековеченные отличия диалектов препятствуют переносимости.
- Системные таблицы. В стандарте SQL описание системных таблиц, в которых содержится информация о структуре самой базы данных, появилось только в версии SQL-92. Поэтому каждый производитель создавал собственные системные таблицы, которые продолжают развиваться и эволюционировать и зачастую содержат информацию, которая выходит за указанные в стандарте пределы. Приложения, использующие такие специфичные для конкретной базы данных системные таблицы, непереносимы.
- Программный интерфейс. В раннем стандарте SQL определен абстрактный способ использования SQL в приложениях, написанных на таких языках программирования, как COBOL, С, FORTRAN и другие, который не был широко принят сообществом программистов. Стандарт SQL/CLI 1995 года окончательно определил программный доступ к SQL, но к тому времени коммерческие СУБД уже популяризовали собственные интерфейсы и внедрили их в сотни тысяч пользовательских приложений и прикладных пакетов. Хотя в настоящее время стандартные API и широко поддерживаются, большинство производителей баз данных продолжают предоставлять собственные интерфейсы, обеспечивающие более высокую производительность и более богатую функциональность, побочным действием которых является привязка к конкретной базе данных.
- Семантические отличия. Поскольку некоторые элементы определены в стандартах как зависящие от реализации, может возникнуть ситуация, когда в результате выполнения одного и того же запроса в двух отвечающих стандарту реализациях SQL будут получены два различных набора результатов. Примеры таких отличий могут быть найдены, например, в обработке значений NULL, в разных статистических функциях и в несовпадении процедур удаления повторяющихся строк.
- Репликация и зеркальное копирование данных. Многие промышленные базы данных содержат таблицы, которые дублируются в двух или большем количестве географически разнесенных баз данных, чтобы обеспечить высокую степень доступности или восстановления после аварий, для распределения нагрузки или снижения задержек при работе в сети. Методы, используемые для определения таких схем репликации и управления ими, у каждой базы данных свои, и от попыток стандартизовать процессы репликации пришлось отказаться.
- Коды ошибок. Коды, возвращаемые инструкциями SQL при возникновении ошибок, появились в стандарте SQL-92, но все популярные СУБД к настоящему времени давно используют собственные коды ошибок. Даже при использовании режима со стандартными кодами ошибок расширения в конкретных базах данных могут генерировать собственные коды, выходящие за рамки, определенные стандартом.
- Структура базы данных. В стандарте SQL-89 определен язык SQL, который используется уже после того, как база данных открыта и подготовлена к работе. Детали наименования баз данных и установки первоначального подключения к тому времени уже сильно отличались. Стандарт SQL-92 в некоторой степени унифицирует этот процесс, но не может полностью скрыть детали реализации.
Несмотря на перечисленные отличия, в начале 1990-х годов стали появляться (и популярны по сей день) коммерческие инструменты для работы с базами данных, реализующие переносимость между рядом различных СУБД. На практике такие программы всегда включают специальные драйвера для работы с определенными СУБД. Эти драйвера генерируют код в соответствии с определенным диалектом SQL, выполняют преобразования типов данных, трансляцию кодов ошибок и т.д.
SQL и сети
Резкий рост компьютерных сетей в 1990-х годах оказал большое влияние на управление базами данных и придал SQL новые возможности. По мере распространения сетей, приложения, которые традиционно работали на центральном мини-компьютере или мэйнфрейме, переводятся на серверы и рабочие станции ЛВС. В таких сетях SQL играет важнейшую роль и связывает приложение, выполняющееся на рабочей станции с графическим пользовательским интерфейсом, и СУБД, управляющую совместно используемыми данными на сервере. Рост популярности Интернета и Веб еще больше усилил влияние SQL в сфере сетевых технологий. С появлением трехуровневой архитектуры Интернета язык SQL стал связующим звеном между прикладной логикой (работающей на среднем уровне, сервере приложений или веб-сервере) и базой данных (третий уровень). В следующих подразделах мы поговорим о развитии архитектур сетевого управления базами данных и о роли, которую SQL играет в каждой из них.
Централизованная архитектура
На рис. 2 изображена традиционная централизованная архитектура баз данных, использовавшаяся в DB2 и первоначальных базах данных для миникомпьютеров, таких как Oracle и Ingres. В этой архитектуре и СУБД, и сами физические данные размещаются на центральном мини-компьютере или мэйнфрейме вместе с приложением, принимающим входную информацию с пользовательского терминала и отображающим на нем же данные. Прикладная программа "общается" с СУБД с помощью SQL.
Рис. 2. Управление базами данных в централизованной архитектуре
Предположим, что пользователь вводит запрос, который требует последовательного просмотра базы данных (например, запрос на вычисление среднего значения суммы сделок по всем заказам). СУБД получает этот запрос, просматривает базу данных, выбирая с диска каждую запись, вычисляет среднее значение и отображает результат на экране. Приложение и СУБД работают на одном компьютере, так что этот тип запросов (как и всех прочие) выполняется весьма эффективно.
Недостатки централизованной архитектуры проявляются при масштабировании. Поскольку система обслуживает много различных пользователей, каждый из них ощущает снижение быстродействия по мере увеличения нагрузки на систему.
Архитектура файлового сервера
Появление персональных компьютеров и локальных вычислительных сетей привело к разработке архитектуры файлового сервера (рис. 3). При такой архитектуре приложение, выполняемое на персональном компьютере, может получить прозрачный доступ к файловому серверу, на котором хранятся совместно используемые файлы. Когда приложение, работающее на персональном компьютере, запрашивает данные из такого файла, сетевое программное обеспечение автоматически считывает требуемый блок данных с сервера. Архитектура файловых серверов поддерживалась первыми СУБД для персональных компьютеров, такими как dBASE и позднее Microsoft Access, при этом на каждом персональном компьютере работала своя копия СУБД.
Рис. 3. Управление базами данных в архитектуре файлового сервера
При выполнении типичных запросов, когда требуется получение одной или небольшого количества строк из базы данных, эта архитектура обеспечивает великолепную производительность, поскольку в распоряжении каждой копии СУБД находятся все ресурсы персонального компьютера. Однако рассмотрим запрос из приведенного выше примера. Поскольку запрос требует последовательного просмотра базы данных, СУБД постоянно запрашивает новые записи из базы данных, которая физически расположена на сервере. В конечном счете СУБД запросит и получит по сети все блоки файла. Очевидно, что при выполнении запросов такого типа эта архитектура создает слишком большую нагрузку на сеть и уменьшает производительность работы.
Архитектура “клиент/сервер”
На рис. 4 изображена очередная стадия эволюции сетевых баз данных — архитектура клиент/сервер. В этой схеме персональные компьютеры объединены в локальную сеть, в которой имеется сервер баз данных, хранящий общие базы данных. Функции СУБД разделены на две части: пользовательские программы, такие как приложения для формирования интерактивных запросов, генераторы отчетов и прикладные программы, выполняются на клиентском компьютере, а ядро базы данных, которое хранит данные и управляет ими, работает на сервере. В этой архитектуре, популярность которой существенно возросла в течение 1990-х годов, SQL стал стандартным языком, обеспечивающим взаимодействие между пользовательскими программами и ядром базы данных.
Рис. 4. Управление базами данных в архитектуре “клиент/сервер”
Давайте еще раз рассмотрим пример с вычислением средней стоимости заказа. При архитектуре "клиент/сервер" запрос передается по сети на сервер баз данных в виде SQL-запроса. Ядро базы данных на сервере обрабатывает запрос и просматривает базу данных, которая также расположена на сервере. После вычисления результата ядро базы данных посылает его обратно по сети клиентскому приложению, которое отображает его на экране персонального компьютера.
Архитектура "клиент/сервер" снижает сетевой трафик и распределяет процесс загрузки базы данных. Функции для работы с пользователем, такие как обработка ввода и отображение данных, выполняются на персональном компьютере пользователя. Функции для работы с данными, такие как дисковый ввод-вывод и выполнение запросов, выполняются сервером баз данных. Наиболее важно то, что SQL обеспечивает четко определенный интерфейс между клиентской и серверной системами, эффективно передавая запросы на доступ к базе данных.
Преимущества данной архитектуры сделали ее наиболее популярной схемой при разработке новых приложений в середине 1990-х годов. Все ведущие СУБД — Oracle, Informix, Sybase, SQL Server, DB2 и многие другие — стали предлагать клиент-серверные возможности. Многие компании начали выпускать средства разработки приложений "клиент/сервер". Некоторые из них разрабатывались производителями баз данных, иные — сторонними производителями.
У архитектуры "клиент/сервер", как и у всех остальных, есть свои недостатки. Наиболее серьезный из них— проблема управления прикладным программным обеспечением, расположенным на тысячах персональных компьютеров, а не на одной центральной машине. Обновление какого-либо приложения одновременно на тысяче персональных компьютеров в крупной компании требовало от его информационного подразделения огромных усилий. Все становилось еще хуже, если изменения в прикладной программе должны были быть синхронизированы с изменениями в других приложениях или в самой СУБД. Кроме того, пользователи часто самостоятельно инсталлировали вспомогательное программное обеспечение и настраивали установленные программы на свой манер, что, безусловно, в значительной степени усложняло задачу администрирования. Компании разрабатывали специальные стратегии борьбы с этими проблемами, но все равно к концу 1990-х годов возникла необходимость пересмотреть концепции управления приложениями "клиент/сервер" в больших распределенных системах.
Многоуровневая архитектура
С развитием Интернета и особенно Веб архитектура сетевого управления базами данных получила дальнейшее развитие. Поначалу WWW являлась средой просмотра статических документов и развивалась независимо от рынка СУБД. Но когда веб-браузеры получили широкое распространение, разработчики пришли к выводу, что это очень удобный способ обеспечения доступа к корпоративным базам данных. Предположим, к примеру, что торговая компания располагает собственным веб-сайтом, на котором клиенты могут найти информацию о товарах, выпускаемых компанией, включая текстовое и графическое их описание. Естественным следующим шагом будет предоставление клиентам доступа к информации о наличии выбранного товара на складе, причем посредством того же интерфейса веб-браузера. Для этого требуется связать последний с базой данных, хранящей такую (постоянно меняющуюся) информацию.
Методы связывания веб-серверов и СУБД стремительно развивались в конце 1990-х-начале 2000-х годов, и в итоге это вылилось в трехуровневую сетевую архитектуру, показанную на рис. 5. Интерфейсом пользователя является веб-браузер, работающий на персональном компьютере или некотором другом "тонком клиенте", например таком, как смартфон. Браузер взаимодействует с веб-сервером на прикладном уровне. Если пользователь запрашивает нечто большее, чем просто статические веб-страницы, веб-сервер переадресует запрос серверу приложений, роль которого заключается в применении бизнес-логики, необходимой для обработки запроса. Зачастую запрос включает обращение к старой системе, работающей на мэйнфрейме, либо к корпоративной базе данных. Это серверный уровень модели.
Как и в случае архитектуры "клиент/сервер", SQL является стандартным языком баз данных для обмена информацией между сервером приложений и серверами баз данных. Все программные продукты прикладного уровня для обращения к базам данных оснащены API на основе SQL. Поскольку большинство коммерческих серверов приложений использует стандарт Java2 Enterprise Edition (J2EE), ведущим API для доступа сервера приложений к базе данных является Java Database Connectivity (JDBC).
Рис. 5. Управление базами данных в трехуровневой интернет-архитектуре
Влияние SQL на ИТ-индустрию и рынок
Будучи стандартным языком доступа к реляционным базам данных, SQL оказывает большое влияние на все сегменты компьютерного рынка. SQL-база данных IBM DB2 доминирует в области управления данными на мэйнфреймах. База данных Oracle контролирует рынок компьютерных систем и серверов под управлением UNIX. SQL Server от Microsoft — ведущая SQL-база данных для серверных операционных систем Windows для рабочих групп и ведомственных приложений. MySQL доминирует на рынке баз данных с открытым кодом. SQL принят в качестве технологии для оперативной обработки транзакций (online transaction processing, OLTP), что полностью опровергает мнение 1980-х годов о том, что реляционные базы данных никогда не станут достаточно производительны для применения в приложениях обработки транзакций. Хранилища данных и приложения для извлечения информации на базе SQL используются для изучения пользовательского спроса, с тем чтобы предоставлять продукты и услуги, в большей степени соответствующие требованиям рынка. В Интернете базы данных на основе SQL служат основой для более персонализированных продуктов, служб и информационных сервисов, что является ключевым преимуществом электронной коммерции.
SQL и мэйнфреймы
Хотя иерархическая база данных IMS от IBM все еще предлагается для мэйнфреймов IBM и работает со многими высокопроизводительными приложениями, ведущей базой данных для мэйнфреймов уже более чем два десятилетия является SQL-база данных DB2. IBM предлагает реализации DB2 для разных архитектур, но DB2 для мэйнфреймов можно рассматривать как "плавбазу для всей эскадры" баз данных IBM. Любые новые разработки баз данных для мэйнфреймов используют DB2, укрепляя доминирующую роль SQL в области обработки данных на мэйнфреймах.
SQL и мини-компьютеры
Сегмент рынка реляционных СУБД для мини-компьютеров начал развиваться одним из первых. Первые продукты компаний Oracle и Ingres предназначались для мини-компьютеров VAX/VMS компании Digital. С тех пор обе СУБД были перенесены на множество других платформ. СУБД компании Sybase, появившаяся позднее и предназначавшаяся для оперативной обработки транзакций, работала на нескольких платформах, включая VAX.
Кроме того, на протяжении 1980-х годов поставщики мини-компьютеров разрабатывали собственные реляционные СУБД на основе SQL. Компания Digital на каждую систему VAX/VMS устанавливала собственную СУБД Rdb/VMS. Компания Hewlett-Packard поставляла Allbase— СУБД, поддерживающую как HPSQL (диалект SQL от компании Hewlett-Packard), так и нереляционный интерфейс. Компания Data General поменяла свои старые нереляционные базы данных на СУБД DG/SQL. К тому же многие из поставщиков мини-компьютеров перепродавали реляционные СУБД независимых поставщиков. Все это помогло языку SQL утвердиться в качестве важной технологии в системах среднего уровня.
Со средины 1990-х годов SQL-продукты поставщиков мини-компьютеров, в основном, исчезли, уступив место мультиплатформенным разработкам компаний Oracle, Informix, Sybase и др. Oracle приобрела Rdb компании Digital; другие продукты постепенно оказались заброшены. Одновременно с этим угасло и влияние специализированных операционных систем для мини-компьютеров— всех их заменила операционная система UNIX. Вчерашний рынок реляционных продуктов для мини-компьютеров стал сегодняшним рынком серверов баз данных для платформы UNIX.
SQL и UNIX
SQL был однозначно признан лучшим решением в области управления данными для компьютерных систем на базе платформы UNIX. Операционная система UNIX, которая изначально была разработана в Bell Laboratories, в 1980-х годах стала стремительно завоевывать популярность как независимая от производителя стандартная операционная система. Она работает на разнообразных компьютерных системах, начиная от рабочих станций и заканчивая мэйнфреймами, и стала стандартной операционной системой для высококачественных серверных систем, включая серверы баз данных.
В начале 1980-х годов были доступны четыре большие СУБД для UNIX-систем. Две из них, производства компаний Oracle и Ingres, были UNIX-версиями продуктов для мини-компьютеров компании DEC. Две другие СУБД, Informix и Unify, были созданы специально для UNIX. Вначале ни одна из них не предлагала поддержку SQL, но к 1985 году Unify ввела эту поддержку в свою СУБД, a Informix полностью переписала свою СУБД, предложив Informix-SQL с полной поддержкой SQL.
На сегодняшний день в данном сегменте рынка лидирует СУБД Oracle, доступная для всех ведущих серверных платформ UNIX. Компания Informix была приобретена IBM, которая продолжает предлагать продукты для своих собственных и чужих UNIX-систем. Серверы баз данных на базе UNIX (и все в большей степени на базе Linux) являются ведущим звеном в архитектуре "клиент/сервер" и в трехуровневой архитектуре Интернета. Требования к повышению производительности реляционных баз данных являлись одной из основных движущих сил на пути развития аппаратного обеспечения для платформы UNIX. Сюда можно отнести принятие симметричной мультипроцессорности (Symmetric Multiprocessing, SMP) в качестве базовой серверной архитектуры, разработку многоядерных микропроцессоров (что можно рассматривать как SMP на уровне микросхемы), а также использование RAID (Redundant Array of Independent Disk, избыточный массив недорогих дисков), технологии, обеспечивающей резкое повышение производительности ввода-вывода.
SQL и персональные компьютеры
С появлением первых моделей IBM PC базы данных стали приобретать популярность на рынке персональных компьютеров. СУБД dBASE компании AshtonTate была инсталлирована более чем на миллионе персональных компьютеров, работавших под управлением MS DOS. Хотя в большинстве СУБД для персональных компьютеров данные хранились в табличной форме, эти СУБД не обладали полной мощью реляционных баз данных и не поддерживали SQL. Первые СУБД для персональных компьютеров представляли собой соответствующим образом переработанные версии известных СУБД для мини-компьютеров и с трудом "умещались" на персональных компьютерах. Например, система Professional Oracle для IBM PC, анонсированная в 1984 году, требовала двух мегабайтов памяти — намного больше типичных для того времени 640 Кбайт.
С появлением в апреле 1987 года операционной системы OS/2, созданной компаниями IBM и Microsoft, начался рост популярности SQL на персональных компьютерах. Кроме стандартной версии OS/2, компания IBM выпустила собственную расширенную редакцию OS/2 (OS/2 Extended Edition, OS/2 ЕЕ) со встроенной поддержкой SQL-базы данных и коммуникаций. Сделав SQL частью операционной системы, компания IBM тем самым вновь подтвердила свою приверженность этому языку.
Появление OS/2 ЕЕ стало проблемой для компании Microsoft. Поскольку она была разработчиком стандартной OS/2 и продавала ее другим производителям персональных компьютеров, потребовалась альтернатива OS/2 ЕЕ. Ответом Microsoft стала покупка лицензии на СУБД компании Sybase, разработанной для VAX, и перенос этой СУБД в систему OS/2. В январе 1988 года Microsoft и AshtonTate (в то время — лидер рынка баз данных для персональных компьютеров со своей dBASE) неожиданно объявили, что они будут совместно продавать новую СУБД, получившую название SQL Server. Компания Microsoft станет поставлять SQL Server вместе с OS/2 производителям компьютеров, а компания Ashton-Tate займется распространением SQL Server по розничным каналам пользователям персональных компьютеров. В сентябре 1989 года компания Lotus Development (еще один член большой тройки производителей программного обеспечения для персональных компьютеров того времени) внесла свой вклад в SQL Server, сделав инвестицию в компанию Sybase. В том же году компания Ashton-Tate отказалась от исключительных прав на распространение этой СУБД и продала свою долю компании Lotus.
Хотя успех СУБД SQL Server для OS/2 был ограниченным (как, к сожалению, и успех самой весьма неплохой операционной системы), компания Microsoft в типичном для нее стиле продолжала вкладывать деньги в эту СУБД и перенесла ее на платформу Windows NT. В течение некоторого времени компании Microsoft и Sybase оставались партнерами: первая сосредоточила свои усилия на рынке персональных компьютеров, ЛВС и Windows NT, а вторая — на рынке миникомпьютеров и UNIX-серверов. Но по мере того как Windows NT и UNIX становились конкурентами в качестве платформ для серверов баз данных, взаимоотношения между компаниями начали переходить из области сотрудничества в область конкуренции. В конце концов пути компаний окончательно разошлись. Теперь они предлагают совершенно разные продукты, хотя некоторые сходные SQL- расширения (например, хранимые процедуры) выдают в них общее прошлое.
На сегодняшний день СУБД SQL Server является ведущей СУБД для серверов под управлением Windows. Новые версии этой СУБД выходят каждые два-три года, причем с большими изменениями и дополнениями в таких областях, как работа с XML, специальные данные, полнотекстовый поиск, хранилища и анализ данных и высокая доступность. В то время как на очень больших серверах баз данных доминируют UNIX и Oracle, благодаря SQL Server серверы под управлением Windows смогли занять нишу систем среднего уровня.
SQL и обработка транзакций
В процессе своего развития SQL и реляционные базы данных почти не применялись в приложениях, предназначенных для оперативной обработки транзакций (Online Transaction Processing, OLTP). Поскольку в реляционных базах данных упор делается на запросы, такие базы данных традиционно использовались в приложениях, служащих для поддержки принятия решений, и в приложениях с малым объемом транзакций, где их низкое быстродействие не было недостатком. В области оперативной обработки транзакций, когда требовалось обеспечить одновременный доступ к данным сотням пользователей и время ожидания каждого из них не должно было превышать доли секунды, доминировала нереляционная СУБД IMS (Information Management System, система управления информацией) компании IBM.
В 1986 году компания Sybase, новичок на рынке СУБД, представила реляционную СУБД, предназначенную специально для оперативной обработки транзакций. СУБД компании Sybase работала на мини-компьютерах VAX/VMS и рабочих станциях Sun и обеспечивала уровень быстродействия, необходимый для обработк и больших объемов транзакций. Вскоре вслед за этим компании Oracle Corporation и Relational Technology объявили, что также выпустят версии своих продуктов Oracle и Ingres для оперативной обработки транзакций. На рынке UNIX-систем компания Informix анонсировала OLTP-версию своей СУБД под названием Informix-Turbo.
В апреле 1988 года компания IBM присоединилась к поставщикам реляционных СУБД для OLTP, выпустив систему DB2 Version 2. Тесты показали, что на больших мэйнфреймах эта система могла обрабатывать до 250 транзакций в секунду. Компания IBM утверждала, что теперь быстродействие DB2 позволяет использовать ее во всех OLTP-приложениях, кроме наиболее требовательных к быстродействию, и поощряла клиентов устанавливать ее вместо IMS. После этого тесты OLTP стали стандартным маркетинговым инструментом для реляционных СУБД, вопреки серьезным сомнениям в том, насколько они отражают быстродействие реальных приложений.
Развитие реляционных технологий и появление более мощных компьютеров привели к тому, что роль SQL в OLTP-приложениях резко возросла, как возросли и показатели производительности СУБД. Теперь поставщики СУБД начали позиционировать свои продукты в зависимости от показателей OLTP-производительности, и на несколько лет рынок баз данных погрузился в войну тестов производительности. Независимая организация Transaction Processing Council (ТРС, совет по средствам обрабо тки транзакций) опубликовала серию собственных тестов (ТРС-А, ТРС-В и ТРС- С), чем только подогрела интерес к данной области со стороны поставщиков.
В начале 2000-х годов реляционные базы данных на базе SQL на UNIX-серверах высокого класса преодолели рубеж 1000 транзакций в секунду. Системы "клиент/сервер", включающие реляционные СУБД, стали признанной архитектурой для реализации OLTP-приложений. Таким образом, рассматриваемый ранее как "непригодный для оперативной обработки транзакций", язык SQL вырос до промышленного стандарта в области построения OLTP-приложений.
SQL и базы данных для рабочих групп
Стремительный рост популярности локальных сетей на базе персональных компьютеров в 1980-е-90-е годы создал предпосылки для распространения новой архитектуры систем управления базами данных масштаба подразделений, или "рабочих групп". Первоначально СУБД, предназначенные для этого сегмента рынка, работали под управлением операционной системы OS/2 компании IBM. Даже СУБД SQL Server, ныне играющая ключевую роль в стратегии компании Microsoft, связанной с платформой Windows, в свое время дебютировала как продукт для OS/2. В середине 90-х годов фирма Novell тоже изо всех сил старалась сделать свою сетевую операционную систему NetWare привлекательной платформой для серверов баз данных рабочих групп. На заре эры локальных сетей NetWare прочно утвердилась в качестве доминирующей операционной системы для файл/серверов и серверов печати. Объединившись с Oracle и другими разработчиками, Novell рассчитывала распространить свое лидерство и на серверы рабочих групп.
Однако появление операционной системы Windows NT, специализированной версии Windows для применения на серверах, вызвало настоящий переворот. Если в качестве файл/сервера NetWare явно превосходила NT по производительности, то NT имела более надежную и универсальную архитектуру, во многом подобную архитектуре операционных систем для мини-компьютеров. Microsoft успешно позиционировала NT как более привлекательную платформу для работы приложений рабочих групп (в качестве сервера приложений) и баз данных рабочих групп. SQL Server компании Microsoft продавался (а часто просто встраивался) с NT в качестве тесно интегрированной платформы разработки приложений для рабочих групп. Поначалу информационные отделы компаний отнеслись к этой пока еще новой и непроверенной технологии с большой осторожностью, но предложение было слишком уж заманчивым: комбинация Windows NT и SQL Server позволяла различным подразделениям разрабатывать собственные небольшие проекты, не прибегая к помощи центрального информационного отдела компании. Поэтому она не только была принята, но и стимулировала интенсивный рост всего сегмента рынка баз данных для рабочих групп.
Сегодня SQL стал общепризнанным стандартом в качестве языка работы с базами данных для рабочих групп. В дополнение к Windows, популярной платформой для серверов рабочих групп стал Linux. Большая часть рынка поделена между Microsoft SQL Server и Oracle, но в последнее время достаточно сильным (и дешевым) конкурентом для них начинает становиться база данных с открытым кодом MySQL. Еще одним участником гонки можно назвать другую базу данных с открытым кодом — Postgres, разработанную в Калифорнийском университете в Беркли.
SQL, хранилища данных и интеллектуальные ресурсы предприятия
Несколько лет усилий по внедрению технологии SQL в сферу разработки OLTP-приложений сделали свое дело, и реляционные базы данных стали цениться не только за удобство выполнения запросов и поддержку принятия решений. Тесты производительности и отчаянное соперничество между ведущими СУБД переместились в область простых транзакций, таких как добавление новых заказов в базу данных или определение баланса счетов клиента. Благодаря мощи реляционной модели те же базы данных, которые используются для выполнения текущих деловых операций, могут служить и для анализа растущих объемов накапливаемых данных. На профессиональных конференциях менеджеров информационных служб предприятий часто можно было услышать о том, что накопленные деловые данные (разумеется, хранящиеся в реляционных базах данных) должны рассматриваться как один из ценнейших активов предприятия и служить повышению эффективности принятия деловых решений.
Хотя теоретически реляционные базы данных без труда можно использовать и для оперативной обработки транзакций, и для поддержки принятия решений, на практике возникает ряд очень важных проблем. Рабочая нагрузка OLTP-систем состоит из множества коротких транзакций, выполняемых с большой частотой, причем важным фактором является малое время реакции системы. В противоположность этому запросы, связанные с принятием решений (например, "Какова средняя стоимость заказов для данного региона?" или "Насколько увеличился сбыт продукции по сравнению с аналогичным периодом прошлого года?"), могут требовать сканирования огромных таблиц и выполняться минутами или даже часами. Если экономист-аналитик попытается выполнить подобный запрос во время пика деловых транзакций, это может вызвать серьезное снижение производительности всей системы, что для оперативной обработки транзакций просто недопустимо. Еще одну проблему составляет размещение данных, необходимых для получения ответов на вопросы из области делового анализа: они могут быть распределены между многими базами данных, причем, как правило, еще и поддерживаемыми разными СУБД и на разных компьютерных платформах.
Необходимость в полноценном использовании информационного потенциала предприятия, т.е. накопленных им данных, а также практические проблемы, связанные с производительностью OLTP-систем, породили новое технологическое решение, получившее название "хранилище данных" (data warehouses). Идею хранилища данных иллюстрирует схема на рис. 6. Бизнес-данные извлекаются из OLTP- систем предприятия, форматируются, проверяются и помещаются в отдельную базу данных, предназначенную исключительно для делового анализа ("хранилище"). Извлечение и форматирование данных можно выполнять на периодической основе в пакетном режиме во время наименьшей загрузки системы. В идеале из транзакционных баз данных извлекаются только новые и измененные данные, что позволяет сократить общее количество данных, обрабатываемых во время ежемесячной, еженедельной или ежедневной операции обновления хранилища. Таким образом, длительные запросы, связанные с деловым анализом, адресуются только к хранилищу данных и не требуют участия систем оперативной обработки транзакций.
Рис. 6. Концепция хранилищ данных
Благодаря своей гибкости в обработке запросов, реляционные СУБД идеально подходили для организации хранилищ данных. Появились новые компании, взявшиеся за разработку программных средств для извлечения данных из OLTP- систем, их преобразования, загрузки в хранилище и последующего выполнения запросов к хранилищу. Не тратили времени зря и производители СУБД, сконцентрировавшие свое внимание на типичных запросах делового анализа. Эти запросы, как правило, бывают большими и сложными, как, например, анализ десятков или сотен миллионов отдельных операций оплаты товара для выявления наиболее распространенных схем оплаты, и часто связаны с обработкой хронологических данных — скажем, анализ ежемесячного изменения объема продаж или доли компании в своем сегменте рынка. Кроме того, в таких запросах чаще всего фигурируют статистические результаты — суммарный объем продаж, средняя стоимость заказов, процент роста и т.п., а не отдельные элементы данных.
Для удовлетворения специфических потребностей приложений, работающих с хранилищами данных и часто называемых приложениями для оперативной аналитической обработки данных (Online Analytical Processing, OLAP), стали появляться специализированные СУБД. Их производительность оптимизирована для выполнения сложных запросов, связанных только с чтением данных. Они поддерживают расширенный набор статистических функций и имеют встроенные средства для других распространенных типов анализа данных, например хронологического. За счет заблаговременного вычисления статистических данных эти СУБД могут существенно ускорять получение средних и суммарных величин. Среди специализированных СУБД есть некоторое количество таких, которые не используют язык SQL, но большинство использует именно его, благодаря чему получил распространение еще один сопутствующий термин — реляционная оперативная аналитическая обработка данных (Relational Online Analytical Processing, ROLAP).
Эволюция рынка хранилищ данных привела к тому, что новым важным сегментом рынка стали инструменты для работы с хранилищами, часто именуемые интеллектуальными ресурсами (business intelligence). Три ведущие компании в этой области достигли немалого успеха на рынке до того, как были куплены промышленными гигантами. Компания Business Objects была приобретена SAP, ведущим производителем приложений уровня предприятия. Компания Hyperion досталась Oracle, a Cognos — IBM. Как и во многих других сегментах рынка, достоинства SQL в качестве стандарта сделали его важным фактором развития и обеспечили закрепление на рынке SQL-хранилищ данных и аналитического инструментария.
SQL и интернет-приложения
В конце 1990-х годов основной движущей силой развития Интернета стал Веб. Первоначально Веб использовался для распространения информации в форме текста и графики и практически не применялся в области управления данными. Однако в средине 1990-х годов большая часть содержимого на корпоративных вебсайтах была из корпоративных SQL-баз данных. Например, на коммерческом вебсайте страницы содержат информацию о товарах, ценах, доступности товара на складе, специальных предложениях и т.п., причем обычно такие страницы создаются по запросу, на основе данных, выбранных из SQL-базы данных. Подавляющее большинство страниц на сайтах аукционов или туристических агентств также основано на информации из SQL-баз данных, преобразованной в формат HTML- страниц. Осуществляется поток информации и в другом направлении, когда введенные пользователем данные в формы на веб-страницах вносятся в SQL-базы данных, являющиеся частью архитектуры веб-сайта.
В начале 2000-х годов технологии Интернета стали применяться для соединения компьютерных приложений друг с другом. Такие архитектуры распределенных приложений получили широкое распространение под общим названием вебслужб (web services). В соответствии с давними неписаными правилами компьютерной индустрии, появление новой технологии сопровождается появлением двух лагерей с различными стандартами и языками для их реализации. В данном случае это лагерь, возглавляемый Microsoft под флагом .NET Framework, и лагерь сторонников Java и J2EE-cepверов приложений. Обе архитектуры признают ключевую роль XML, стандарта обмена структурированными данными наподобие тех, что находятся в SQL-базах данных.
В ответ на поворот к веб-службам масса продуктов анонсировала поддержку XML в SQL-базах данных. Разработчики баз данных объявили о выпуске новых продуктов с поддержкой XML, доказывая, что именно в их базе данных идеально реализована встроенная возможность обмена данными в XML-формате через Интернет. На это откликнулись известные производители реляционных баз данных, добавляя в свои продукты возможность ввода-вывода в формате XML и соответствующие типы данных. Тесная интеграция XML и SQL остается областью активных исследований всех основных производителей баз данных.
Подход Интернета к масштабируемости также оказывает большое влияние на программное обеспечение баз данных. Многие элементы программного обеспечения в Интернете используют горизонтальное масштабирование, когда рабочая нагрузка распределяется между десятками или сотнями недорогих серверов. Поисковый механизм Google может служить одним из наиболее выдающихся примеров такой архитектуры, когда даже один простой запрос может быть распределен между десятками серверов, а общий объем поиска — десятки тысяч серверов в Интернете. Имеется масса трудностей при применении такого подхода к управлению базами данных, и в настоящее время в этой области ведутся активные исследовательские работы.
Заключение
В этой статье было описано развитие SQL и его роль в качестве стандартного языка управления реляционными базами данных.
- SQL был разработан научными сотрудниками компании IBM, и поддержка языка со стороны IBM является главной составляющей его успеха.
- Существуют официальные стандарты SQL, утвержденные ANSI/ISO, которые существенно выросли как по сложности, так и по количеству охватываемых тем со времени первой версии 1986 года.
- Вопреки наличию стандартов, имеется множество коммерческих диалектов SQL. Ни один из них не соответствует в точности другому.
- SQL стал стандартным языком управления базами данных в широком диапазоне компьютерных систем и приложений, включая мэйнфреймы, рабочие станции, персональные компьютеры, системы оперативной обработки транзакций, системы "клиент/сервер", хранилища данных и Интернет.