Автор: Ming Ying, 1 октября 2026 г. Две недели назад Planet Scale представила TIN — расширение полнотекстового поиска для Postgres. В их анонсе сообщалось о впечатляющих преимуществах в производительности по сравнению с подмножеством функций текстового поиска Parade DB, в частности текстового поиска с ранжированием BM25 и подсчета документов. Мы хотели бы выразить признательность команде Planet Scale. Приятно видеть, что еще одна платформа Postgres инвестирует в поиск, и очевидно, что в TIN было вложено много продуманной инженерной работы.
Давайте будем очень четкими в одном: TIN быстр (по крайней мере, в 8 раз быстрее Parade DB 0.25 в каждом тесте Planet Scale). Настолько быстр, что единственным разумным ответом было замолчать и надеть наши шляпы оптимизации производительности. Две недели спустя, вот результаты до и после с ранжированием BM25, с использованием того же набора данных теста Stack Exchange, того же оборудования и тех же типов машин.
Интересно не то, что мы быстро сократили разрыв, а то, как мы его сократили. В посте TIN утверждается, что их производительность обусловлена фундаментальным архитектурным различием, которое использует внутренние поля ctid Postgres в качестве идентификаторов документов. Однако мы сократили этот разрыв с помощью нескольких оптимизационных проходов, которые имели мало общего с тем, как идентифицируются документы.
Сердцем любого индекса текстового поиска является список постингов. Tantivy, поисковая библиотека, лежащая в основе Parade DB, использует последовательные u32 идентификаторы документов для своих постингов. Postgres идентифицирует свои строки по значениям ctid. Суть поста TIN заключается в том, что использование значений ctid непосредственно в качестве идентификаторов документов устраняет эту карту и обеспечивает эффективные операции с битовыми картами и проверки видимости. Для запросов BM25 Top K мы были скептичны.
Источник: Hacker News · Сводку подготовил HeadlinesBriefing