title

text

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

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

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

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

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

Слайды

Видео

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

  • Александр Никитин
    Александр Никитин ЗАО «ЦФТ» Администратор баз данных
    22 мин

    Работа с запросами с точки зрения DBA

    Работа с запросами может внести огромный вклад в производительность сервера БД. В своём докладе я расскажу о том, какие инструменты мы используем, а также разберу некоторые примеры, которые встречались в нашей практике. Доклад будет интересен администраторам и разработчикам, которые хотели бы познакомиться с приёмами, которые мы используем в повседневной работе.

  • Владимир Сурдин
    Владимир Сурдин МГУ им.М.В.Ломоносова доцент
    45 мин

    Мифы и заблуждения о Вселенной

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

  • Василий Пучков
    Василий Пучков ООО Главный эксперт
    45 мин

    Кластер PostgreSQL на Astra Linux для баз 1С

    Тернистый путь к четырём девяткам. Особенности кластеризации Постгрес в виртуальной среде - зачем и как? Почему Corosync/Pacemaker? Что с резервным копированием? Сложности и проблемы, и как их избежать.

  • В
    Виталий Богданов АО «Байкал Электроникс» Директор по развитию
    22 мин