С чего все началось

В течение длительного времени в акционерном коммерческом банке "Международная финансовая компания" использовалась автоматизированная банковская система (АБС) на базе архитектуры файл--сервер, которая прошла путь поэтапной разработки и внедрения в течение примерно пяти лет, в результате чего были автоматизированы практически все проводимые операции (back-office, middle-office). Реализованы были также интерфейсы с информационными и торговыми (front-office) системами различных производителей. В настоящее время эта система насчитывает около 200 модулей, объединенных в оболочку и подсистему администрирования (рис 1).

Рис 1. Автоматизированная банковская система

АБС в качестве СУБД использует Btrieve под управлением Novell Netware, что характерно для систем, работающих во многих российских КБ, например для широко распространенной системы компании "Диасофт". При разработке своей АБС мы выбрали Clarion 3 для работы в системе DOS и Clarion 4 - под управлением Windows, поскольку это достаточно гибкие языки высокого уровня, позволяющие разрабатывать сложные финансовые приложения в кратчайшие сроки, что очень важно для банковской сферы.

По мере роста объема БД выявилось, что старый подход себя исчерпал. К тому же стали труднопереносимыми некоторые недостатки файл-серверной системы (Btrieve), а именно:

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

Перечисленное выше доставило множество неудобств при переходе в АБС на новый план счетов бухгалтерского учета в конце 1997 г. Встал закономерный вопрос о прямом переводе АБС на промышленную СУБД. Оценив объем необходимых для этого работ, мы пришли к выводу, что такой подход для нас неприемлем. К тому же мы уже знали о неудачном опыте наших коллег, пытавшихся перевести АБС на Oracle. К счастью, компания Informix Software предложила новый пакет Informix--Gateway to the Future, программный компонент которого называется Informix Direct Driver (IDD) для Clarion.

Несколько слов об IDD

Компонент IDD позволяет с наименьшими трудозатратами мигрировать унаследованную файл-серверную систему на промышленную платформу СУБД Informix, сохранив практически без изменений исходные тексты программ. Кроме того, имеется немало дополнительных возможностей. Подобный подход позволил сохранить огромный объем исходного кода, написанных на Clarion программ, без утраты работоспособности старой системы в среде Informix. Благодаря этому в дальнейшем мы смогли разрабатывать приложения с помощью более прогрессивных средств программирования, чем Clarion, а также безболезненно изменить структуру таблиц БД, избавиться от дублирования информации, обеспечить целостность данных и т. п. Подробную информацию об Informix -- Gateway to the Future можно получить на страницах журнала Informix Magazine/RE и на сервере www.informix.ru. Компания Informix предоставляет своим клиентам исходные тексты драйвера, чтобы, например, включить в них свою собственную систему криптозащиты или внести другие необходимые изменения.

IDD реализован в трехзвенной архитектуре: клиент-- промежуточный слой -- сервер. В рассматриваемом случае:

  • Клиент-- приложение АБС на рабочей станции под управлением DOS, Windows 95 или NT 4.0;
  • промежуточный слой -- демон-процесс cla_serv на выделенных серверах под управлением SCO Open Server;
  • сервер -- СУБД Informix версии 7.30 на выделенном сервере под управлением Sun OS 5.6.
  • Все серверы и рабочие станции находились в одном сегменте локальной сети банка, хотя в ней можно выделить и два, в каждом из которых будут использоваться протоколы TCP/IP или IPX/SPX. Тогда на первом можно расположить сервер БД и промежуточный слой, а на втором -- последний и рабочие станции пользователей. Таким образом, промежуточный слой может служить шлюзом IP/IPX, выполняющим в данном случае дополнительную функцию брандмауэра для повышения защищенности данных от несанкционированного доступа.

В качестве клиентской части IDD выступает подменяемый драйвер для Clarion к СУБД Informix. Кроме того, она включает библиотеки LIB и DLL, с которыми необходимо перекомпилировать исходные тексты программ на Clarion, а также программы ipxclien.exe для запуска DOS-версий. Концепция подменяемого драйвера позволяет приложению на Clarion одновременно работать с БД Informix, Btrieve, DBF-файлами и т. д., что очень важно тогда, когда переносить данные на SQL-сервер сразу в полном объеме нецелесообразно или невозможно по техническим причинам.

В драйвере происходит преобразование в SQL-запросы команд Clarion по работе с записями, что стало реальным после появления в Informix новой конструкции:

SELECT FIRST <число записей>

Записи выстроены в порядке индекса "Key", который устанавливается командой SET("Key").

При работе с данными по уникальному для Clarion индексу навигация по набору данных происходит по нему же. Ситуация усложняется, когда в таблице не существует такого индекса, однако разработчики драйвера учли и этот вариант. Для эмуляции перечисленных выше команд в среде Informix драйвер проверяет, есть ли в таблице столбец с ограничением уникальности и типа SERIAL, INTEGER или DATE, который используется для эмуляции указателя. Если его нет, то к перечню полей прибавляется ROWID (внутренний идентификатор записи).

Разработчики драйвера наделили программу дополнительными возможностями, которые кажутся весьма интересными.

* SEND(File,'SQL: ') -- команда выполняет SQL-оператор из Clarion-программы. Результат SQL-запроса сохраняется в текущую структуру RECORD Clarion. В случае, когда запрос возвращает более одной записи, рекомендуется конструкция SELECT .... INTO TEMP с последующим открытием временной таблицы как файла Clarion.

* SEND(File,'BUFFER [=size]') -- команда управляет размером буфера, который применяется при добавлении/чтении записей из таблицы за одно обращение;

* SEND(File,'KEY_PACK[=n]') -- команда "упаковывает" n-компонентный ключ в одну "скрытую" колонку, если в нем не менее n компонент.

Небольшим недостатком драйвера является то, что он не поддерживает BLOB-объекты, однако в нашей системе они применяются очень редко.

Этапы миграции в среду Informix

Этап 1
Здесь проверяется принципиальная возможность использования драйвера в данном случае. Для этого было выбрано одно из приложений АБС. Данные из одного файла Btrieve были перенесены в таблицу Informix идентичной структуры, созданной средствами Clarion с помощью оператора CREATE. Компилирование приложения с новым драйвером и дальнейшая проверка подтвердили его работоспособность.
Этап 2
Для работы с БД Clarion-программа использует стандартные описания структур записей в виде файлов -- словарей, аналогичных DDF-файлам. Поэтому на втором этапе была проведена их корректировка, которая свелась к изменению типа драйвера с Btrieve на I-SQL и параметров BUFFER, KEY_PACK. В некоторых случаях в описаниях индексов пришлось расшифровать имена полей, входящих в структуру GROUP в явном виде. Некоторые ключи имели атрибут OPT, который означает, что данный индекс уникален, за исключением NULL значений. Поскольку подобный индекс невозможен в SQL, пришлось создать триггеры на INSERT и UPDATE подобных таблиц. После окончательной корректировки файлов-словарей, по ним были созданы идентичные таблицы в БД Informix средствами Clarion с помощью оператора CREATE.
Этап 3
На этом этапе были перекомпилированы применяемые во всех модулях АБС общебанковские библиотеки бизнес-функций, в которых достаточно широко использовались транзакции. Механизм транзакций Btrieve был полностью заменен на соответствующий Informix. Оказалось, что целесообразно перенести в хранимые процедуры часть бизнес-логики.
Этап 4
На этом этапе нужен универсальный конвертер данных из Btrieve в Informix и наоборот. Мы весьма признательны специалистам из московского представительства компании Informix Software и их партнерам, которые помогли нам при его создании.
Этап 5
В ходе него были перекомпилированы входящие в "Главную книгу" модули АБС. Часть пакетных операций (закрытие операционного дня банка, расчет курсовых разниц, расчет баланса) была реализована средствами хранимых процедур. Предварительно проведенные тесты показали не только работоспособность системы в целом, но и повышение производительности в среднем в два-три раза.

Обнаруженные ошибки

В процессе тестирования было обнаружено несколько ошибок, уже устраненных разработчиками драйвера. Во-первых, возникла проблема с виртуальными полями, которые имеют в Clarion атрибуты GROUP или OVER. Если рассмотреть структуру файла счетов, то можно понять, что ключи в Clarion могут строиться как по реальным полям, так и по виртуальным. Например, ключ по номеру счета (By_Acc) строится по номеру счета второго порядка, который составляет первые пять цифр из номера лицевого счета и т. д. Первоначальная версия драйвера выдавала ошибку уже при открытии подобной таблицы. Однако его разработчики нашли элегантное решение, определяя виртуальные поля по нулевому смещению относительно начала записи.

Первая версия драйвера работала очень медленно при просмотре больших таблиц по неуникальным ключам, особенно при числе компонентов в ключе более трех. Поиск записей по ним также работал медленно. Значительного выигрыша не дала в нашем случае и возможность "упаковки" длинных ключей в "скрытые" колонки. Проблема была решена путем использования оригинального алгоритма разбиения запроса SELECT co сложным условием WHERE на несколько последовательных простых SELECT-подзапросов.

Планы на будущее

Проведенные эксперименты свидетельствуют об эффективности предложенного подхода при миграции приложений из среды файл--сервер в среду клиент--сервер. В настоящее время мы завершили работы по переводу "Главной книги" АБС в среду Informix. В дальнейшем предполагается перевод и других модулей АБС.

Хотелось бы отметить, что специалисты Informix Software оказывали нам всестороннюю поддержку и консультировали по возникающим вопросам на всех этапах миграции в среду клиент--сервер. Это позволяет нам надеяться на плодотворное сотрудничество в будущем.

Об авторах:

Дмитрий Петропавловский -- начальник управления информационных технологий,

Дмитрий Фадеев -- программист, АКБ "Международная финансовая компания"

тел.: (095) 725-58-31