Pull to refresh

Брюс Момджан, Марко Креэн, Фёдор Сигаев и Максим Богук ответили на вопросы о PostgreSQL

Reading time 5 min
Views 2K
Фото с сайта tika-online.de
30 июня мы провели онлайн-сессию «Вопросы к ведущим мировым экспертам PostgreSQL». В течение трёх часов любой желающий мог задать вопрос одному из приглашённых гостей и получить исчерпывающий ответ. В результате было получено более 40 вопросов, ни один из которых не остался без внимания.

Участники: Брюс Момджан (Bruce Momjian) (PGDG, EnterpriseDB), Максим Богук (Rambler, Мастерхост), Фёдор Сигаев (PGDG), Марко Креэн (Marko Kreen) (Skype).

Вот избранные вопросы и ответы:

Вопрос №3

kaikai:
Одна из досадных штук в работе — это отсутствие конструкции «INSERT OR UPDATE». В MySQL можно сделать так: «INSERT INTO users (username, email) VALUES ('Jo', 'jo@email.com') ON DUPLICATE KEY UPDATE email = 'jo@email.com'». Появится ли что-нибудь похожее в PostgreSQL?

Брюс Момджан, лидер сообщества PostgreSQL, эксперт компании EnterpriseDB:
Стандартный (ANSI) способ для таких вещей — это MERGE или UPSERT. Оба способа находятся у нас в TODO-листе и, насколько я знаю, кто-то работает над этой функциональностью для PostgreSQL 8.4, хотя лично я ещё не видел этого патча. Мы, вне всяких сомнений, нуждаемся в таком синтаксисе.

Вопрос №5

Alexander:
Вопросы к разработчикам Skype:
1) Хочется оценить масштабы Skype, хотя бы приблизительно. Сколько пользователей сейчас зарегистрировано? Сколько пользователей находятся одновременно онлайн? Сколько транзакций в секунду выполняет Ваш PostgreSQL? Сколько у Вас серверов PostgreSQL?
2) Как правильно померить количество транзакций в секунду в PostgreSQL?


Марко Креэн, инженер компании Skype:
1) Общее количество пользователей у нас сейчас в районе 300 миллионов. Я точно не знаю насчёт активных пользователей, но мой Skype-клиент показывает, что сейчас онлайн находятся 10 миллионов пользователей, и это далеко не пиковая нагрузка. У меня нет точных цифр по количеству транзакций в секунду (TPS), но, кажется, наша нагрузка — где-то в районе 10-20 тысяч TPS. Всего у нас более 100 серверов PostgreSQL, хотя и не все из них работают одновременно.
2) Используйте анализатор логов или pgBouncer, установленный перед базой данных, он даёт такую статистику.

Вопрос №7

Сергей Коноплёв:
У нас есть задачи генерации событий на основе операций в БД: добавление/изменение/удаление. Это, конечно, можно делать в триггерах, но на уровне WAL файлов IMHO это было бы эффективнее, не говоря о том, что обработку можно было бы делать отложенной и вынесенной. Вопрос — есть ли хорошо документированный API для работы с WAL файлами и, если есть, насколько сильно он будет меняться от версии к версии? Если да, то где можно найти информацию об этом?


Фёдор Сигаев, ведущий разработчик PostgreSQL:
Внешнее API отсутствует, поскольку никогда не предполагался внешний доступ к WAL-файлам. Более того, их формат совместим только для минорных версий, гарантии совместимости форматов между major-версиями никогда даже не предполагалось. В Постгресе даже нет центрального расшифровщика WAL-записей, каждая запись в некотором смысле контейнер, который имеет признак расшифровщика (таблица, btree-индекс, GiST-индекс и т.д.) Строить свою обработку на WAL-логах не очень удобно ещё и по следующей причине: файлы могут использоваться повторно, и Постгрес никак не оповещает внешний мир об этом.

Брюс Момджан, лидер сообщества PostgreSQL, эксперт компании EnterpriseDB:
То есть, Вы ищете способ чтения WAL-файлов напрямую? Не существует никакого API для этого, так как их внутренний формат достаточно сложен. Я сейчас понял, что возможность чтения логов могла бы быть полезной, возможно, нам стоит рассмотреть вопрос о включении этого пожелания в TODO-лист. У нас есть на самом деле pg_filedump (http://sources.redhat.com/rhdb/utilities.html), но я не уверен, что он дампит WAL-файлы.

Марко Креэн, инженер компании Skype:
Может быть, это более эффективно, но менее надёжно (например, WAL-файл может сротироваться без вашего ведома). Пожалуйста, попробуйте PgQ из пакета Skytools и поизучайте скрипты, которые используют этот механизм для организации очереди. Это очень эффективная очередь внутри базы данных, легкая в использовании и надёжная. Также в ней существует встроенный фреймворк для того, чтобы гарантировать транзакции между несколькими базами данных при обработке очереди. Ещё в ней существуют триггеры, которые автоматически определяют структуру таблиц и форматируют данные в легко разбираемом формате (urlencode).

Вопрос №8

sakalr:
Вопрос по поводу книг. Сегодня мне пришла книга из британского Амазона, пришлось ждать несколько недель. В России из актуальных версий нашёл только книгу за 3900 рублей. В общем, пусть книги будут даже на английском, но я хочу прийти в «Библио-Глобус» или в «Молодую Гвардию» и увидеть эту книгу на полке, но не за 3900 рублей (на Амазоне эта же книга была в 2 раза дешевле). Есть потребность в разработке на PostgreSQL, но для меня, как для новичка в PgSQL, это сложно. Постоянно приходится общаться на freenode на ломаном английском, осваивать азы, потратив много времени, когда это должно быть просто механическим усвоением. Именно поэтому возникает вопрос про книги. Книги по postgresql (англ./рус.) очень нужны.


Фёдор Сигаев, ведущий разработчик PostgreSQL:
Если Вы уже знакомы с каким-либо диалектом SQL, то работа в Постгресе не должна причинять Вам большие неудобства. Документация в Постгресе очень хороша и ее обычно хватает (при внимательном чтении, конечно). Если Вы не знакомы с SQL, то лучше взять любой учебник по SQL.

Брюс Момджан, лидер сообщества PostgreSQL, эксперт компании EnterpriseDB:
Я полностью согласен с тем, что нужно больше английских и русских книг. В идеале, нам нужно иметь переведённую на русский язык документацию по PostgreSQL.

Вопрос №18

kaikai:
Вот ещё вопросик, про pgAdmin — планируется ли регулярно собирать пакеты под распространенные версии Linux? Например, в Ubuntu 8.04 сейчас pgAdmin 1.8.2 (глючит), а на сайте pgadmin.org уже лежит pgAdmin 1.8.4.

Брюс Момджан, лидер сообщества PostgreSQL, эксперт компании EnterpriseDB:
Мне сказали, что эти проблемы были исправлены в Убунту (Ubuntu), которым, кстати, я сам пользуюсь. Я думаю, единственной проблемой здесь является заставить разработчиков Убунту обновить сервера для апдейтов. Также отлично работает связка пакетов программного обеспечения с Постгресом для Убунту и, возможно, Вам стóит её попробовать. Там есть PostgreSQL-сервер, pgAdmin и много другого ПО в пакетах, подготовленных Дейвом Пейджем (Dave Page), автором pgAdmin, а не разработчиками Убунту.

Вопрос №26

Как в Skype осуществляется миграция PostgreSQL между основными (major) версиями?

Марко Креэн, инженер компании Skype:
С помощью Londiste (компонент репликации в Skytools).

Вопрос №36

Дмитрий:
Планируется ли введение встроенной мульти-мастер репликации? Если да, то когда можно ожидать beta-версию?


Брюс Момджан, лидер сообщества PostgreSQL, эксперт компании EnterpriseDB:
Мы могли бы попробовать реализовать мульти-мастер репликацию, но блокировки зачастую делают её малопроизводительной. Большинство разработчиков считает мастер/слейв репликацию или партицирование данных по серверам лучшей альтернативой. PgPool, кстати, может работать в мульти-мастер режиме. PgCluster реализует мульти-мастер, но его производительность оставляет желать лучшего. Slony-II пытался реализовать мульти-мастер, но опять же-таки производительность была невысокой.

Фёдор Сигаев, ведущий разработчик PostgreSQL:
Есть планы на встроенную репликацию Master-Multiple Slaves, надеемся, что это будет в 8.4. Про Multi-Master — посмотрите на Postgres-R, его исходные коды открыты уже месяц как.

Марко Креэн, инженер компании Skype:
Если Вы хотите распределить нагрузку по записи на несколько машин, посмотрите PL/Proxy — он не является мульти-мастером в общепринятом смысле этого слова, но он обладает очень хорошей производительностью, которой так не хватает в обычных мульти-мастер системах.

Полную историю онлайн-сессии можно прочитать у нас на сайте.
Tags:
Hubs:
+29
Comments 4
Comments Comments 4

Articles