Фирма «1С» объявила о выходе версии 8.1 платформы «1С:Предприятие», серверная часть которой работает под управлением Linux. В качестве хранилища данных теперь используется в том числе и PostgreSQL. Патчи к исходному коду PostgreSQL доступны по адресу http://v8.1c.ru/overview/postgres_patches_notes.htm.
Можно долго и эмоционально говорить о продуктах фирмы «1С», но они реальны и реальность эта повседневна. А то, что эта реальность стала использовать продукты с открытым кодом, это явно плюс. Для выяснения подробностей я связался с представителем фирмы Алексеем Харитоновым через стандартный e-mail 1c@1c.ru.
В дальнейшем текст интервью был прокомментирован Фёдором Сигаевым и Олегом Бартуновым. Интервью с Фёдором Сигаемым и Олегом Бартуновым были опубликованы в декабрьском и ноябрьском номерах LXF, соответственно.
Евгений Балдин Евгений: Почему был выбран именно PostgreSQL? Лет пять назад особого выбора среди свободных продуктов не было. Но сейчас подросла в своих возможностях MySQL, Firebird восстал из пепла Interbase, да и смысла зацикливаться на открытых реализациях для 1С особого нет. Или есть?
Алексей Харитонов Алексей: Нам требовалась DBMS, работающая под ОС Linux, лицензия на которую предусматривала бы возможность её свободного (без отчислений) распространения и самостоятельной модификации. Такой вариант мы считаем полезным для определённого сегмента рынка. Из DBMS для Linux, лицензируемых на таких условиях, мы оценили PostgreSQL как наиболее качественную и эффективную.
Евгений: Какие изменения были внесены в базовый код PostgreSQL? Будут ли эти изменения интегрированы в основное дерево проекта PostgreSQL?
Алексей: Основная причина, по которой появилась необходимость модифицировать PostgreSQL 8.1 -- это то, что оригинальная версия не поддерживает сравнение строк, нечувствительное к регистру букв. Внесённые в PostgreSQL изменения позволили эффективно (быстро) работать с русскими символами в кодировке Unicode. Кроме того, конфигурационные файлы, которые получаются после установки PostgreSQL 8.1, модифицированного для работы с «1С:Предприятием», несколько отличаются от оригинальных. Это также сделано для лучшего согласования PostgreSQL 8.1 с «1С:Предприятием» 8.1.
Мы взаимодействуем с разработчиками PostgreSQL. Дополнительные модули расширения и необходимые изменения к БД были подготовлены членами команды разработчиков PostgreSQL Олегом Бартуновым и Фёдором Сигаевым. Включение этих изменений в основную ветку будет ещё обсуждаться.
Просьба о комментарии: Что было уже добавлено и планируется добавить в ближайшее время в основную ветку в результате этой работы?
Комментарий: Добавлена возможность использования модификатора типа для пользовательских типов. Возможность указания положения NULL реализована (см. выше). Также мы планируем внести оптимизацию OR запросов и индексную поддержку IS [NOT] NULL. Второй пункт требует заметной модернизации существующего патча в связи с изменением внутренних интерфейсов.
Остальные модификации являются, на наш взгляд, 1С-специфичными, поэтому мы не будем предлагать их к включению в PostgreSQL, хотя ни в коей мере не ограничиваем их распространение (как и 1С).
Евгений: Что с точки зрения «1C» нужно добавить PostgreSQL, чтобы улучшить его функциональность?
Алексей: Критически важные для нас исправления мы внесли в патч, часть этих исправлений уже внесена в PostgreSQL 8.2. Прежде всего мы рекомендовали бы внести в основной проект все сделанные нами изменения, поскольку они необходимы для работы различных систем (не только «1С:Предприятия») с русским языком. Есть и другие пожелания -- пока мы обсуждаем их с разработчиками PostgreSQL.
Просьба о комментарии: Хотелось бы узнать о каких пожеланиях идёт речь. Какое место у PostgreSQL и для каких задач является узким?
Комментарий: Остался открытым вопрос о блокировках интенсивно обновляемой таблицы. Разработчикам 1C хочется как можно меньше интерферировать с автовакуумом, что приводит к существенной деградации производительности в этом случае. Этот вопрос несколько раз обсуждался среди разработчиков, но пока особого энтузиазма не проявляется. Дело в том, что вся система блокировок в PostgreSQL требует переработки и частные решения сейчас просто никому не нужны.
Евгений: Есть ли в планах «1С» сотрудничество с сообществом открытых исходников, ну, или, хотя бы, использование других открытых продуктов для целей бизнеса кроме PostgreSQL?
Алексей: Примеры использования нами open source продуктов не ограничиваются PostgreSQL -- так, в «1С:Предприятии 8.1» расширенная поддержка XML реализована на основе библиотек Apache Xerces и Apache Xalan. Для интернационализации используется библиотека ICU.
Просьба о комментарии: Честно говоря, библиотека ICU (International Components for Unicode) обошла меня стороной. Я посмотрел домашнюю страничку библиотеки http://icu.sourceforge.net, но так и не понял в чём её достоинства.
Комментарий: Дело в том, что локализация PostgreSQL является системно-зависимой, что приводит к тому, что поведение, порядок сортировки, например, может отличается даже под разными версиями Linux, не говоря уже об отличиях между Windows и Unix. Например, отличия в сортировке между FreeBSD и Linux, даже для английских символов:
FreeBSD Linux AA aa Aa aA aA Aa aa AAOracle, DB2, например, используют свою, внутреннюю локализация, что делает поведение приложений под разными ОС более предсказуемым. Использование библиотеки ICU, распространяемой под X-лицензией (http://www-306.ibm.com/software/globalization/icu/license.jsp), в то время как PostgreSQL распространяется под лицензией BSD, возможно, так как библиотека используется в отдельном модуле, который может распространяться отдельно.
В качестве одного из возможных направлений бизнес-сотрудничества мы сейчас рассматриваем варианты лицензирования Linux-версии сервера приложений «1С:Предприятия 8.1» для ОЕМ-поставки с дистрибутивами Linux.
Просьба о комментарии: Не совсем понятно что значит «не поддерживает сравнение строк, нечувствительное к регистру букв»? Разве нельзя до сравнения привести строки к одному регистру?
Комментарий: Так как 1C разрабатывалась под MS SQL, в которой сравнение строк нечувствительно к регистру, то многие запросы использовали этот факт. Для разработчиков 1C было принципиально не переписывать запросы специально под PostgreSQL, который имеет разные операции для сравнения строк. Но переделки/усовершенствования не ограничивались нечувствительностью к регистру. В процессе разработки мы старались не сильно менять поведение PostgreSQL, поэтому часть изменений была оформлена как подключаемые модули. Реализация в виде модуля позволяет использовать библиотеки с лицензией отличной от BSD, под которой распространяется PostgreSQL.
Полный список (вкратце, так как подробности могут занять много места):