У мобільному додатку зберігається 2 млн векторних ембеддінгів користувацьких документів. pgvector на PostgreSQL видає latency 400 мс на 99-му перцентилі, а мультитенантність вимагає костильних схем. Pinecone — managed векторна БД з автоматичним масштабуванням, P99 <50 мс та вбудованими namespace-ами. Ми підключаємо Pinecone до вашого бекенду та мобільного клієнта, налаштовуємо індексацію, пошук та ізоляцію даних. Досвід — понад 5 успішних інтеграцій, гарантуємо latency пошуку <50 мс на 99-му перцентилі. Ви позбавляєтеся ручного масштабування та налаштування HNSW-індексів.
Проблема: pgvector при корпусі >1 млн дає latency 200–500 мс і вимагає тюнінгу. Pinecone Serverless масштабується автоматично. Але інтеграція потребує правильної архітектури: namespace-и для ізоляції, metadata filtering, батчинг upsert. Ми це реалізуємо. Розберемо ключові технічні рішення, без яких інтеграція Pinecone перетвориться на джерело багів. Зв'яжіться з нами для попередньої оцінки — ми підготуємо архітектуру за один день.
Коли Pinecone замість pgvector?
Pgvector — правильний вибір для старту. Але Pinecone потрібен коли:
- Корпус > 1 млн векторів і latency критична (< 50 мс на 99-му перцентилі)
- Потрібні namespace-и для ізоляції даних різних користувачів
- Вимагається metadata filtering з високою кардинальністю (тисячі унікальних значень)
- Команда не хоче займатися tuning pgvector HNSW-індексів
Для більшості B2C мобільних продуктів pgvector достатній. Pinecone — вибір при серйозному навантаженні або мультитенантності.
Архітектура: чому Pinecone не викликається з мобільного напряму?
API-ключ Pinecone не можна зберігати в мобільному додатку — це загроза безпеці. Правильна схема:
Мобільний клієнт
↓ REST API (з JWT-аутентифікацією)
Ваш бекенд
↓ Pinecone SDK (Node.js / Python / Java)
Pinecone Index
Мобільний клієнт надсилає текстовий запит. Бекенд створює ембеддінг, виконує пошук у Pinecone, повертає відформатований результат. Ми реалізуємо цей шар з нуля або інтегруємо в існуючий бекенд. Згідно з документацією Pinecone, API-ключ повинен бути захищений на серверній стороні.
Namespaces для мобільних додатків
Namespace — логічна ізоляція даних всередині одного індексу. Для мобільного додатку з користувацькими даними:
# Upsert даних користувача в його namespace
index.upsert(
vectors=[
{
"id": f"doc_{doc_id}",
"values": embedding,
"metadata": {
"content": chunk_text,
"source": filename,
"created_at": timestamp
}
}
],
namespace=f"user_{user_id}" # ізоляція даних користувача
)
# Пошук лише за даними конкретного користувача
results = index.query(
vector=query_embedding,
top_k=5,
namespace=f"user_{user_id}",
include_metadata=True
)
Це критично важливо для додатків з особистими документами — без namespace-ів дані всіх користувачів перемішаються в одному індексі.
Metadata filtering
Pinecone підтримує фільтрацію за метаданими. Синтаксис схожий на MongoDB:
results = index.query(
vector=query_embedding,
top_k=10,
filter={
"language": {"$eq": "uk"},
"category": {"$in": ["support", "faq"]},
"created_at": {"$gte": 1700000000}
}
)
Важливе обмеження: на pod-based індексах фільтр застосовується після ANN-пошуку (post-filter). На Serverless — до (pre-filter). Якщо плануєте високоселективні фільтри, використовуйте Serverless.
Upsert з мобільного: завантаження документів користувача
Коли користувач завантажує документ через мобільний додаток:
- Клієнт надсилає файл на бекенд
- Бекенд розбиває на чанки, створює ембеддінги батчем
- Upsert в Pinecone (батч до 100 векторів за раз)
- Бекенд повідомляє клієнта про успіх
Batching важливий: 1000 векторів одним upsert займає той самий час, що й 10 батчів по 100, але один великий запит нестабільніший при мережевих помилках.
// Node.js бекенд — батч upsert
const BATCH_SIZE = 100;
for (let i = 0; i < vectors.length; i += BATCH_SIZE) {
const batch = vectors.slice(i, i + BATCH_SIZE);
await index.upsert({ vectors: batch, namespace: userId });
}
Порівняння Pod-based і Serverless
| Характеристика | Pod-based | Serverless |
|---|---|---|
| Масштабування | Ручне | Автоматичне |
| Фільтрація | Post-filter | Pre-filter |
| Оплата | За под | За операції |
| Latency P99 | < 50 мс | < 50 мс (на холоді ~100 мс) |
Як оптимізувати вартість Pinecone Serverless?
Pinecone Serverless тарифікується за операціями читання/запису. Для мобільного додатку основні витрати — запити пошуку. Оптимізація:
- Кешуйте результати для повторюваних запитів (Redis з TTL 5–15 хвилин)
- Зменшуйте розмірність ембеддінгів якщо якість дозволяє (text-embedding-3-small з dimensions: 512 — вдвічі дешевше зберігання)
- Використовуйте top_k = 5–10, не 50+
Такі заходи дають економію до 40% на зберіганні. Загалом типовий проєкт з Pinecone Serverless обходиться дешевше, ніж власний кластер.
| Метрика | Pinecone Serverless | Самостійний двигун |
|---|---|---|
| Час розгортання | 15 хвилин | 2–3 тижні |
| Latency P99 | < 50 мс | 100–500 мс |
| Масштабування | Автоматичне | Ручне |
| Гарантія SLA | 99.95% | Немає |
Що входить в роботу?
- Проектування архітектури (namespace-стратегія, фільтрація, кешування)
- Реалізація бекенд-сервісу на Node.js або Python з Pinecone SDK
- Інтеграція з мобільним клієнтом (REST API, JWT-аутентифікація)
- Налаштування моніторингу (Pinecone Console, алерти)
- Документація API та схеми даних
- Навчання команди (1–2 години)
- Підтримка 2 тижні після деплою
Етапи інтеграції
- Аналітика — оцінка обсягів даних, latency-вимог, сценаріїв пошуку
- Проектування — схема namespaces, фільтрація, розмірність ембеддінгів
- Реалізація — бекенд-сервіс (upsert, query, батчинг), мобільний API
- Тестування — load-тести з реальними даними, перевірка latency P99
- Деплой — налаштування Pinecone Serverless або pod-based, моніторинг
Строки: від 2 тижнів (інтеграція в існуючий бекенд) до 6 тижнів (з нуля, включаючи ingestion pipeline та мобільний UI). Вартість розраховується індивідуально — отримайте консультацію для оцінки вашого проєкту.
Поширені технічні помилки
- Зберігання API-ключа на мобільному пристрої
- Upsert без батчингу — втрата даних при мережевих помилках
- Вибір pod-based індексу з префільтрацією замість Serverless
- Відсутність namespace-ів — дані користувачів перемішані
- Ігнорування лімітів метаданих (розмір, кількість полів)
Спираючись на наш досвід, уникаємо цих граблів. Налаштуємо Pinecone для вашого мобільного додатку під ключ — зв'яжіться з нами, оцінимо проєкт за один день.







