Pull to refresh

«Мое самое главное испытание – не сломать драйвер» — Dave Cramer о разработке драйвера JDBC для PostgreSQL

Reading time8 min
Views4.3K
Наш сегодняшний собеседник – Dave Cramer, один из ключевых контрибьюторов в PostgreSQL, автор и мэнтейнер драйвера JDBC для Посгреса на протяжении более 15 лет.

Dave не очень часто выступает на публике. Нам крупно повезло, он согласился приехать на PG Day'17 Russia, чтобы провести практикум / мастер-класс по оптимизации и эффективному использованию Java в PostgreSQL вместе со своими коллегами-контрибьюторами в pgjdbc, Álvaro Hernández Tortosa и Владимиром Ситниковым. Не менее интересным намечается доклад Дэйва, посвященный скрытым возможностям драйвера.

Беседа получилась интересная. Дэйв – очень лаконичный собеседник, отвечающий коротко и по делу. Нам удалось обстоятельно поговорить о текущем состоянии дел в разработке драйвера JDBC и роли Дэйва в этом процессе. Он также поделился своим мнением о применении Java для разработки хранимых процедур и видением текущего состояния международного сообщества PostgreSQL. Не оставили мы без внимания и традиционный анонс предстоящего мастер-класса.




PG Day: Dave, расскажи вкратце о себе: кто ты, чем занимаешься, как проводишь свободное время?

Dave: Привет, меня зовут Дэйв Крамер, я работаю с языком PostgreSQL уже 15-16 лет, начиная с 2000-го года, и основной сферой моей деятельности здесь является работа с драйвером JDBC, потому что раньше я был программистом Java. Я также занимался некоторыми процедурными языками, например, pl/R. Что меня интересует в PostgreSQL? Продвижение сообщества, его развитие.

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

Я живу в Канаде, и иногда зимой уезжаю во Флориду. Что касается свободного времени, то я люблю гонять на машине по треку. Я всегда несусь так быстро, как только могу. Думаю, можно разогнаться еще быстрее, но меня ограничивают собственные навыки.

PG Day: Как и почему ты начал работать с драйвером Java для PostgreSQL?

Dave: В 1999-2000 годах программное обеспечение с открытым исходным кодом (open source) было не так распространено, как сейчас. В тот момент, я только стал частным подрядчиком, работать сам на себя. Как-то я позвонил в техподдержку Microsoft (у меня был клиент), возникла проблема, и я надеялся, что они ее решат. Они ответили: «Мы свяжемся с вами через три недели». Понятно, что на три недели я остался без работы, поэтому меня это немного напрягло. Я начал рассматривать другие варианты, и наткнулся на open source, я об этом ничего не знал. Я поспрашивал людей, как разобраться в этом? И мне посоветовали отвечать на вопросы в mailing list. Я так и сделал. На первый вопрос я отвечал два или три дня. Со вторым я разобрался проще. И потихоньку я стал довольно оперативно на них отвечать.

В то время другой человек занимался драйвером JDBC, и внезапно ему это стало не интересно, а я всё время был на виду, так что Bruce Momjian предложил мне им заняться. И я ответил «да». Это было 15-16 лет назад и вот – до сих пор.

PG Day: Ты и сейчас продолжаешь обновлять кодовую базу?

Dave: Я скорее делегирую это другим. Я управляю разработкой. Иногда я долго не работаю над драйвером, за меня этим занимаются другие. Я как бы на втором плане. Больше работают другие люди, нежели я сам. Моя главная задача – управлять процессом, следить, чтобы никто ничего не сломал. Каждый старается улучшить код со своей стороны, но не все всегда мыслят глобально.

По моим расчётам, на драйвер JDBC полагаются тысячи компаний. И если мы добавим какую-то опцию, из-за которой всё накроется даже у пятисот, то пострадает очень много людей. Так что я скорее менеджер проекта.

Вот только сегодня пофиксил пару багов, так что… К слову, много кодят русские. Владимир Ситников, например. Очень много кода внес в драйвер.

PG Day: Сколько людей сейчас задействовано в активном развитии драйвера? Как происходит рабочий процесс?

Dave: Откровенно говоря, людей не хватает. Их число время от времени меняется. В зависимости от того, кто хочет решить ту или иную проблему. Совсем недавно парень в Великобритании полностью переписал драйвер для Maven. Владимир Горячев, кажется, так его зовут, написал компонент для логического декодирования к драйверу. Владимир Ситников потратил большое количество времени на оптимизацию драйвера.

У нас много людей, работающих над драйвером, но они появляются и исчезают. И я пытаюсь придумать, как привлечь еще больше людей.

PG Day: Есть ли какие-то крупные компании, которые пытаются спонсировать развитие, поддерживать инициативу, платя людям за улучшение проекта?

Dave: Я никогда не видел, чтобы кто-то предложил свою помощь и оплатил работу над драйвером. Я думаю, Владимиру Ситникову платит его компания (Netcracker — прим.ред.), чтобы он работал над драйвером. Но я в этом не уверен. Мне кажется, Red Hat спонсировала какую-то работу, связанную с пакетированием. Pivotal, в ту пору когда я на них работал, были не против, чтобы я работал над драйвером. Open SCG также были не против. Но чтобы компания спонсировала чью-то работу над драйвером… Такого, кажется, не случалось.

PG Day: Ты планируешь оставить свою роль куратора и менеджера проекта? Какие у тебя планы на будущее?

Dave: У меня нет планов уходить. Я пока не думал о будущем, но не планирую оставлять свою работу. Пока мне помогают другие люди, я буду следить за драйвером, управлять разработкой, фиксить баги. Так что нет, в ближайшем будущем я планирую продолжать этим заниматься.

PG Day: Какие из последних улучшений JDBC тебе кажутся наиболее интересными, впечатляющими, если говорить о PostgreSQL?

Dave: Самая поразительная вещь, которая случилась на моих глазах с драйвером – у нас появилась логическая репликация. Почему это так важно? Теперь мы можем осуществлять сбор изменившихся данных (Changed Data Capture). Мы пишем чистый код на Java. До этого времени нам приходилось писать триггеры, посылать данные в какой-то алгоритм, создавать файл, очередь или что-нибудь подобное, читать данные асинхронно, а затем обновлять код. Обновлять приложение.

Теперь же у нас есть логическая репликация, встроенная в драйвер. Мы можем делать обновления в режиме реального времени в то время, как данные изменяются. Я бы назвал это главным нововведением. Хотя это не умаляет нашей прошлой работы – сделать драйвер быстрее. Вообще есть две вещи. Первая – мы ускорили драйвер, и вторая – полностью переписали код, чтобы его легче было читать и работать над ним людям, которые незнакомы с драйвером. Вот две самые главные вещи. Помимо логической репликации.

PG Day: Есть ли какие-то проблемы в архитектуре драйвера, которые ты хотел бы исправить?

Dave: Единственное, чего не хватает драйверу, – это возможности грамотно обрабатывать пользовательские типы. Я хотел бы, чтобы это добавили в драйвер, но эту опцию не так часто запрашивают.

Насколько я могу судить, с драйвером всё в порядке, он работает относительно неплохо. И с архитектурой вроде всё хорошо.

PG Day: Как люди справляются с отсутствием поддержки пользовательских типов? Существуют ли какие-то способы решения проблемы?

Dave: Для PostgreSQL есть еще один драйвер, который выполняет эту задачу. Он называется pgjdbc-ng, драйвер нового поколения. Внимания он не привлекает, и я не думаю, что пользовательские типы – это элемент, который часто используется в сообществе, где применяется PostgreSQL. Мне кажется, большинство тех, что пользуются Java, используют технологию Hibernate, Spring, и по большей части их данные очень просты. Они делают выборки, вставляют данные, удаляют и в общем-то всё.

По-моему, есть один момент – и он относится к вопросу, который ты задал ранее – тратят ли люди, компании деньги для работы над драйвером… Что является самой большой сложностью для нас, как для создателей драйвера JDBC (и любых других драйверов)? Драйверы – это как колёса у машин. Люди покупают машину и ожидают, что у нее будут колёса. Они круглые, у них мало функций, однако они двигают машину. Но пока колёса крутятся, людям на них наплевать. Это не модно. Люди не тратят часы своего времени, обсуждая это на hackers’ list.

Мое самое главное испытание – не сломать драйвер.

PG Day: Java внутри PostgreSQL как язык для написания хранимых процедур – это хорошая мысль? Каковы типичные случаи применения такого инструмента?

Dave: Да, существует технология под названием PL/Java – Java как язык хранимых процедур в PostgreSQL. Проблема заключается в том, что PostgreSQL процессно-ориентирован. Каждый раз, как вы пишете на языке хранимых процедур Java и исполняете их, необходимо стартовать JVM внутри соединения.

Это становится довольно дорогостоящим процессом. Так что надо убедиться в том, что вы используете запуск хранимой процедуры из Java только тогда, когда это можно написать на Java. И стоит тех startup costs, которые тратятся на JVM. Это можно наблюдать и в других языках, например, PL/Python и в особенности в pl/R. Все эти языки мы хотели бы использовать, чтобы производить какую-то существенную обработку данных в JVM, pl/R или Python – языках, используемых специалистами по обработке и анализу данных.

Считаю ли я PL/Java хорошей идеей? Я не очень-то в этом убеждён. Некоторое время я занимался другим проектом под названием pl/J, который осуществлял разделяемый доступ к JVM среди соединений, и я буду рад, если этот проект кто-то возродит. Лично у меня не было на него времени. Код еще остался. Это довольно сложно. Oracle проделали довольно большую работу относительно Java внутри базы данных. Их JVM внутри Oracle – это не та JVM, что есть у нас. У них есть отдельная JVM, оптимизированная специально под эти задачи. Я думаю, что у нее нет тех startup costs, которые есть для PostgreSQL. В таком случае, если что-то можно сделать только на Java, это будет оправданно.

PG Day: Ни для кого не секрет, что Java – одна из основных корпоративных технологий. Как, по вашему мнению, PostgreSQL – хороший выбор для построения вокруг него комплекса корпоративных технологий?

Dave: Я бы сказал, что да, но у меня в этом есть личный интерес. Я думаю, главная загвоздка здесь в цене. Нет никаких препятствий для разработки с использованием PostgreSQL с минимальными затратами.

Более серьезное испытание, с которым мы сталкиваемся, как разработчики PostgreSQL, – это внедрение технологии и наши попытки заставить людей поверить в него. В Северной Америке мы заметили серьезный интерес к PostgreSQL. Всплеск интереса, так как люди стали больше внимания обращать на стоимость проектов.

Мне кажется, значимой сложностью в коммерции является огромное количество баз данных, которые на данный момент управляются крупными корпорациями. Нередко слышишь, что у них тысячи баз данных, а значит, если ты платишь per core за свои базы, то это становится очень затратно. Особенно сейчас, когда все масштабируют свои сервисы, внедряют микросервисные архитектуры, использовать проприетарное техническое решение становится гораздо затратнее.

PG Day: Какие изменения ты заметил за последние 5-10 лет, проведённых в сообществе? Есть ли понимание, в какую сторону оно движется?

Dave: За последние пять лет популярность PostgreSQL выросла. Увеличивается количество людей, работающих на нём, как и количество людей, пишущих код для самого PostgreSQL. Когда я начинал, довольно мало людей писали код, всего 4-5 человек, которые реально работали с кодом. Сегодня у нас уже около 10 компаний, в каждой по 10 человек, и все они вносят существенный вклад в код проекта.

Порой куски кода даже несовместимы друг с другом. Так что главная задача, стоящая перед нашей группой, – это решение данных проблем. И выбор правильного пути для сообщества с целью предоставления пользователю оптимальной функциональности. Многие возможности управляются соответствующими компаниями. Клиенты имеют личный интерес, почему они хотят ту или иную опцию. Это, пожалуй, наиболее сложная для нас задача.

PG Day: Можешь дать краткое превью того, что будет на вашем семинаре, который Вы устраиваете с Альваро и Владимиром на PG Day’17 Russia? Что Вы включите в программу, над какими проблемами и задачами будете работать?

Dave: Мы хотим сделать курс ориентированным на практику. Разобьем его на несколько блоков, каждый из нас готовит материал для своего блока. Будет около полутора часов теории, остальное – практика. Наша задача – бросить вызов слушателю, заставить его попотеть. Вряд ли все смогут успеть решить абсолютно все задачи. Но это даст стимул к развитию. Мы, конечно же, покажем правильные и неправильные подходы к решению задач. Это даст слушателю пищу для размышлений и дальнейшей практики.

Мы сейчас прорабатываем несколько основных тем: производительность вставки данных, логическое декодирование, работа с типами данных. Владимир готовит очень интересный материал, посвященный методикам измерения производительности в программах. Как распознать, где “боттлнек”: на уровне, приложения, драйвера или базы данных? Владимир про все это будет рассказывать.

Это корневые темы. Возможно, что-то еще успеем, на усмотрение слушателей. Мы заготовим материал с некоторым избытком. Всеми наработками потом поделимся, чтобы слушатели могли практиковаться и после семинара.

PG Day: Спасибо, Dave!
Tags:
Hubs:
Total votes 8: ↑8 and ↓0+8
Comments0

Articles

Information

Website
pgday.ru
Registered
Founded
Employees
2–10 employees
Location
Россия