ПОРТИРОВАНИЕ ОБЛАЧНОГО РЕШЕНИЯ С ORACLE НА POSTGRESQL
СПРАВКА О КОМПАНИИ СОТРУДНИКОВ 1000 ПРОГРАММНЫХ ПРОДУКТОВ 80 КРУПНЕЙШИЕ ЗАКАЗЧИКИ ОФИСЫ «БАРС ГРУП» Казань Москва Санкт-Петербург Новосибирск Набережные Челны Ростов-на-Дону Севастополь Краснодар БОЛЕЕ
ИСПОЛЬЗУЕМЫЕ ТЕХНОЛОГИИ БЭКЕНД-ТЕХНОЛОГИИСУБД php.net python java
ПОРТИРОВАНИЕ МИС. ПОСТАНОВКА ЗАДАЧИ. МЕДИЦИНСКАЯ ИС «БАРС.Здравоохранение-МИС» - решение для автоматизации деятельности стационаров и поликлиник, включая обмен данными между ЛПУ и централизованный сбор показателей со всей сети медучреждений. ЦЕЛИ ЭКСПЕРИМЕНТА Унификация Снижение стоимости внедрения и поддержки Переход к свободному ПО Трехзвенная архитектура; Тонкий веб-клиент; Тонкий веб-сервер; Толстый сервер БД; ТЕХНОЛОГИЧЕСКИЕ ВВОДНЫЕ:
ОЦЕНКА Таблиц 1837 Представлений 1809 Триггеры 1254 Пакетов 1231 Функций 22 Процедуры SQL запросов 4750 PL/SQL неименованных блоков СТАТИСТИКА ПО ОБЪЕКТАМ: ВЕБ ИНТЕРФЕЙС:
ЭКСПЕРИМЕНТ С ORA2PG ПЕРЕНОС СТРУКТУРЫ БД И ДАННЫХ прошел с минимальными проблемами Системные объекты Oracle Переменные пакетов ПЕРЕНОС ПАКЕТОВ И ПРОЦЕДУР Пакты разбиваются на схемы, что нас не устраивает Вызов функций без использования результата не дополняется «perform» конструкция begin select into exception end не дополняется ключевым словом strict ПРОЧИЕ ПРОБЛЕМЫ Вложенные функции
КОНВЕРТАЦИЯ ПАКЕТОВ И ПРОЦЕДУР РАЗРАБОТКА СОБСТВЕННОГО КОНВЕРТЕРА: Разбор исходного кода ( ANTLR3 ) Преобразования Выдача результата
ПРЕОБРАЗОВАНИЯ. ОСНОВНЫЕ МОМЕНТЫ. В sql-запросах (+) заменяется на outer join Сохранение комментариев Вложенные функции и процедуры Процедуры заменяются на функции с такой же сигнатурой OUT-параметры. Преобразование передачи параметров по ссылке на возвращаемые композитные объекты с полями. Пакеты разбиваются на составляющие их процедуры и функции со сквозным именованием. (но, возможно, с возвращаемыми значениями, если были OUT-параметры)
ПРЕОБРАЗОВАНИЯ. ПРОЧИЕ МОМЕНТЫ. Добавляется perform перед вызовом функциями, если не используется возвращаемое значение Добавляется strict к returning into Убирается from dual Добавляются декларации для переменной цикла У for reverse меняются местами индексы Некоторые oracle-функции заменяются на их аналоги (nvl, sysdate, dbms_output, raise_application_error) Заменяются типы данных
НЕИМЕНОВАННЫЕ БЛОКИ ПРОБЛЕМЫ: Невозможно передать параметры внутрь блока Невозможно получить результат выполнения PL/SQL неименованных блоков РЕШЕНИЯ: Временные функции. Переписать все блоки на постоянные функции. Научиться передавать параметры и возвращать данные Нами подготовлен концепт патча, который реализует искомую функциональность.
РЕЗУЛЬТАТЫ ЭКСПЕРИМЕНТА Мигрировали структуру БД, данные с использованием ora2pg На базе Antlr3 + грамматики + преобразование смогли мигрировать более 90% кода Оставшиеся 10% переносятся, адаптируются вручную, учитывая специфику СУБД
ЧТО ДАЛЬШЕ? Доработка конвертера АДАПТАЦИЯ патча к PG в части неименованных блоков с параметрами Доведение до Готовности к промышленной эксплуатации РОСТ КОМПЕТЕНЦИИ в части больших высоконагруженных систем
СПАСИБО ЗА ВНИМАНИЕ