Уже в эту субботу в московском офисе Avito пройдёт чемпионат по PostgreSQL. Это соревнование по управлению базами данных с практическими задачами. Мы реализовали его на платформе, полностью собранной из опенсорс-компонентов. Протестировали уже на двух внутренних соревнованиях (получилось интересно), и теперь готовимся к тому, чтобы провести #PGHACK для всех желающих постгресменов (мы ещё принимаем заявки на участие, ссылка в конце текста). В этом посте я расскажу о том, как мы готовили платформу для чемпионата.
Рубрика «postgres» - 10
Чемпионат #PGHACK. Платформа
2017-08-29 в 14:41, admin, рубрики: open source, pghack, postgres, postgresql, Блог компании Avito, Программирование, соревнованиеPGHACK. Соревнование в офисе Avito 2 сентября
2017-08-07 в 10:01, admin, рубрики: pghack, postgres, postgresql, Администрирование баз данных, Блог компании Avito, соревнование, метки: pghackВ декабре 2016 мой коллега kevteev сказал, что было бы неплохо замутить митап по постгресу в следующем году на площадке Avito. А незадолго до этого безопасники пригласили меня поучаствовать в нескольких CTF, в том числе одном Attack-Defence. И я ответил ему: “А почему бы не замутить постгресовый хакатон?”. И вот мы подготовили первое в России очное соревнование для специалистов по PostgreSQL, и сегодня я хочу пригласить на него вас.
Читать полностью »
Индексы в PostgreSQL — 5
2017-08-01 в 7:28, admin, рубрики: index, indexing, postgres, postgresql, sql, Блог компании Postgres ProfessionalВ прошлые разы мы рассмотрели механизм индексирования PostgreSQL, интерфейс методов доступа, и два метода: хеш-индекс и B-дерево. В этой части займемся индексами GiST.
GiST
GiST — сокращение от «generalized search tree». Это сбалансированное дерево поиска, точно так же, как и рассмотренный ранее b-tree.
В чем же разница? Индекс b-tree жестко привязан к семантике сравнения: поддержка операторов «больше», «меньше», «равно» — это все, на что он способен (зато способен очень хорошо!). Но в современных базах хранятся и такие типы данных, для которых эти операторы просто не имеют смысла: геоданные, текстовые документы, картинки…
Тут на помощь и приходит индексный метод GiST. Он позволяет задать принцип распределения данных произвольного типа по сбалансированному дереву, и метод использования этого представления для доступа по некоторому оператору. Например, в GiST-индекс можно «уложить» R-дерево для пространственных данных с поддержкой операторов взаимного расположения (находится слева, справа; содержит и т. п.), или RD-дерево для множеств с поддержкой операторов пересечения или вхождения.
За счет расширяемости в PostgreSQL вполне можно создать совершенно новый метод доступа с нуля: для этого надо реализовать интерфейс с механизмом индексирования. Но это требует продумывания не только логики индексации, но и страничной структуры, эффективной реализации блокировок, поддержки журнала упреждающей записи — что подразумевает очень высокую квалификацию разработчика и большую трудоемкость. GiST упрощает задачу, беря на себя низкоуровневые проблемы и предоставляя свой собственный интерфейс: несколько функций, относящихся не к технической сфере, а к прикладной области. В этом смысле можно говорить о том, что GiST является каркасом для построения новых методов доступа.
Читать полностью »
Как настроить Travis CI для проекта .NET Core + PostgreSQL
2017-07-31 в 20:41, admin, рубрики: .net, .net core, C#, continuous integration, github, postgres, postgresql, travis-ciЯ расскажу о том, как настроить автоматический запуск модульных тестов в сервисе Travis CI для .NET Core проекта, в котором используется PostgreSQL.
Можно использовать эту статью как пример для быстрого старта.
Индексы в PostgreSQL — 4
2017-06-19 в 7:41, admin, рубрики: index, indexing, postgres, postgresql, sql, Блог компании Postgres ProfessionalМы уже рассмотрели механизм индексирования PostgreSQL и интерфейс методов доступа, а также один из методов доступа — хеш-индекс. Сейчас поговорим о самом традиционном и используемом индексе — B-дереве. Глава получилась большой, запасайтесь терпением.
Btree
Устройство
Индекс btree, он же B-дерево, пригоден для данных, которые можно отсортировать. Иными словами, для типа данных должны быть определены операторы «больше», «больше или равно», «меньше», «меньше или равно» и «равно». Заметьте, что одни и те же данные иногда можно сортировать разными способами, что возвращает нас к концепции семейства операторов.
Читать полностью »
Советы по Postgres для Rails разработчиков
2017-06-10 в 18:46, admin, рубрики: active record, activerecord, postgres, postgresql, ruby on rails, Блог компании okmeter.ioВ апреле на RailsConf в Фениксе мы обсудили огромное количество советов по использованию Postgres с Rails, и подумали, что будет полезно их записать и поделиться с более широкой аудиторией. Здесь вы найдете некоторые из них, касающиеся отладки и улучшения производительности базы данных вашего Rails приложения.
Индексы в PostgreSQL — 3
2017-05-29 в 6:48, admin, рубрики: index, indexing, postgres, postgresql, sql, Блог компании Postgres ProfessionalВ первой статье мы рассмотрели механизм индексирования PostgreSQL, во второй — интерфейс методов доступа, и теперь готовы к разговору о конкретных типах индексов. Начнем с хеш-индекса.
Hash
Устройство
Общая теория
Многие современные языки программирования включают хеш-таблицы в качестве базового типа данных. Внешне это выглядит, как обычный массив, но в качестве индекса используется не целое число, а любой тип данных (например, строка). Хеш-индекс в PostgreSQL устроен похожим образом. Как это работает?
Как правило, типы данных имеют очень большие диапазоны допустимых значений: сколько различных строк можно теоретически представить в столбце типа text? В то же время, сколько разных значений реально хранится в текстовом столбце какой-нибудь таблицы? Обычно не так много.
Идея хеширования состоит в том, чтобы значению любого типа данных сопоставить некоторое небольшое число (от 0 до N−1, всего N значений). Такое сопоставление называют хеш-функцией. Полученное число можно использовать как индекс обычного массива, куда и складывать ссылки на строки таблицы (TID). Элементы такого массива называют корзинами хеш-таблицы — в одной корзине могут лежать несколько TID-ов, если одно и то же проиндексированное значение встречается в разных строках.
Хеш-функция тем лучше, чем равномернее она распределяет исходные значения по корзинам. Но даже хорошая функция будет иногда давать одинаковый результат для разных входных значений — это называется коллизией. Так что в одной корзине могут оказаться TID-ы, соответствующие разным ключам, и поэтому полученные из индекса TID-ы необходимо перепроверять.
Читать полностью »
Как пропатчить KDE под FreeBSD или, что ждать от мастер-классов на DevCon School 1 июня
2017-05-24 в 10:19, admin, рубрики: azure service fabric, DevCon School, docker, java, kubernetes, Malmo, Microsoft Azure, minecraft, postgres, ssdl, Visual Studio, visual studio team services, VSTS, Блог компании Microsoft, Программирование, рефакторингС 2011 по 2016 включительно мы делали крутую конференцию DevCon в загородном формате на 2 дня. И каждый раз, в комментариях в анкетах нам просили больше рассказов про проекты реальных заказчиков, больше практикичеких работ!
И мы придумали и реализовали DevCon School: бесплатное для участников мероприяите с гдубоким погружением. Несмотря на свою сравнительно короткую исторю это название стало брендом и неким знаком качества. Нас просят провоидть их ещё и ещё. Особое моесто занимают большие DevCon School, которые мы проводим два раза в год. В отличие от обычных, в них есть нескольоко тем, а самое главное, есть возможность выбрать, каким именно образом с эими темами знакомиться: интенсивы или мастер-классы.
Итак, посмотрим, что же нам готовят 12 мастер-классов доступных 1 июня на DevCon School: Технологии будущего, которая пройдёт в Digital October.
Читать полностью »
Ускоряем восстановление бэкапов в Postgres. Часть вторая (потому что сокращения времени вдвое недостаточно)
2017-05-10 в 5:48, admin, рубрики: devops, pg_dump, pg_restore, postgres, Администрирование баз данных, Блог компании Southbridge, Серверная оптимизация, Серверное администрирование, системное администрированиеВ первой части статьи «Ускоряем восстановление бэкапов в Postgres» я рассказал о предпринятых шагах по уменьшению времени восстановления в локальном окружении. Мы начали с простого: pg_dump-пили (а есть ли такое слово?), паковали gzip-ом, распаковывали и направляли вывод в psql < file.sql
. На восстановление уходило около 30 минут. В итоге мы остановились на настраиваемом (custom) формате Postgres и применили аргумент -j
, добившись уменьшения времени до 16 минут.
В этой статье я описал, как нам удалось уменьшить размер файла резервной копии, что дополнительно ускорило процедуру восстановления.
Индексы в PostgreSQL — 2
2017-05-10 в 5:34, admin, рубрики: index, indexing, postgres, postgresql, sql, Блог компании Postgres ProfessionalИнтерфейс
В первой части мы говорили о том, что метод доступа должен предоставлять информацию о себе. Посмотрим, как устроен этот интерфейс.
Свойства
Все свойства методов доступа представлены в таблице pg_am (am — access method). Из этой таблицы можно получить и сам список доступных методов:
postgres=# select amname from pg_am;
amname
--------
btree
hash
gist
gin
spgist
brin
(6 rows)
Хотя к методам доступа можно с полным правом отнести и последовательное сканирование, исторически сложилось так, что оно отсутствует в этом списке.
В версиях PostgreSQL 9.5 и более старых каждое свойство было представлено отдельным полем таблицы pg_am. Начиная с версии 9.6 свойства опрашиваются специальными функциями и разделены на несколько уровней:
- свойства метода доступа — pg_indexam_has_property,
- свойства конкретного индекса — pg_index_has_property,
- свойства отдельных столбцов индекса — pg_index_column_has_property.
Разделение на уровни метода доступа и индекса сделано с прицелом на будущее: в настоящее время все индексы, созданные на основе одного метода доступа, всегда будут иметь одинаковые свойства.