Когда я делал AI-поиск товаров в Price AI, передо мной встал классический выбор современного разработчика. Поиск по смыслу работает через векторы — это такие длинные списки чисел, которые описывают «о чём» товар. Их надо где-то хранить и быстро искать похожие. Под эту задачу есть модные специальные базы: Pinecone, Weaviate, Qdrant.
Я выбрал не их. Я остался на обычном Postgres, добавив к нему расширение pgvector.
Соблазн взять модное был. Это и в резюме круто, и на конференциях есть о чём рассказать. Но я сел и подумал про реальность.
У меня уже есть Postgres. В нём лежат товары, поставщики, заказы — вся бизнес-логика. Если я добавляю отдельную базу под векторы, я получаю два хранилища вместо одного. Их надо синхронизировать: добавил товар сюда — не забудь добавить его эмбеддинг туда. Удалил — не забудь удалить. Бэкапить теперь две системы. Мониторить две системы. И главное — теперь может сломаться что-то одно, и продукт сломается частично. Это хуже чем когда падает всё разом, потому что баг сложнее заметить.
При этом мой объём — 290 тысяч векторов. Это копейки. Под Pinecone обычно идут проекты с миллионами и десятками миллионов. У pgvector с моим объёмом поиск отрабатывает за миллисекунды.
И ещё один момент, который перевесил окончательно. У меня в реальном поиске почти никогда не бывает «найди просто похожее». Запрос всегда сложнее: «найди похожее, но из категории "пицца-печи", дешевле 200 тысяч, и чтобы было в наличии». То есть смысловой поиск пересекается с обычными фильтрами по колонкам. В Postgres это один SQL-запрос — он умеет всё сразу. В специализированной базе так не получится: либо сначала ищешь похожих и потом фильтруешь руками (медленно), либо строишь два запроса в две системы и склеиваешь результаты (сложно).
Pinecone я взял бы если бы у меня было 50 миллионов векторов и нагрузка как у Spotify. У меня их 290 тысяч и нагрузка как у обычного B2B-кабинета. Postgres у меня уже работает, я его знаю, его знают коллеги, у него надёжный бэкап. Это три лучших аргумента для любого инструмента в проекте.
Скучные технологии — лучшие технологии. Не потому что они плохие, а потому что они уже один раз доказали что работают. И ты не тратишь свой проект на их повторное доказательство.
