Элегантный поиск ближайших соседей в PostgreSQL
С необходимостью эффективного поиска ближайших соседей можно встретиться в разных задачах, например, поиск ближайших к заданной точке объектов на карте. Задача, на непрограммистский взгляд кажущаяся тривиальной (действительно, человек довольно легко справляется с ней глядя на карту) , на самом деле не имеет общего и доступного решения, что приводит к головной боли разработчиков, которые придумывают ad hoc решения (вставляют костыли). Эти решения, обычно некрасивые, портят настроение творческой натуры программиста, которому требуется посещение пивной, чтобы пережить когнитивный диссонанс :)
Действительно, если у человека есть карта, у которой есть определенный масштаб, и характерный размер поля зрения, то у программиста есть только координаты заданной точки и множество точек, которых может быть очень много (миллиарды звезд !), и к которому может идти большое количество конкурентных запросов, причем не только на чтение. Язык SQL позволяет очень красиво записать запрос, но реальный план его выполнения удручает - требуется прочитать всю таблицу, вычислить все расстояния от заданной точки, отсортировать по убыванию и оставить требуемое количество записей. Наличие индексов не спасает, а только приводит к полному обходу поискового дерева и чтения всей таблицы в случайном порядке, что гораздо медленнее простого чтения таблицы.
В действительности, класс задач, в которых требуется эффективный поиск ближайших соседей, гораздо шире задач пространственного поиска, например, задачи классификации, задачи поиска очепяток, кластеризации, дедупликации данных. Все они могут сильно выиграть от поддержки эффективного поиска ближайших соседей в СУБД, которые являются в настоящее время де-факто стандартом хранения данных. Эффективный поиск означает быстрый, конкурентный, масштабируемый поиск и поддержку различных типов данных (возможно, нестандартных), что и было реализовано 11 лет назад в PostgreSQL. Я расскажу про его реализацию, современное состояние и примеры использования.
Слайды
Видео
Видео доступно участникам мероприятия, выполнившим вход в личный кабинет
Другие доклады
-
Павел Лузанов Postgres Professional Руководитель образовательных программ
PostgreSQL 14. Финальный обзор
На протяжении всего релизного цикла 14 версии мне довелось описывать принятые патчи в статьях посвященных каждому из пяти коммитфестов релиза. И даже в первых двух статьях о 15 версии нашлось что добавить про 14-ю. Эти статьи можно найти и прочитать на Хабре (и смело пропустить доклад :-)).
30 сентября наступил тот день, когда PostgreSQL 14 вышел официально. Больше уже ничего не должно измениться. И теперь совершенно точно можно делать финальный обзор изменений.
Однако рассказать обо всем новом в одном докладе - дело практически не реальное. Поэтому постараюсь составить свой собственный топ-лист.
-
Александра Кузнецова Postgres Professional Младший разработчик
Новые возможности Mamonsu 3.0
Mamonsu — это активный агент мониторинга для PostgreSQL, исполненный на базе zabbix. Новое мажорное обновление Mamonsu 3.0 включает в себя новые метрики, больше возможностей для визуализации данных с помощью zabbix screens, улучшенный функционал специальных инструментов Mamonsu для взаимодействия с СУБД. Помимо обзора нового функционала в докладе также затронем нюансы обновления на новую версию.
-
Игорь Косенков Postgres Professional Инженер
Что нам стоит КУК построить
Все прекрасно знают, что такое отказоустойчивый кластер PostgreSQL и как такой кластер защищает от сбоев внутри одного дата-центра. Однако, в последнее время все больше предприятий предъявляют повышенные требования к своим сервисам, эти требования включают и катастрофоустойчивость. Такие кластеры мы называем катастрофоустойчивый кластер - КУК. В докладе я расскажу о разновидностях, принципах и подходах к построению КУКов PostgreSQL на основе кластерного ПО Corosync/Pacemaker.
-
Сергей Новиков ЕДИНЫЙ ЦУПИС Lead DBA
Внедрение партицирования без простоя
Встроенный механизм партицирования в PostgreSQL активно развивается уже несколько лет, но пока ещё нет волшебной кнопки для превращения обычной таблицы в партицированную. Я расскажу, как внедрить партицирование в production-системе без дополнительного простоя, как правильно подготовить таблицу и приложения, какие ошибки подстерегают DBA. Также будут подробно рассмотрены различные техники переноса данных между партициями, их плюсы, минусы и ограничения.