TIN : la recherche full-text ultrarapide arrive nativement dans Postgres
En bref
- PlanetScale annonce TIN, une extension Postgres de recherche full-text en GA qui supporte expressions booléennes, fuzzy matching, scoring BM25 et jointures complexes.
- Dans les benchmarks, TIN traite 25 fois plus de requêtes par seconde que ParadeDB sur des workloads mixtes et montrant p99 latencies 26x plus basses.
- L'extension gère les inserts/updates/deletes concurrents avec visibilité transactionnelle correcte, contrairement aux solutions existantes (ParadeDB, pg_textsearch, GIN Postgres) qui échouent sur certains cas d'usage.
- Le code demeure propriétaire pour l'instant ; plusieurs commentateurs demandent déjà l'open source.
Ce que dit la source
PlanetScale affirme que ses clients demandent régulièrement une recherche full-text native à Postgres, et que les trois solutions existantes (ParadeDB, pg_textsearch, GIN) n'offrent pas toutes les fonctionnalités requises ou échouent sur certains workloads. TIN est présenté comme la première extension à répondre à l'ensemble des besoins : expressions booléennes, phrase queries, fuzzy/wildcard/regex, scoring BM25, COUNT(*) avec jointures et replication correctes, et surtout concurrence de lecture-écriture sans blocage. Les benchmarks sont réalisés sur un corpus de 85 GB (Stack Exchange) et montrent des gains de performance spectaculaires, particulièrement sur les requêtes mixtes.
- TIN supporte expressions booléennes, phrase queries, fuzzy/wildcard/regex matching et scoring BM25, ce que les trois alternatives existantes ne font pas conjointement
- Index entre 8 min 10 s et 2h 09 m selon la solution, TIN en tête ; seulement TIN et ParadeDB complètent tous les benchmarks
- Workload requêtes mixtes top-10 : TIN traite 25× plus de requêtes/s que ParadeDB et offre p99 latencies 26× plus basses
- Benchmarks sur corpus de 85 GB (Stack Exchange) : 150 millions de documents, requêtes synthétiques de 2 à 15 termes, interprétées en 3 formes
- Gère concurrent writes, joins, replication, backups et transaction visibility, à l'inverse de GIN qui sort de mémoire sur les disjunctions
Dans les commentaires
Peu de débat substantiel sur ce fil. Un commentateur pose une question technique légitime sur un cas d'usage spécifique (filtres multi-colonnes avec tri), un autre demande l'open source. Pas de critique directe de la solution ou des benchmarks.
- Un commentateur soulève une limite potentielle : les cas d'usage mêlant filtrage full-text avec filtres de plage (date, user) et tri par colonne non-indexée, où seul GIST avec pg_trgm le gère aujourd'hui sans forcer le tri post-requête de gros resultsets.
- La question de l'open source revient d'emblée, TIN étant pour l'instant propriétaire à PlanetScale.
Notre lecture
TIN est une annonce solide : les gains de performance sont chiffrés (25×, p99 26× plus bas), les benchmarks reproductibles (instance EC2 et paramètres documentés), et les cas d'usage couverts élargissent vraiment ce que Postgres peut faire en full-text sans extensions fragiles. Reste à vérifier : comment TIN se comporte en production sur des tables très actives (MVCC overhead), et si les benchmarks sur Stack Exchange se généralisent bien aux corpus de l'utilisateur (Enron, Reddit, corpus maison). Le modèle commercial n'est pas clair (propriétaire, SaaS uniquement, licence future ?) et c'est un frein pour adoption hors PlanetScale. À surveiller, mais pas d'action imédiate pour une DSI Postgres standard tant que TIN n'est accessible que via PlanetScale.