Архивы: по дате | по разделам | по авторам

Базы в паутине

Архив
автор : ВАЛЕРИЙ ТОЛКОВ    09.02.1999

Однажды я получил по электронной почте письмо. Автор просил сообщить, каким программным обеспечением я воспользовался, чтобы сделать такой хороший и быстрый поиск в правовой базе данных на нашем сайте. Это было довольно давно, когда World Wide Web в России была почти неизвестна и законотворческая активность власти еще не достигла современных масштабов.

Валерий Толков - Web-программист Интернет-центра "Инфорис", Нижний Новгород.


   Уже история
   Я тогда честно ответил, что поиск был сделан с помощью небольшой программы, последовательно просматривающей текстовый файл с реквизитами документов. Сами документы хранились в виде отдельных файлов на Web-сервере. Любой запрос выполнялся за 2-3 секунды, что было, по тем временам, более чем достаточно. Кстати, коллеге мой способ не годился, у него был многомегабайтный звездный каталог. Та моя программка проработала около года. Все развивалось очень быстро. Количество документов росло, росла скорость Интернета и количество обращений. А самое главное - было очень утомительно каждый день выгружать базу данных в HTML-формат. База данных "жила" под Btrieve, что, впрочем, типично для многих организаций в России. Логичным решением представлялось обеспечить Web-доступ к реальной базе данных. При этом полностью устраняется тяжелая операция выгрузки или синхронизации баз. После написания CGI-программы, обеспечивающей такой доступ, мы даже получили некоторую экономию. Дело в том, что доступ к базе требует лицензии для каждой пользовательской станции. А CGI-программа, устанавливающая соединения с базой кратковременно, повторно использует лицензии. Так, имея всего одну лицензию, вы можете, причем совершенно законно, обеспечить доступ к базе данных сотрудникам довольно большой организации.

   Эта программа, пережив ряд дополнений, жива до сих пор. Я считаю, что решение получилось достаточно эффективным, с небольшим временем отклика. Почему? Вообще говоря, традиционная технология CGI не очень приспособлена для работы с базами данных. Ее идея, состоящая в запуске отдельной программы для обработки каждого запроса, затрудняет сохранение общей информации между запросами и приводит к необходимости открывать базу для обработки каждого запроса, а затем ее закрывать. Для разных баз "стоимость" операции открытия разная. Для Btrieve она оказалась довольно мала, главным образом потому, что ядро последней постоянно находится в памяти. Для некоторых других СУБД операция открытия потребует загрузки всей СУБД в память, открытия файлов базы, считывания больших структур данных из ее заголовков и пр. Если ваша база имеет резидентное ядро, доступ к ней через CGI-программу может быть вполне эффективен.

   Второе слагаемое эффективности состоит в кэшировании типичных запросов. Некоторые страницы - например, несколько верхних уровней рубрикатора, форма поиска и некоторые другие - хотя и зависят от информации в базе данных, меняются редко, а запрашиваются, наоборот, часто. Сохранение на некоторое разумное время (например, на сутки) "сгенерированной" HTML-страницы для подобного запроса позволит не обращаться к базе данных при последующих запросах, а просто вернуть готовую страницу. Разумеется, не стоит хранить подобным образом все страницы, а особенно результаты поиска, заданного пользователем. Статистика показывает, что повторяемость таких запросов очень мала, поэтому хранить эти страницы можно в виде файлов с именами, взятыми из URL-запроса.

   Прошло всего года три, а эта история уже начинает напоминать советы по экономии памяти в MS-DOS. Слишком много мощных инструментов появилось с тех пор. Почти все крупные производители СУБД имеют свои системы разработки приложений для Web. Рассказать обо всех невозможно. Есть и российские разработки. Есть даже своя собственная. Не могу не упомянуть мощную систему "Байконур", простую и оригинальную разработку dbPager. Остановлюсь все же на двух наиболее распространенных и перспективных технологиях от законодателей мод. Первая - это Active Servers Pages компании Microsoft. И вторая - Servlets от JavaSoft.

   Решение Microsoft
   Microsoft, как всегда, предлагает готовое и замкнутое "решение Microsoft". По многим параметрам (кроме ресурсоемкости) оно одно из наиболее удобных для пользователя.

   Web-приложение пишется как набор файлов Active Server Pages (ASP), представляющих собой как бы расширение HTML, в который добавлены инструкции на языках JScript или VBScript. Эти инструкции выполняются на сервере при запросе данной страницы и управляют формированием ответа пользователю. В простейшем случае это может быть подстановка в заданные клетки таблицы значений переменных, взятых, например, из базы данных. Доступ к базам данных производится с помощью специального объекта ADO (Active Data Object). ADO является надстройкой над OLE-DB, который позволяет единым образом обращаться к данным различного вида (например, к электронным таблицам, текстовым файлам, базам в форматах Paradox, dBase, Access, MS-SQL и любым другим через интерфейс ODBC).

   Несмотря на обилие устрашающих аббревиатур, работать c ASP довольно просто - надо только знать язык SQL. Основное преимущество этой технологии в том, что ASP обрабатываются как отдельные потоки, а не процессы, и потому позволяют сохранять данные между запросами. Здесь введено понятие сессии (то есть последовательности запросов одного пользователя), переменные которой могут хранить и объекты, включая открытую базу данных, таблицы, курсоры, наборы записей и пр. Все это позволяет создавать приложение более логично и эффективно, чем при использовании CGI.

   Поясню на примере. Допустим, у вас есть база данных по книгам в библиотеке, и вы хотите оснастить ее системой поиска. На некоторые запросы пользователь может получить слишком много релевантных ссылок. Обычная практика состоит в ограничении общего объема выводимой информации (например двадцатью строками): предлагается просматривать список постранично. В технологии CGI каждый запрос выполняется отдельной программой, поэтому, как правило, она делает запрос и показывает только первую страницу; затем при переходе на следующую страницу новый экземпляр программы делает новый запрос, но показывает уже вторую страницу и т. д. Это, конечно же, неэффективно. В технологии ASP результаты запроса могут быть сохранены как переменная сессии, и пролистывание списка будет быстрым и эффективным.

   Технология ASP допускает расширение, то есть пользователь может добавлять в нее свои объекты, написанные в технологии ActiveX (на Visual C++, Visual Basic или Delphi). Таких объектов уже довольно много. Кстати, сами языки JScript и VBScript также являются объектами. Уже есть соответствующие версии языков Perl и Python. Microsoft выпустила множество инструментов для создания сайтов - например InterDev, в среде которого даже можно отлаживать ASP-файлы.

   Я бы рекомендовал Active Server Pages тем, кто строит сеть на Windows NT и работает с базами данных MS SQL. Полный перечень возможностей ASP занял бы увесистый томик, скажу лишь, что научиться писать на ASP довольно просто, существует множество справочной литературы. А квалифицированный специалист может заняться изготовлением ISAPI-приложения, которое покажет рекорды эффективности (это, по существу, расширение сервера), хотя многопотоковое программирование доступно не каждому.

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

   В последнее время многие Web-провайдеры, базирующие свои услуги на Windows NT-системах, стали предлагать доступ к MS SQL и хранение в ней данных как одну из базовых услуг, наряду с ASP и CGI. Фактически, это позволяет создать, например виртуальный магазин. Кстати, известный российский виртуальный магазин "оЗон" (www.ozone.ru) выполнен именно по этой технологии.

   Недостатки системы типичны для Microsoft: это нешуточные требования к ресурсам и не очень высокая скорость (которая, впрочем, вполне поддается некоторой оптимизации) работы.

   Сервлеты
   Интерес к Java как основе "тонкого клиента" поостыл, но язык Java вдруг оказался удобен там, где, казалось бы, он и не нужен вовсе - на стороне сервера. Действительно, универсальность и защищенность его байт-кода здесь не нужна, компактность - не принципиальна. Тем не менее, оказалось, что пользоваться этой технологией довольно удобно. На первое место выходят объектная строгость самого языка и его способность работать на любых платформах - это позволяет размещать сервлеты на серверах с различными ОС.

   Что такое Servlet? Servlet - это класс Java, который выполняет запросы и формирует ответы пользователю. В отличие от механизма CGI, один экземпляр этого класса обрабатывает все запросы в многопотоковом режиме (в языке Java есть встроенная поддержка многопотокового программирования). Так же как и в случае с ASP, возможно сохранение любых промежуточных данных между запросами, и существует понятие сессии. Доступ к базам данных может быть выполнен по технологии JDBC.

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

   Надо сказать, что работа с Java требует более высокой квалификации, чем программирование ASP, поэтому больше подходит профессиональным программистам, а не начинающим пользователям. Я бы рекомендовал присмотреться к этой системе тем, кто имеет опыт программирования на С++ или Java.

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

   Интересующиеся могут заглянуть на сайт www.servletcentral.org.

   Вперед, к победе...

   Наличие мощных систем и инструментов не отменяет необходимости оценивать задачу, правильно выбирать инструмент и оптимизировать готовое решение. Часто "база данных" - это список из нескольких десятков записей. При таком объеме самый эффективный вид поиска - линейный, а самый эффективный способ хранения - текстовый файл. Если же количество записей велико и велико число обращений, без специальных средств не обойтись, особенно если база непрерывно модифицируется (например тоже через Web), - это требует механизма транзакций, а значит - применения СУБД.

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



© ООО "Компьютерра-Онлайн", 1997-2022
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.