63 lines
2.2 KiB
Markdown
63 lines
2.2 KiB
Markdown
# Кросс-модальные запросы
|
|
|
|
Уникальная возможность BaraDB — выполнение запросов, охватывающих несколько хранилищ в одном унифицированном операторе BaraQL.
|
|
|
|
## Обзор
|
|
|
|
Традиционные базы данных требуют отдельных запросов и соединений на уровне приложения при работе с разными моделями данных. BaraDB оптимизирует выполнение:
|
|
|
|
- **Документ/KV** (LSM-Tree) — структурированные записи
|
|
- **Граф** (Список смежности) — связи
|
|
- **Вектор** (HNSW/IVF-PQ) — поиск по сходству
|
|
- **Полнотекстовый** (Инвертированный индекс) — текстовый поиск
|
|
- **Колоночный** — аналитические агрегаты
|
|
|
|
## Паттерны запросов
|
|
|
|
### Вектор + Полнотекстовый
|
|
|
|
```sql
|
|
SELECT title, score
|
|
FROM articles
|
|
WHERE MATCH(body) AGAINST('machine learning')
|
|
ORDER BY cosine_distance(embedding, [0.1, 0.2, 0.3, ...])
|
|
LIMIT 10;
|
|
```
|
|
|
|
### Граф + Вектор
|
|
|
|
```sql
|
|
MATCH (u:User)-[:KNOWS]->(friend:User)
|
|
WHERE u.name = 'Alice'
|
|
ORDER BY cosine_distance(friend.taste_vector, u.taste_vector)
|
|
RETURN friend.name, friend.age;
|
|
```
|
|
|
|
### Документ + Граф
|
|
|
|
```sql
|
|
SELECT o.id, o.total, c.name
|
|
FROM orders o
|
|
JOIN customers c ON o.customer_id = c.id
|
|
WHERE c.id IN (
|
|
SELECT node_id FROM graph
|
|
WHERE MATCH pattern (c:Customer)-[:REFERRED]->(:Customer)
|
|
);
|
|
```
|
|
|
|
## Оптимизация
|
|
|
|
### Кросс-модальный планировщик
|
|
|
|
1. Наиболее селективный фильтр первым
|
|
2. Предикаты проталкиваются в каждый движок
|
|
3. Bloom фильтры для KV поисков
|
|
4. Параллельное выполнение независимых ветвей
|
|
|
|
## Производительность
|
|
|
|
| Тип запроса | Латентность (10K строк) |
|
|
|-------------|--------------------------|
|
|
| FTS + Vector | 15 ms |
|
|
| Graph + Vector | 25 ms |
|
|
| FTS + Aggregate | 12 ms | |