title

text

Никита Глухов
Никита Глухов Postgres Professional Старший разработчик
Олег Бартунов
Олег Бартунов Postgres Professional генеральный директор
15:45 26 октября
45 мин

Элегантный поиск ближайших соседей в PostgreSQL

С необходимостью эффективного поиска ближайших соседей можно встретиться в разных задачах, например, поиск ближайших к заданной точке объектов на карте. Задача, на непрограммистский взгляд кажущаяся тривиальной (действительно, человек довольно легко справляется с ней глядя на карту) , на самом деле не имеет общего и доступного решения, что приводит к головной боли разработчиков, которые придумывают ad hoc решения (вставляют костыли). Эти решения, обычно некрасивые, портят настроение творческой натуры программиста, которому требуется посещение пивной, чтобы пережить когнитивный диссонанс :)

Действительно, если у человека есть карта, у которой есть определенный масштаб, и характерный размер поля зрения, то у программиста есть только координаты заданной точки и множество точек, которых может быть очень много (миллиарды звезд !), и к которому может идти большое количество конкурентных запросов, причем не только на чтение. Язык SQL позволяет очень красиво записать запрос, но реальный план его выполнения удручает - требуется прочитать всю таблицу, вычислить все расстояния от заданной точки, отсортировать по убыванию и оставить требуемое количество записей. Наличие индексов не спасает, а только приводит к полному обходу поискового дерева и чтения всей таблицы в случайном порядке, что гораздо медленнее простого чтения таблицы.

В действительности, класс задач, в которых требуется эффективный поиск ближайших соседей, гораздо шире задач пространственного поиска, например, задачи классификации, задачи поиска очепяток, кластеризации, дедупликации данных. Все они могут сильно выиграть от поддержки эффективного поиска ближайших соседей в СУБД, которые являются в настоящее время де-факто стандартом хранения данных. Эффективный поиск означает быстрый, конкурентный, масштабируемый поиск и поддержку различных типов данных (возможно, нестандартных), что и было реализовано 11 лет назад в PostgreSQL. Я расскажу про его реализацию, современное состояние и примеры использования.

Слайды

Видео

Видео доступно участникам мероприятия, выполнившим вход в личный кабинет

Другие доклады

  • Иван Чувашов
    Иван Чувашов ООО Calltouch DBA
    45 мин

    Неожиданности PostgreSQL, которые украдут вашу ночь

    Мы эксплуатируем большие базы данных PostgreSQL, суммарный объем которых превышает 180ТБ. На каждый инстанс кластера приходится нагрузка не менее 15 тыс запросов в секунду. Эти обстоятельства, во-первых, накладывают определенные ограничения на классические подходы накатки изменений в структуре баз данных. А во-вторых, в администрировании баз данных сильно снижается право на ошибку. Ведь небольшая ошибка или неточность может привести к тому, что ближайшая ночь станет бессонной) В своем докладе я расскажу про существующие у нас ограничения на "доставку" изменений в продуктовую среду, про неклассическое поведение базы данных под нагрузкой и вообще про PostgreSQL.

  • Павел Толмачев
    Павел Толмачев Postgres Professional Специалист образовательного отдела
    22 мин

    Сертификация PostgreSQL: личный опыт сдачи четырех тестов

    В мае 2019 г. компания «Постгрес Профессиональный» запустила программу сертификации по PostgreSQL. Я работаю в этой компании с марта 2020 г. и за год успешно сдал четыре теста по курсам DBA1, DBA2, DBA3, QPT. В этом выступлении я поделюсь своим опытом подготовки и сдачи этих тестов.

  • Даниил Захлыстов
    Даниил Захлыстов Яндекс.Облако Разработчик
    22 мин

    Сжатие протокола PostgreSQL: текущий статус

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

  • Екатерина Соколова
    Екатерина Соколова Postgres Professional Младший разработчик ПО
    22 мин

    PG_QUERY_STATE: Всё о внутренней жизни ваших запросов

    Отлаживая взаимодействие с базой данных мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися запросами. Как узнать степень завершённости, диагностировать ошибки в написании или выполнении, не убивая уже запущенный процесс? Модуль pg_query_state - open source расширение PostgreSQL, позволяющее в реальном времени увидеть план запроса, а также статистику по каждому этапу его выполнения, чтобы своевременно выявить и воздействовать на причину проблемы. Я расскажу про уникальные возможности применения функции pg_query_state, перспективы её использования в сочетании с существующими инструментами мониторинга и создание прогресс бара выполнения запроса на её основе.